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


相关推荐
昨日之日200643 分钟前
Moonshine - 新型开源ASR(语音识别)模型,体积小,速度快,比OpenAI Whisper快五倍 本地一键整合包下载
人工智能·whisper·语音识别
浮生如梦_1 小时前
Halcon基于laws纹理特征的SVM分类
图像处理·人工智能·算法·支持向量机·计算机视觉·分类·视觉检测
深度学习lover1 小时前
<项目代码>YOLOv8 苹果腐烂识别<目标检测>
人工智能·python·yolo·目标检测·计算机视觉·苹果腐烂识别
热爱跑步的恒川2 小时前
【论文复现】基于图卷积网络的轻量化推荐模型
网络·人工智能·开源·aigc·ai编程
阡之尘埃4 小时前
Python数据分析案例61——信贷风控评分卡模型(A卡)(scorecardpy 全面解析)
人工智能·python·机器学习·数据分析·智能风控·信贷风控
hairenjing11234 小时前
使用 Mac 数据恢复从 iPhoto 图库中恢复照片
windows·stm32·嵌入式硬件·macos·word
模拟IC攻城狮6 小时前
华为海思招聘-芯片与器件设计工程师-模拟芯片方向- 机试题-真题套题题目——共8套(每套四十题)
嵌入式硬件·华为·硬件架构·芯片
孙同学要努力6 小时前
全连接神经网络案例——手写数字识别
人工智能·深度学习·神经网络
Eric.Lee20216 小时前
yolo v5 开源项目
人工智能·yolo·目标检测·计算机视觉
IT B业生6 小时前
51单片机教程(六)- LED流水灯
单片机·嵌入式硬件·51单片机