关于STM32F373启动加载RTC日历时钟时备份寄存器选择及预期返回值的技术问询
STM32F373 RTC启动加载日历:备份寄存器选择与预期值说明
针对你在STM32F373上实现启动加载RTC日历的需求,结合官方示例和HAL函数细节,给你明确答案:
1. 备份寄存器的选择
你可以任选RTC_BKP_DR0到RTC_BKP_DR19中的任意一个未被其他功能占用的备份寄存器,官方示例里用的RTC_BKP_DR1是完全没问题的选择。
为什么选这个?其实没有硬件层面的强制要求——这些备份寄存器在VBAT供电(纽扣电池)下都会保持数据不丢失,RTC_BKP_DR1只是官方示例常用的一个“约定俗成”的标记寄存器,你也可以根据自己的项目需求选其他的,比如RTC_BKP_DR0,只要保证后续初始化日历后,把标志值写入同一个寄存器就行。
2. 预期返回值是什么?
预期返回值是你自己定义的一个32位标志值,示例里的0x32F2完全是人为设定的,没有特殊含义,你也可以换成0xABCD、0x1234这类任意值,核心逻辑是:
- 首次初始化RTC日历完成后,调用
HAL_RTCEx_BKUPWrite把这个约定值写入你选的备份寄存器 - 每次设备启动时,读取该寄存器,判断是否等于这个约定值:
- 如果不等:说明是首次上电、备份域被复位,需要重新配置RTC日历,配置完再写入标志值
- 如果相等:说明RTC日历已经配置过,直接加载现有数据即可
关键逻辑补充
从HAL_RTCEx_BKUPRead的函数实现能看到,这些备份寄存器就是普通的32位存储单元,只要VBAT供电正常,数据就不会丢失。另外要注意:
- 使用备份寄存器前,要确保RTC的时钟源(比如LSE低速外部时钟)已经正确配置
- 如果备份域被复位(比如通过软件复位备份域,或者VBAT掉电后恢复),所有备份寄存器的数据都会清空,这时候就需要重新初始化日历并写入标志值
内容的提问来源于stack exchange,提问作者euraad
相关产品推荐
相关产品推荐

