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


相关推荐
算家计算14 分钟前
阿里重磅开源Qwen3-Next!破局AI算力瓶颈,训练成本暴降
人工智能
Billy_Zuo20 分钟前
人工智能机器学习——模型评价及优化
android·人工智能·机器学习
zm1 小时前
单片机学习笔记
单片机·嵌入式硬件
Web3_Daisy1 小时前
克隆代币 + 捆绑开盘:多链环境下的低成本发币玩法
人工智能·web3·区块链·比特币
sali-tec1 小时前
C# 基于halcon的视觉工作流-章32-线线测量
开发语言·人工智能·算法·计算机视觉·c#
七牛云行业应用1 小时前
图灵奖得主萨顿演讲解读:深度学习的局限与AI新范式
人工智能·深度学习
IMER SIMPLE1 小时前
人工智能-python-深度学习-神经网络VGG(详解)
人工智能·python·深度学习
猫头虎1 小时前
2025最新超详细FreeRTOS入门教程:第十三章 FreeRTOS临界区与原子操作
stm32·单片机·嵌入式硬件·物联网·51单片机·proteus·iot
martinzh1 小时前
检索器江湖:那些让RAG神功大成的武林绝学
人工智能
Juchecar2 小时前
通过“单词补全”演示 Transformer 原理(Python代码可运行)
人工智能·python