Exemplo n.º 1
0
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)
{
  /* Check the parameters */
  assert_param(IS_RCC_APB2_PERIPH(RCC_APB2Periph));
  assert_param(IS_FUNCTIONAL_STATE(NewState));
  if (NewState != DISABLE)
  { 
    RCC->APB2ENR |= RCC_APB2Periph;
  } 
  else
  { 
    RCC->APB2ENR &= ~RCC_APB2Periph;
  }
}
Exemplo n.º 2
0
void Motor_PWM_Init(Motor motor)
{
  RCC_AHBPeriphClockCmd(motor.GPIO_PWM_RCC, ENABLE);
  GPIO_InitStructure.GPIO_Pin = motor.GPIO_PWM_Pin;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_Level_3;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  GPIO_Init(motor.GPIO_PWM_GPIOx, &GPIO_InitStructure);

  GPIO_PinAFConfig(motor.GPIO_PWM_GPIOx, motor.GPIO_PWM_PinSource, motor.GPIO_PWM_AF);

  if (motor.TIMx == TIM1) {
    RCC_APB2PeriphClockCmd(motor.TIMx_RCC, ENABLE);
  } else if (motor.TIMx == TIM2) {
    RCC_APB1PeriphClockCmd(motor.TIMx_RCC, ENABLE);
  } else {
    if (IS_RCC_APB2_PERIPH(motor.TIMx_RCC))
    {
      RCC_APB2PeriphClockCmd(motor.TIMx_RCC, ENABLE);
    }
    else
    {
      RCC_APB1PeriphClockCmd(motor.TIMx_RCC, ENABLE);
    }
  }

  TIM_TimeBaseStructure.TIM_Prescaler = 720;//PrescalerValue;
  TIM_TimeBaseStructure.TIM_Period = 100 - 1;
  TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  
  TIM_TimeBaseInit(motor.TIMx, &TIM_TimeBaseStructure);

  TIM_OCInitStructure.TIM_OCMode = motor.TIMx_Mode;
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_Pulse = motor.speed;
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
    
  switch (motor.TIMx_Channel)
  {
    case TIM_Channel_1:
      TIM_OC1Init(motor.TIMx, &TIM_OCInitStructure);
      TIM_OC1PreloadConfig(motor.TIMx, TIM_OCPreload_Enable);
      break;
    case TIM_Channel_2:
      TIM_OC2Init(motor.TIMx, &TIM_OCInitStructure);
      TIM_OC2PreloadConfig(motor.TIMx, TIM_OCPreload_Enable);
      break;
    case TIM_Channel_3:
      TIM_OC3Init(motor.TIMx, &TIM_OCInitStructure);
      TIM_OC3PreloadConfig(motor.TIMx, TIM_OCPreload_Enable);
      break;
    case TIM_Channel_4:
      TIM_OC4Init(motor.TIMx, &TIM_OCInitStructure);
      TIM_OC4PreloadConfig(motor.TIMx, TIM_OCPreload_Enable);
      break;
  }
  if (motor.TIMx == TIM1 || TIM8) {
    TIM_CtrlPWMOutputs(motor.TIMx, ENABLE);
  }
  TIM_ARRPreloadConfig(motor.TIMx, DISABLE);
  TIM_Cmd(motor.TIMx, ENABLE);
}