暂时无法解决的关于STM32F103的RTC日期更新问题

近两天用STM32F103C6T6A制作一个电子钟,用STM32CubeMX生成工程后,直接用HAL库中的设定日期和时间的函数来初始化时间。

设定和读取当前时间用的函数是:

cpp 复制代码
HAL_StatusTypeDef HAL_RTC_SetTime(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDef *sTime, uint32_t Format); 
HAL_StatusTypeDef HAL_RTC_GetTime(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDef *sTime, uint32_t Format); 
HAL_StatusTypeDef HAL_RTC_SetDate(RTC_HandleTypeDef *hrtc, RTC_DateTypeDef *sDate, uint32_t Format); 
HAL_StatusTypeDef HAL_RTC_GetDate(RTC_HandleTypeDef *hrtc, RTC_DateTypeDef *sDate, uint32_t Format);

这4个函数用起来真的很方便!

但是在实际应用中,却发现了一个问题:就是初始化时间后,在不断电不复位的情况下,读取的日期和时间都是正确的。而当系统复位或主电源断电后,读取的时间是正确的,但读取的日期就变成了0年1月1日。VBAT电源是正常的。

有网友说,读取数据时必须先读时间再读日期,但经过测试,无论哪一种先读都是一样的结果。

说明一下,串口打印的第一个数据(例如84125),是直接读取RTC_CNT寄存器值的,这个数值一直在增加,无论主电源是否断电。这说明RTC_CNT寄存器一直在累计,所以可以排除RTC工作异常的情况。

这问题困扰了两天,至今百思不得其解,难不成是ST的HAL库有BUG?

请路过的高手指点迷津!谢谢!

2026.1.31

相关推荐
学嵌入式的小杨同学32 分钟前
STM32 进阶封神之路(十六):PWM 波深度实战 —— 定时器输出 + LED 调光 + 电机调速(库函数 + 寄存器)
stm32·单片机·嵌入式硬件·mcu·硬件架构·硬件工程·智能硬件
ShiMetaPi37 分钟前
从帧触发到事件驱动:RGB+EVS多模态融合下的无人机识别重构
嵌入式硬件·计算机视觉·嵌入式开发·无人机避障·事件相机
飞睿科技1 小时前
UWB技术推动户外直播摄像跟随应用演进
嵌入式硬件·数码相机·目标跟踪·uwb·相机云台
最概然1 小时前
嵌入式RPC分发器
嵌入式硬件·rpc
QYQ_11271 小时前
嵌入式学习——51单片机(下)
嵌入式硬件·学习·51单片机
进击的横打1 小时前
【车载开发系列】RH850中的看门狗WDTA
单片机·嵌入式硬件
没有医保李先生2 小时前
可变参函数底层解析
开发语言·stm32·单片机
17(无规则自律)2 小时前
【Linux驱动实战】:最简单的内核模块
linux·c语言·驱动开发·嵌入式硬件
单片机设计星球2 小时前
51单片机的【智能家居系统】仿真设计
嵌入式硬件·51单片机·智能家居
逐步前行2 小时前
STM32_SysTick_系统定时器
stm32·单片机·嵌入式硬件