STM32定时器时钟 36M和72M迷糊的问题

  • 学习8742次

STM32定时器时钟1

STM32定时器时钟2

(昵称和头像已经过处理)

这个问题,有很多人问到过。关于STM32定时器的时钟,TIM2使用APB1的时钟,APB1的时钟分明是36M,到了TIM2为什么就是72M了?

来来来,不要把问题想的太复杂,关于这个问题,我们看STM32的时钟图,有必要的话,你可以把时钟图打印出来贴到墙上每天看,见多了就熟悉了。

STM32定时器时钟3
(我截取了时钟图的一部分)

看第一个圆圈内容,APB1的时钟,最大是36M,由分频系数决定,当分频系数是2的时候,APB1的时钟就是36MHz。

看第二个圆圈内容,当APB1的分频系数不为1的时候,TIMXCLK的时钟就是APB1的时钟乘以2。所以TIM2的时钟就是72MHz了。

为什么可以乘以2?答:手册上就是这么说的,至于为什么,你得去问STM32芯片厂商的IC工程师了。

在Keil里面的system_stm32f10x.c文件的SetSysClockTo72()函数,默认就是配置APB1位2分频,如下图所示:

stm32定时器时钟4

有同学还会有疑问,当分频系数设置为1的时候,APB1的时钟岂不是72MHz了?答案是NO。

请看CFGR寄存器定义:

stm32定时器时钟5

当你设置为1的时候,是不起作用的。

你明白了吗?欢迎大家和我交流。

我已经把这篇文章做成了PDF,你可以下载到你的电脑永久保存了:

STM32定时器时钟-36M和72M迷糊的问题

发表评论