最近回头学习STM32F407单片机,以此文做为学习记录。若有哪位小伙伴有不同见解的,可以互相交流。
一、TIMx时钟不清楚如何计算
这里不得不提到STM32F407系列的时钟树,以及对应时钟树各参数值的定义,参数值的定义可以查看文件system_stm32f4xx.c
因我使用的STM32F407为8MHz外设,对应的M值应为8。PWM需要使用TIMx进行比较输出,故使用APB1/APB2的时钟,我这以TIM3为例,TIM3使用APB1时钟总线,APB1时钟总线的分频量PRESC为4。因此APB1时钟总线输出的时钟频率为:HSE/M*N/P/APB1_PRESC*2 ,即8/8*336/2/4*2 = 84MHz
(二)如何计算PWM频率,PWM频率高、低有何区别,PWM各分量的理解
在使用TIMx完成PWM的比较输出时,需要输出指定频率的PWM,而在初始化时与TIM_TimeBaseInitTypeDef结构体下的TIM_Period与TIM_Prescaler变量有关。计算公式如下:APB1时钟/(TIM_Prescaler+1)/TIM_Period。
PWM频率高表示变化快,低了变化慢。若使用于电机、PWM灯控时,会有很深的体验。PWM灯控时,若PWM频率较低,当PWM设置值过低时,会有频闪的现象;用于电机时,若达不到最低驱动频率,电机将无法正常工作。
PWM分量即TIM_Period值,表示该时钟周期内(即晶振(HSE 8MHz)完成一个周期的信号输出),能操作的PWM分量,可让该周期内的PWM输出高/低电平的次数,即占空比。