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的设置函数


相关推荐
luoganttcc2 小时前
自动驾驶 世界模型 有哪些(二)
人工智能·机器学习·自动驾驶
人工智能AI技术2 小时前
315曝光AI投毒!用C#构建GEO污染检测与数据安全防护方案
人工智能·c#
Hamm2 小时前
不想花一分钱玩 OpenClaw?来,一起折腾这个!
javascript·人工智能·agent
7yewh2 小时前
jetson_yolo_deployment 01_linux_dev_env
linux·嵌入式硬件·yolo·机器人·嵌入式
_李小白2 小时前
【AI大模型学习笔记之平台篇】第二篇:Gemini
人工智能·音视频
一点一木2 小时前
🚀 2026 年 2 月 GitHub 十大热门项目排行榜 🔥
人工智能·github
理性的曜3 小时前
VoloData——基于LangChain的智能数据分析系统
人工智能·vscode·数据分析·npm·reactjs·fastapi·ai应用
flying_13143 小时前
图神经网络分享系列-MPNN(Neural Message Passing for Quantum Chemistry)(二)
人工智能·深度学习·神经网络·图神经网络·消息传递·门控机制·mpnn
HyperAI超神经3 小时前
AI驱动量子精修,卡内基梅隆大学等提出AQuaRef,首次用量子力学约束精修蛋白质全原子模型
人工智能·深度学习·机器学习·架构·机器人·cpu·量子计算
WinstonMao3 小时前
STM32上电不能开机运行问题排查
stm32·单片机·嵌入式硬件