RTC 是一個(gè)獨(dú)立的定時(shí)器,能夠在 STM32 的低功耗模式下運(yùn)行。
選擇 RTC 時(shí)鐘源
RTC 時(shí)鐘的時(shí)鐘源能夠有三種選擇,分別是 HSE 高速晶振、LSE 低速晶振、LSI 內(nèi)部晶振,如題下圖所示。
通過(guò) RCCHSEConfig()、RCCLSEConfig()、RCC_LSICmd() 三個(gè)函數(shù)能夠分別對(duì)上述三種時(shí)鐘進(jìn)行設(shè)置。
本質(zhì)上分別是對(duì) RCCCR、RCCBDCR、RCC_CSR 中相對(duì)應(yīng)寄存器進(jìn)行設(shè)置。
通過(guò) RCC_RTCCLKConfig() 等函數(shù)能夠選擇 RTC 的時(shí)鐘源,如下圖所示:
RTC 結(jié)構(gòu)
RTC 和 BKP 的結(jié)構(gòu)如上圖所示,陰影部分是 BKP 區(qū)域,其中有 RTC 相關(guān)的寄存器,后備區(qū)域獨(dú)立于 CPU,通過(guò)對(duì) PWRCR 寄存器中 DBP 的置位,即 PWRBackupAccessCmd() 函數(shù),能夠開啟 RTC 和 BKP 區(qū)域的寫使能,理論上說(shuō),設(shè)置 RTCCRL 寄存器中的 CNF 位即 RTCEnterConfigMode() 函數(shù)也能夠讓 RTC 進(jìn)入設(shè)置模式,但目前操作不成功。
RTCPRL 置位后,RTCCNT 計(jì)數(shù)器開始運(yùn)行,配合 RTCALR、RTCCR 等寄存器,開始實(shí)現(xiàn) RTC 功能。
RTCWaitForSynchro() 函數(shù),讀 RTCCLR 寄存器中 RSF 位,確保RTCCNT、RTCALR或RTCPRL已經(jīng)被同步。(若在讀取RTC寄存器時(shí),RTC的APB1接口曾經(jīng)處于禁止?fàn)顟B(tài),則軟件首先必須等待RTCCRL寄存器中的RSF位(寄存器同步標(biāo)志)被硬件置’1’。)
RTCWaitForLastTask() 函數(shù),讀 RTCCLR 寄存器中 RTOFF 寄存器,判斷上一次操作是否已完成。
RTCITConfig(RTCITSEC,ENABLE) 函數(shù),開啟 RTC 中的秒中斷,RTC 中共有三種中斷,如上圖所示,由 RTCCR 寄存器中的相關(guān)標(biāo)志位管理。
RTCSetPrescaler() 函數(shù)設(shè)置上圖中 RTCPRL 寄存器,即預(yù)分頻值,PRL 寄存器修改后會(huì)裝載進(jìn) RTCDIV 寄存器,通過(guò)讀 RTCDIV 寄存器能夠得到 RTC_PRL 寄存器中的值。
RTC 和 PWR 待機(jī)模式
STM32 能夠通過(guò)某些操作進(jìn)入待機(jī)模式(Standby Mode),待機(jī)模式能夠通過(guò) RTC 的鬧鐘中斷喚醒(Alarm),其中有兩點(diǎn)需要注意:
中斷需要在進(jìn)入待機(jī)模式前啟動(dòng),進(jìn)入待機(jī)模式后無(wú)法配置 RTC 寄存器。
PWR 模式被喚醒后,執(zhí)行完 Alarm 中斷處理程序,會(huì)重新從主函數(shù)開始運(yùn)行。
-
晶振
+關(guān)注
關(guān)注
34文章
2826瀏覽量
67905 -
STM32
+關(guān)注
關(guān)注
2266文章
10871瀏覽量
354812 -
定時(shí)器
+關(guān)注
關(guān)注
23文章
3237瀏覽量
114471 -
RTC
+關(guān)注
關(guān)注
2文章
528瀏覽量
66310 -
時(shí)鐘源
+關(guān)注
關(guān)注
0文章
93瀏覽量
15934
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論