Stm32 产生pwm的频率解惑?

问题一:

//TIM2预分频设置:1MHZ,APB1分频系数2,输入到TIM3时钟为36MHzx2 = 72MHz  

TIM_PrescalerConfig(TIM2,71, TIM_PSCReloadMode_Immediate);

 

void TIM_PrescalerConfig(TIM_TypeDef* TIMx, uint16_t Prescaler, uint16_t TIM_PSCReloadMode)

{

  /* Check the parameters */

  assert_param(IS_TIM_ALL_PERIPH(TIMx));

  assert_param(IS_TIM_PRESCALER_RELOAD(TIM_PSCReloadMode));

  /* Set the Prescaler value */

  TIMx->PSC = Prescaler;

  /* Set or reset the UG Bit */

  TIMx->EGR = TIM_PSCReloadMode;

}

Stm32 产生pwm的频率解惑?_第1张图片

当设置为立即变化时,即设置UG1 ,立即产生一个更新事件,分频系数发生改变。

上条语句等价于

TIM_TimeBaseStructure.TIM_Prescaler = 71;

此时的CNT的计数频率为1MHZ

 

问题二:

TIM_TimeBaseStructure.TIM_Period = 1000;  //1KHz

上面语句设置了自动重装载值为999ARR

此语句之后pwm的频率为1kHz

如何算出来的呢?  其实很简单,1M/1000 = 1kHz

PWM的一个周期为计数器从0计数到ARR,即计数1000次才一个周期

 

问题三:

 uint16_t TIM_Pulse;         /*!< Specifies the pulse value to be loaded into the Capture Compare Register.

                                   This parameter can be a number between 0x0000 and 0xFFFF */

 

等价于

void TIM_SetCompare2(TIM_TypeDef* TIMx, uint16_t Compare2)

都是设置CCR寄存器的值


你可能感兴趣的:(STM32)