(昵稱和頭像已經(jīng)過處理)
這個問題,有很多人問到過。關(guān)于STM32定時器的時鐘,TIM2使用APB1的時鐘,APB1的時鐘分明是36M,到了TIM2為什么就是72M了?
來來來,不要把問題想的太復(fù)雜,關(guān)于這個問題,我們看STM32的時鐘圖,有必要的話,你可以把時鐘圖打印出來貼到墻上每天看,見多了就熟悉了。
(我截取了時鐘圖的一部分)
看第一個圓圈內(nèi)容,APB1的時鐘,最大是36M,由分頻系數(shù)決定,當(dāng)分頻系數(shù)是2的時候,APB1的時鐘就是36MHz。
看第二個圓圈內(nèi)容,當(dāng)APB1的分頻系數(shù)不為1的時候,TIMXCLK的時鐘就是APB1的時鐘乘以2。所以TIM2的時鐘就是72MHz了。
為什么可以乘以2?答:手冊上就是這么說的,至于為什么,你得去問STM32芯片廠商的IC工程師了。
在Keil里面的system_stm32f10x.c文件的SetSysClockTo72()函數(shù),默認(rèn)就是配置APB1位2分頻,如下圖所示:
有同學(xué)還會有疑問,當(dāng)分頻系數(shù)設(shè)置為1的時候,APB1的時鐘豈不是72MHz了?答案是NO。
請看CFGR寄存器定義:
當(dāng)你設(shè)置為1的時候,是不起作用的。