STM32學(xué)習(xí)之路(五)——RTC系統(tǒng)時鐘
在STM32的CPU有一個RTC引腳,用于連接電池。當(dāng)系統(tǒng)掉電后,自動由電池給RTC供電,完成時間計數(shù)。
對RTC的訪問是通過APB1接口進行的。APB1剛被開啟的時候,從APB1讀來的RTC寄存器的第一個值可能是被破壞了的。因此在程序中,先等待RTC_CRL寄存器中的RSF位被硬件置1,然后才開始讀操作。對于寫操作,在每一次寫操作必須保證前一次寫操作完成,即通過查詢RTC_CR寄存器中的RTOFF狀態(tài)位,判斷RTC寄存器是否處于更新狀態(tài)中。只有當(dāng)RTOFF狀態(tài)位是1,才可以寫RTC寄存器。
RTC模塊的寄存器實際上只有5個:控制寄存器RTC_CR,預(yù)分頻裝在寄存器RTC_PRL,預(yù)分頻余數(shù)寄存器RTC_DIV,計數(shù)器寄存器RTC_CNT,鬧鐘寄存器RTC_ALR。
第一次配置需要做的工作包括:
1.打開電源管理和備份寄存器時鐘。注意一定要打開備份寄存器時鐘。正是通過備份寄存器寫固定的數(shù)據(jù)來判斷芯片是否是第一次使用RTC,從而在系統(tǒng)運行時提示配置時鐘。
2.使能RTC和備份寄存器的訪問(復(fù)位默認(rèn)是關(guān)閉的)。
3.選擇外部低速晶體為RTC時鐘,并使能時鐘。
4.使能秒中斷。程序里在秒中斷里置位標(biāo)志位來通知主程序顯示時間數(shù)據(jù),同時在32位計數(shù)器到23:59:59時清零。
5.設(shè)置RTC預(yù)分頻器,產(chǎn)生1秒信號計算公式。FTR_CLK=FRTCCLK/(PRL+1)設(shè)置32767產(chǎn)生秒信號。
通過RTC_GetConter();獲取計數(shù)值,然后把這個計數(shù)值分別用小時、分鐘、秒來表示,最后還需要調(diào)用Printf函數(shù)把它顯示在超級終端窗口或相應(yīng)的其它顯示函數(shù)。
效果圖見http://v.youku.com/v_show/id_XNTk5MTM4MjY4.html,比較有意思的一段小視頻。重點看后面的時間是按秒更新的。
評論