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


相关推荐
沃达德软件6 分钟前
图像处理与复原技术
图像处理·人工智能·深度学习·神经网络·目标检测·计算机视觉·目标跟踪
坐在地上想成仙7 分钟前
人工智能商业落地思考:从人类行为图谱到技术栈映射
人工智能
zhangfeng11337 分钟前
ModelScope(魔搭社区)介绍与模型微调全指南 中国版Hugging Face GPU租借平台 一站式开源模型社区与服务平台
人工智能·开源
PaperRed ai写作降重助手8 分钟前
如何选择适合自己的AI智能降重写作软件
人工智能·深度学习·aigc·ai写作·论文降重·论文查重·智能降重
友思特 智能感知9 分钟前
友思特案例 | 金属行业视觉检测案例三:彩涂钢板表面纹理检测
人工智能·视觉检测
天昊吖10 分钟前
stc8H启用DMA发送后 卡住【踩坑日志】
单片机
李永奉18 分钟前
杰理芯片SDK开发-ENC双麦降噪配置/调试教程
人工智能·单片机·嵌入式硬件·物联网·语音识别
Dfreedom.27 分钟前
图像滤波:非线性滤波与边缘保留技术
图像处理·人工智能·opencv·计算机视觉·非线性滤波·图像滤波
BackCatK Chen28 分钟前
第 1 篇:软件视角扫盲|TMC2240 软件核心特性 + 学习路径(附工具清单)
c语言·stm32·单片机·学习·电机驱动·保姆级教程·tmc2240
兆龙电子单片机设计29 分钟前
【STM32项目开源】STM32单片机多功能电子秤
stm32·单片机·开源·毕业设计·智能家居