今天在调试stm32 输出一路PWM信号,但是周期总是比预期大一倍,虽然说可以通过预分频寄存器降下来,但是理论跟实际不相符总让人心里有点不放心,于是重新查看了参考手册,发现原来是我一直理解错了。
从上图可以看出,在输入给time时钟的,不管是APB1,还是APB2都是经过一个倍频率器的。这样就可以理解 我输出的频率为什么总是比预想的大了一倍。
AHB=72M,那么 APB1 Prescaler就必须是大于2的一个值,再按照上图,TIM2--7的时钟源 就是2*PCLK1。
我在使用的值:AHB=72M,APB1 Prescaler = 2 ,PCLK1 = 36M,TIM2的CLK=72M,而不是我原先想的36M。
真是有点佩服stm32原厂的工程师,这样的设计,可以让time的CLK比同一总线上的外设CLK至少快两倍,可以实现定时器对外设连接控制,并且使定时器获得更高分辨率……