配置RTC寄存器:
1.查詢RTOFF位,知道RTOFF的值為1.
2.置CNF值為1,進入配置模式。
3.對一個或者多個RTC寄存器進行寫操作。
4.清除CNF標志位,退出配置模式。
5.查詢RTOFF,直到RTOFF位變1,已確認寫操作已經完成。
僅當CNF標志位被清除時,寫操作才能進行,這個操作至少需要3個RTCCLK周期。
RTC相關庫函數
RTC時鐘源和時鐘操作函數:
void RCC_RTCCLKConfig(uint32_t CLKSource);//時鐘源選擇
void RCC_RTCCLKCmd(FunctionalState NewState)//時鐘使能
RTC配置函數(預分頻,計數值):
void RTC_SetPrescaler(uint32_t PrescalerValue);//預分頻配置:PRLH/PRLL
void RTC_SetCounter(uint32_t CounterValue);//設置計數器值:CNTH/CNTL
void RTC_SetAlarm(uint32_t AlarmValue);//鬧鐘設置:ALRH/ALRL
RTC中斷設置函數:
void RTC_ITConfig(uint16_t RTC_IT, FunctionalState NewState);//CRH
RTC配置函數:
void RTC_EnterConfigMode(void);//允許RTC配置 :CRL位 CNF
void RTC_ExitConfigMode(void);//退出配置模式:CRL位 CNF
RTC同步函數:
void RTC_WaitForLastTask(void);//等待上次操作完成:CRL位RTOFF
void RTC_WaitForSynchro(void);//等待時鐘同步:CRL位RSF
相關狀態位獲取清除函數:
FlagStatus RTC_GetFlagStatus(uint16_t RTC_FLAG);
void RTC_ClearFlag(uint16_t RTC_FLAG);
ITStatus RTC_GetITStatus(uint16_t RTC_IT);
void RTC_ClearITPendingBit(uint16_t RTC_IT);
其他相關函數(BKP等)
PWR_BackupAccessCmd();//BKP后備區域訪問使能
RCC_APB1PeriphClockCmd();//使能PWR和BKP時鐘
RCC_LSEConfig();//開啟LSE,RTC選擇LSE作為時鐘源
PWR_BackupAccessCmd();//BKP后備區域訪問使能
uint16_t BKP_ReadBackupRegister(uint16_t BKP_DR);//讀BKP寄存器
void BKP_WriteBackupRegister(uint16_t BKP_DR, uint16_t Data);//寫BKP
配置RTC步驟
①使能PWR和BKP時鐘:
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
1
② 使能后備寄存器訪問:
PWR_BackupAccessCmd(ENABLE); //使能 RTC 和后備寄存器訪問
1
③復位備份區域,開啟外部低速振蕩器。
BKP_DeInit();//復位備份區域
1
④ 配置RTC時鐘源,使能RTC時鐘:
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); //選擇 LSE 作為 RTC 時鐘(RCC_RTCCLKSource_LSI 和 RCC_RTCCLKSource_HSE_Div128)
RCC_RTCCLKCmd(ENABLE); //使能 RTC 時鐘
1
2
⑤ 設置RTC預分頻系數:RTC_SetPrescaler();
RTC_EnterConfigMode();/// 允許配置
RTC_SetPrescaler(32767); //設置RTC預分頻的值
RTC_WaitForLastTask(); //等待最近一次對RTC寄存器的寫操作完成
⑥ 設置時間:
RTC_SetCounter();
RTC_EnterConfigMode();/// 允許配置
void RTC_SetCounter(uint32_t CounterValue);
RTC_WaitForLastTask(); //等待最近一次對RTC寄存器的寫操作完成
⑦開啟相關中斷(可選):
void RTC_ITConfig(uint16_t RTC_IT, FunctionalState NewState);//RTC_ITConfig(RTC_IT_SEC, ENABLE); //使能 RTC 秒中斷
⑧編寫中斷服務函數:
RTC_IRQHandler();
⑨部分操作要等待寫操作完成和同步。
RTC_WaitForLastTask();//等待最近一次對RTC寄存器的寫操作完成
RTC_WaitForSynchro(); //等待RTC寄存器同步
具體的代碼,庫函數寫的太多了,我會用CubeMx配置下,用HAL庫寫一個例程,幾十行就可以解決RTC
審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
寄存器
+關注
關注
31文章
5355瀏覽量
120513 -
RTC
+關注
關注
2文章
538瀏覽量
66642 -
庫函數
+關注
關注
0文章
177瀏覽量
33985
發布評論請先 登錄
相關推薦
原創:sam4s16c的寄存器配置基礎教程---RTC配置
用于sam4s系列。看不懂的自己仔細研究Datasheet吧。個人的愛好是喜歡寄存器直接配置。看官方的庫,太亂,太累。不喜歡拿來主義。第六部分配置RTC首先,停止
發表于 12-01 11:26
為什么RTC_GPIO_PINx寄存器中的RTC_IO_TOUCH_PADx_TO_GPIO位的定義和控制位說明?
在技術參考手冊中描述RTC GPIO 與 RTC pad之間的連接控制寄存器, 每個pad 的模擬和RTC 功能是由RTC_GPIO_PIN
發表于 04-24 07:45
《振南電子STM32視頻教程》第十四講:RTC和BKP
[第14講] RTC和BKP(72分鐘),由何強主講.本課主要講解:(1).RTC模塊要點講解;(2).RTC寄存器講解;(3).BKP特點;(4).BKP
發表于 10-09 16:22
?1192次閱讀
STM32單片機RTC時鐘的使用方法及步驟
系數等
根據需要配置時鐘,日期,鬧鐘,喚醒,輸出,時間戳,備份寄存器等模塊
根據需要配置和打開中斷,其中
RTC Alarm ——EXTI line 17
發表于 02-11 10:00
?3.5w次閱讀
STM32庫函數和寄存器應該如何操作
從開始接觸51單片機,到現在開始轉型學習功能更加強大的STM32f407系列,學習過程中引入了庫函數及相應操作,當時趕著進度做點東西出來,有點不求甚解?,F在返回來求索:相比于原來51單片機的寄存器
發表于 09-10 17:26
?3次下載
【STM32】RTC詳解
00. 目錄文章目錄00. 目錄01. RTC概述02. RTC主要特性03. RTC部分功能3.1 時鐘和預分頻器3.2 實時時鐘和日歷04. R
發表于 12-04 17:21
?26次下載
評論