为啥stm32的定时器时钟得以72mhz去算

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥stm32的定时器时钟得以72mhz去算相关的知识,希望对你有一定的参考价值。

这个根据芯片内部时钟树来决定的。
外设往往是通过主频 分频后 再倍频得来的
定时器的时钟,就是72mhz,直接用就可以了,然后定时器可以自己内部再对这个72mhz分频。。
有的就不是72mhz了,比如 usb就是48mhz
以上 是对103而言
参考技术A 因为习惯的,system_Init()初始化的时候就将系统时钟设置为72MHz,很少有人去修改这函数。

STM32的APB时钟预分频数到底是怎么确定的?AHB的频率到底是72MH还是啥是有啥决定的?

APB1预分频器可以1、2、4、8、16分频,那么究竟在写程序的时候是设置哪个函数可以设置这个分频数呢?
APB1在定时器中,如果APB预分频=1则定时器的时钟频率以频率x1输出,否则x2输出。定时器初始化中,psc是预分频数,那么所谓的预分频是1还是其他值是指psc的值么?可是psc设置时候取什么值得都有啊?这个时候时钟频率仍旧是2倍么??
或者这个预分频是指TIM_ClockDivision么?

APB1最大频率是36Mhz,这个在初始化的时候就已经设置了的,如果用库函数默认就是36Mhz,在main函数运行前就设置了,一般可以不管。如果自己操作寄存器就不一定了。

然后psc的问题:其实里面有两个分频的概念,APB预分频和计数器时钟频率(CK_PSC)的关系指的是AHB分频得到APB1,一般AHB取最大72Mhz,所以APB1是AHB的2分频,既然不是1分频,所以计数器时钟就是APB1的2倍了。而最终定时器的时钟频率(CK_CNT)是对CK_PSC进行psc值的分频得到的,这个值就是我们用来定时计算的数值。

图中CK_PSC就是从APB1得到的时钟,预分频控制寄存器的值就是PSC里面的值,而CK_CNT就是分频最终得到的值。

参考技术A APB1就是72mh,然后按照psc值对72分频 看时钟树就知道了追问

可是psc的值不是在0——65536随便取的么?并不是只有1、2、4、8、16几个取值的呀?而且,APB不是36M么??

参考技术B static void SetSysClockTo72(void)

RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;

以上是关于为啥stm32的定时器时钟得以72mhz去算的主要内容,如果未能解决你的问题,请参考以下文章

STM32定时器的预装载值和预分频系数如何确立

STM32系统时钟配置,滴答定时器配置相关

只有stm32有系统滴答定时器吗

STM32定时器时钟频率不变,保持在1.6MHz

STM32的APB时钟预分频数到底是怎么确定的?AHB的频率到底是72MH还是啥是有啥决定的?

STM32F10X-定时器/计数器