RTC 是一個獨立的定時器,能夠在 STM32 的低功耗模式下運行。
選擇 RTC 時鐘源
RTC 時鐘的時鐘源能夠有三種選擇,分別是 HSE 高速晶振、LSE 低速晶振、LSI 內部晶振,如題下圖所示。
通過 RCCHSEConfig()、RCCLSEConfig()、RCC_LSICmd() 三個函數能夠分別對上述三種時鐘進行設置。
本質上分別是對 RCCCR、RCCBDCR、RCC_CSR 中相對應寄存器進行設置。
通過 RCC_RTCCLKConfig() 等函數能夠選擇 RTC 的時鐘源,如下圖所示:
RTC 結構
RTC 和 BKP 的結構如上圖所示,陰影部分是 BKP 區域,其中有 RTC 相關的寄存器,后備區域獨立于 CPU,通過對 PWRCR 寄存器中 DBP 的置位,即 PWRBackupAccessCmd() 函數,能夠開啟 RTC 和 BKP 區域的寫使能,理論上說,設置 RTCCRL 寄存器中的 CNF 位即 RTCEnterConfigMode() 函數也能夠讓 RTC 進入設置模式,但目前操作不成功。
RTCPRL 置位后,RTCCNT 計數器開始運行,配合 RTCALR、RTCCR 等寄存器,開始實現 RTC 功能。
RTCWaitForSynchro() 函數,讀 RTCCLR 寄存器中 RSF 位,確保RTCCNT、RTCALR或RTCPRL已經被同步。(若在讀取RTC寄存器時,RTC的APB1接口曾經處于禁止狀態,則軟件首先必須等待RTCCRL寄存器中的RSF位(寄存器同步標志)被硬件置’1’。)
RTCWaitForLastTask() 函數,讀 RTCCLR 寄存器中 RTOFF 寄存器,判斷上一次操作是否已完成。
RTCITConfig(RTCITSEC,ENABLE) 函數,開啟 RTC 中的秒中斷,RTC 中共有三種中斷,如上圖所示,由 RTCCR 寄存器中的相關標志位管理。
RTCSetPrescaler() 函數設置上圖中 RTCPRL 寄存器,即預分頻值,PRL 寄存器修改后會裝載進 RTCDIV 寄存器,通過讀 RTCDIV 寄存器能夠得到 RTC_PRL 寄存器中的值。
RTC 和 PWR 待機模式
STM32 能夠通過某些操作進入待機模式(Standby Mode),待機模式能夠通過 RTC 的鬧鐘中斷喚醒(Alarm),其中有兩點需要注意:
中斷需要在進入待機模式前啟動,進入待機模式后無法配置 RTC 寄存器。
PWR 模式被喚醒后,執行完 Alarm 中斷處理程序,會重新從主函數開始運行。
-
晶振
+關注
關注
34文章
2868瀏覽量
68054 -
STM32
+關注
關注
2270文章
10900瀏覽量
356156 -
定時器
+關注
關注
23文章
3249瀏覽量
114842 -
RTC
+關注
關注
2文章
538瀏覽量
66573 -
時鐘源
+關注
關注
0文章
93瀏覽量
15974
發布評論請先 登錄
相關推薦
評論