STM32应用详解(13)RTC初始化

文章目录


前言

STM32的RTC功能,就是读取RTC计数器,然后按照计数器的值转换成年月日时分秒。分析RTC功能的驱动程序。


一、RTC应用

1.供电与状态

因为RTC不同于其他的单片机内部功能,其他功能都是由单片机的主电源来供电的,每次重新上电时只要直接初始化该功能即可。而RTC功能不仅使用主电源供电,还使用了后备电池供电,这使得单片机在每次上电之后都要判断RTC的状态,因为RTC的状态有两种:

(1)首次上电,第一次使用RTC时,因为之前没有过初始化,其内部的数据是空白的。或者备用电池已经断开,备用存储器当中的数据丢失,这种情况上电时,就需要对RTC的所有寄存器进行首次设置,让RTC进入走时工作状态。

(2)RTC的备用电池没有断开,一直保持着RTC的走时,同时备用寄存器当中的数据没有丢失,当单片机上电时如果发现是这种情况,就不需要对RTC的数据进行重新初始化,只要让RTC的功能保持之前的设置,默认它持续走时就可以了。所以,这里有两个初始化函数。

2.判断寄存器数据是否丢失

参考固件库用户手册5.2.8节与Table64。

这条语句是在看DR1中的数据是否0xA5A5。如果RTC是第一次使用,DR1中的数据是缺省值0xFFFF或其他值。0xA5A5是我们随便写入的一个值,是用来判断RTX是否第一次使用。如果读到的值不是0xA5A5,这表示RTC是第一次使用,内部没有设置的特定数据,这时就需要对RTC进行重新设置,调用了首次使用RTC的设置函数。接下来执行第二条,调用固件库函数在备用寄存器DR1当中写入0xA5A5。也就是说,将RTC配置好,配置为走时状态,然后再讲后备寄存器DR1写入0xA5A5。这样,当单片机下次再启动的时候,在进入该初始化程序,此时RTC正在走时,备用寄存器中的数据也不会丢失,DR1中的数据就是0xA5A5。如果RTC的备用电池断开,RTC走时数据和备用寄存器的数据应该全部丢失,那么读取DR1寄存器中的数据就不是0xA5A5,所以又会执行RTC所有数据的初始化。通过使用后备寄存器写入一个预存数值,就能巧妙地判断RTC当前的状态。如果RTC当中的数据没有丢失,则执行下面else{}当中的语句。

二、程序详解

1.RTC初始化函数

2.首次启用RTC的设置函数


相关推荐
seowmt1 分钟前
结构化数据和自然语言描述哪个更管用?答案分场景
人工智能·google·typescript·go语言·schema
海宇数据3 分钟前
零信任架构实战:基于海宇车型识别精准构建自动化违章处理网关
运维·人工智能·架构·自动化
XMAIPC_Robot4 分钟前
RK3588+CODESYS+RK182X AI 扩展机器人控制器解决方案|硬实时运动控制 + 大算力边缘 AI 融合实战
人工智能·机器人·rk3588+codesys·arm+codesys
陕西企来客6 分钟前
NAP 信息统一治理:构建生成式 AI 时代企业 GEO 增长的坚实底座-企来客科技NAP方法论-企来客科技NAP信息治理实战解析
大数据·人工智能·科技
a努力。7 分钟前
SpringBoot4迁移:Jackson3包名大变,注解别乱改
人工智能
SamChan908 分钟前
PDF翻译时页眉页脚总在捣乱?跨页重复文本块的检测与过滤实测
人工智能·python·ai·pdf·wpf
徐健峰9 分钟前
JEV 1.13 接入教程:Python 调用 Decisions API,实现分类、评分与 Agent 路由
人工智能
CubeSandbox13 分钟前
沙箱是选项,不是标配:花椒 Agent 平台的架构思考与 Cube 实践
大数据·人工智能·架构
Rocky Ding*15 分钟前
一文读懂Qwen-Audio-3.1核心基础知识:从语音识别到可控声景与实时Agent
论文阅读·人工智能·深度学习·机器学习·aigc·ai-native·qwen-audio
桃西西呀17 分钟前
Laya 源码级原理拆解之四:路由检测与服务部署
人工智能·llm·ai编程