關(guān)于STM32系統(tǒng)時鐘和STM32定時器的使用若干注意點
1.這里總結(jié)一下SystemInit()函數(shù)即上電啟動后中設(shè)置的默認(rèn)系統(tǒng)時鐘大?。?br/>
SYSCLK(系統(tǒng)時鐘)=72MHzAHB總線時鐘(使用SYSCLK) =72MHz
PLL時鐘=72MHz
2.關(guān)于STM32定時器重要寄存器說明:
1)自動重裝載寄存器(TIMx_ARR):(這里所指的重裝載是裝到影子寄存器,與計數(shù)器沒關(guān)系)該寄存器在物理上實際對應(yīng)著2個寄存器。一個是程序員可以直接操作的,另外一個是程序員看不到的,這個看不到的寄存器在《STM32參考手冊》里面被叫做影子寄存器,事實上其實質(zhì)作用的是影子寄存器。TIMx_CR1寄存器中APRE位的設(shè)置對這兩個寄存器是否同步會有影響,當(dāng)ARPE自動重裝載預(yù)裝載允許位為0值(默認(rèn)),預(yù)裝載寄存器值和影子寄存器是連通的(兩者之間無緩存),同步更新;而當(dāng)ARPE位為1值時,預(yù)裝載寄存器值和影子寄存器是連通的(兩者之間存在緩存機制),則只有在每次有“更新事件(UEV)”時,預(yù)裝載寄存器值才會傳到影子寄存器起作用。具體可參參考手冊時序圖。
2)改變時鐘頻率當(dāng)配置完新的預(yù)分頻器,定時器的時鐘是在發(fā)生更新后生效
3)查看手冊時序圖可知,定時器當(dāng)發(fā)生更新事件事,計數(shù)器會根據(jù)不同模式計數(shù)由0(向上模式)或者自動重裝載值大?。ㄏ蛳拢╅_始計數(shù)
2)UEV事件:(update event) ,即產(chǎn)生更新事件。手冊當(dāng)中說的很詳細(xì),簡單來講,就是CR寄存器的UDIS位設(shè)置是否是能更新事件(默認(rèn)0是使能),URS位配置更新事件源。在使能情況下比如定時器溢出時則對應(yīng)的SR的UIF位會置1。(關(guān)于比如UIF更新事件位通串口下狀態(tài)位一樣,其也是中斷或者狀態(tài)查詢(但畢竟定時器用查詢方式還是感覺沒啥用)用的通一個位,這和串口使用TC或者RXNE是一樣的道理,我們可通過查庫函數(shù)實現(xiàn)驗證TIM_GetFlagStatus()和TIM_GetITStatus()用的都是SR的同一個位,只不過后者會先檢查中斷是否使能而已)
3)TIMx_EGR寄存器:這是個實現(xiàn)用軟件置位產(chǎn)生各種類型事件的寄存器,與SR不同
4)關(guān)于普通定時器內(nèi)部輸入時鐘配置下內(nèi)部時鐘分頻因子和分頻值的關(guān)系:
參見手冊關(guān)于時鐘源和時鐘圖解釋,選用內(nèi)部時鐘即對應(yīng)的APB1時鐘,二內(nèi)部時鐘分頻因子是對APB1時鐘進(jìn)行分頻,而預(yù)分頻器的時鐘就是內(nèi)部時鐘分頻后得到的,這是兩者的關(guān)系。不過一般情況下我們設(shè)置內(nèi)部時鐘的分頻因子為1