配置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文章
5388浏览量
121652 -
RTC
+关注
关注
2文章
582浏览量
67268 -
库函数
+关注
关注
0文章
177浏览量
34053
发布评论请先 登录
相关推荐
原创: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
•1199次阅读
STM32单片机RTC时钟的使用方法及步骤
系数等
根据需要配置时钟,日期,闹钟,唤醒,输出,时间戳,备份寄存器等模块
根据需要配置和打开中断,其中
RTC Alarm ——EXTI line 17
发表于 02-11 10:00
•3.5w次阅读

STM32库函数和寄存器应该如何操作
从开始接触51单片机,到现在开始转型学习功能更加强大的STM32f407系列,学习过程中引入了库函数及相应操作,当时赶着进度做点东西出来,有点不求甚解。现在返回来求索:相比于原来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次下载

评论