STM32 PWM周期与频率的计算
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInitStructure.TIM_Period = 100 - 1; //ARR 自动重装器的值
TIM_TimeBaseInitStructure.TIM_Prescaler = 72 - 1; //PSC 预分频器的值 对72M(720000000)进行 7200分频 即10K的频率下 计10000个数 1s的时间
TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;//重复计数器的值 CCR
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure);
频率的计算
首先,要明确两点:
1、 ARR(TIM_Period)
是计数值;
2、 PSC(TIM_Prescaler)
是预分频值。
计算公式:Fpwm = 主频 / ((ARR+1)*(PSC+1))(单位:Hz)

例如:STM32F103的主频为
72M
按如上设置可知
ARR = 100 -1
PSC = 72-1
所以Fpwm = 72M/(100*72)= 10kHz
也就是1/100k S = 100us
占空比的计算
计算公式:duty circle = TIM3->CCR2 / ARR(单位:%)
若是我传入的
Compare = 20
,则duty circle = 20 / 100 = 20%