暂时无法解决的关于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

相关推荐
HQB20263 小时前
EG1198|屹晶微电子 120V 内置 MOS 异步降压 DC‑DC(高性价比)
嵌入式硬件·硬件工程
果壳science5 小时前
张祥前实验如何获取正电荷
笔记·科技·嵌入式硬件·硬件工程·制造
沉淀的.晴天6 小时前
can总线
stm32
桀人6 小时前
认识AT24C02
stm32·单片机·嵌入式硬件
国科安芯7 小时前
星间激光通信终端CANFD控制网络的时延确定性与辐射可靠性
网络·嵌入式硬件·信息与通信·canfd·低轨卫星·商业航天·抗辐射
一直C7 小时前
嵌入式 Linux 驱动开发学习笔记:内核定时器、platform 总线与 I²C 驱动
linux·驱动开发·嵌入式硬件·学习·imx6ull
传感器与混合集成电路7 小时前
150MHz主频、8路DAC与6路PWM:JLH221360伺服控制SIP解析
嵌入式硬件
comyccccc8 小时前
STM32PID控制板设计全解析学习笔记
单片机·嵌入式硬件
碧海银沙音频科技研究院8 小时前
实现炬芯ATS308X的usb cdc 串口IAP 固件升级功能实现
人工智能·嵌入式硬件·深度学习·算法
恒锐丰科技林技术员9 小时前
EG1160 高压半桥驱动芯片:高压功率变换的实用驱动方案
经验分享·嵌入式硬件·硬件工程