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

相关推荐
姜太公钓鲸23319 小时前
STM32F1有72MHz的Cortex-M3内核。72MHZ是什么意思?指的是什么?
stm32·单片机·嵌入式硬件
染不尽的流年19 小时前
热噪声、散粒噪声、闪烁噪声介绍
嵌入式硬件·测试机
国科安芯19 小时前
医疗成像设备系统电源芯片国产替代可行性研究
网络·单片机·嵌入式硬件·fpga开发·硬件架构
思茂信息21 小时前
基于CST 3D Combined功能的以太网口RE仿真
开发语言·javascript·单片机·嵌入式硬件·matlab·3d
染不尽的流年1 天前
散粒噪声的电压密度
单片机·嵌入式硬件
17(无规则自律)1 天前
你对 argc 和 argv 的理解有多深?
linux·c语言·嵌入式硬件·考研
Scott.W1 天前
跟我学Easyi3C Tower Adapter Console(9)
人工智能·python·嵌入式硬件·i3c
沐欣工作室_lvyiyi1 天前
基于单片机的直流伺服电机控制器设计与仿真(论文+源码)
单片机·嵌入式硬件·毕业设计·直流伺服电机
LCMICRO-133108477461 天前
长芯微LDM63085完全P2P替代ADM2483,是一款基于数字隔离技术的高可靠性的半双工隔离RS-485收发器
单片机·嵌入式硬件·fpga开发·硬件工程·dsp开发
2501_918126911 天前
stm32上,接线柱下有3v3,tms,gnd,tck,rst,这几个字,分别怎么对应接红,绿,黑,白,线
stm32·单片机·嵌入式硬件·学习·个人开发