这两天写程序突然发现通用定时器是挂在APB1总线上的,而APB1总线的时钟最大为36MHz,那为什么通用定时器的时钟还是可以是72MHz呢?找了资料,看了原子哥的视频才搞明白。
首先看一张图
从图中可以清楚地看到通用定时器TIM2~7的时钟是通过AHB、APB1得来的。图中有这么一句话
这句话的意思就是如果APB1对来自AHB的时钟进行1分频(也就是不分频的话),那么APB1的时钟直接就送给了通用定时器,也就是图中说的x1输出;如果APB1对来自AHB的时钟进行的不是1分频(除1分频以外的其他任何一个分频),那么此时通用定时器得到的时钟就是APB1时钟的两倍,也就是图中说的x2输出,但是此时挂在APB1上的其他外设的时钟并不是APB1的2倍,他们就是APB1对AHB分频之后再经过APB1的分频后的实际值。
再看一张图,可能会更加清晰点。
图中说的很清楚:除非APB1的分频系数是1,否则通用定时器的时钟等于APB1时钟的两倍,而SystemInit函数在初始化的时候,设置的APB1的分频系数是2分频,那么此时通用定时器的时钟就是APB1时钟的两倍,初始化之后APB1时钟是AHB时钟的2分频,也就是一半36MHz,那么通用定时器的时钟是APB1的两倍,那么通用定时器的时钟就是72MHz,也就是图中的CK_INT(送往通用定时器)的时钟是72MHz,但是CK_CNT(送往挂在APB1上除了通用定时器的其他外设)的时钟仍然是APB1的时钟,也就是36MHz。而F(CK_PSC)的作用就是对挂在APB1上除了通用定时器的其他外设提供对APB1分频之后的时钟。
综上,通用定时器的时钟最大为72MHz,挂在APB1上除了通用定时器的其他外设时钟最大为36MHz。这样设计的目的就是让挂在APB1上的低速外设有合适的低速时钟,同时还可以让挂在APB1上的通用定时器能够在不影响低速外设的情况下仍然有高速的时钟。
这么解释大家应该都很清楚了吧。简单来说,就是同样是挂在APB1总线上,但是通用定时器可以有72MHz的时钟,而其他外设只能有36MHz的时钟,并且还不会互相干扰。
注:系统时钟初始化后,默认AHB是72MHz,APB1是AHB的2分频36MHz,通用定时器时钟是APB1的两倍72MHz。
通用定时器的时钟为什么也是72MHz
最新推荐文章于 2024-08-31 06:00:00 发布