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