分享關(guān)于stm32f407定時(shí)器時(shí)鐘頻率的問(wèn)題
上午想要用Timer10做相對(duì)精確的延時(shí)功能,但是用示波器發(fā)現(xiàn)實(shí)際延時(shí)數(shù)值總是只有一半,百思不得其解。
仔細(xì)查閱各處資料結(jié)合實(shí)際研究后對(duì)stm32f407的14個(gè)定時(shí)器的時(shí)鐘做一個(gè)總結(jié):
從時(shí)鐘樹(shù)中我們可以得知(時(shí)鐘樹(shù)的圖片可以直接參考6樓,感謝6樓xkwy補(bǔ)上的圖):
(1)高級(jí)定時(shí)器timer1, timer8以及通用定時(shí)器timer9, timer10, timer11的時(shí)鐘來(lái)源是APB2總線
(2)通用定時(shí)器timer2~timer5,通用定時(shí)器timer12~timer14以及基本定時(shí)器timer6,timer7的時(shí)鐘來(lái)源是APB1總線
從STM32F4的內(nèi)部時(shí)鐘樹(shù)可知,當(dāng)APB1和APB2分頻數(shù)為1的時(shí)候,TIM1、TIM8~TIM11的時(shí)鐘為APB2的時(shí)鐘,TIM2~TIM7、TIM12~TIM14的時(shí)鐘為APB1的時(shí)鐘;而如果APB1和APB2分頻數(shù)不為1,那么TIM1、TIM8~TIM11的時(shí)鐘為APB2的時(shí)鐘的兩倍,TIM2~TIM7、TIM12~TIM14的時(shí)鐘為APB1的時(shí)鐘的兩倍。
因?yàn)橄到y(tǒng)初始化SystemInit函數(shù)里初始化APB1總線時(shí)鐘為4分頻即42M,APB2總線時(shí)鐘為2分頻即84M,所以TIM1、TIM8~TIM11的時(shí)鐘為APB2時(shí)鐘的兩倍即168M,TIM2~TIM7、TIM12~TIM14的時(shí)鐘為APB1的時(shí)鐘的兩倍即84M。
知道定時(shí)器的時(shí)鐘源頻率我們用定時(shí)器做延時(shí)就很方便了,只要設(shè)定合適的分頻系數(shù)即可,附一下用中斷實(shí)現(xiàn)延時(shí)的公式:(摘自原子的STM32F4開(kāi)發(fā)指南)
Tout = ((arr+1)*(psc+1))/Tclk;
公式中psc就是分頻系數(shù),arr就是計(jì)數(shù)值,達(dá)到這個(gè)計(jì)數(shù)就會(huì)發(fā)生溢出中斷,Tclk就是我上述分析的時(shí)鐘源頻率的倒數(shù)。