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

相关推荐
山羊硬件Time5 小时前
自动化管理Linux的好工具:shell script
linux·嵌入式硬件·硬件工程师·基带工程·硬件开发
神一样的老师5 小时前
【兆易创新GD32VW553开发板试用】红外遥控接入天气时钟实战
驱动开发·单片机·嵌入式硬件
asjodnobfy5 小时前
Π型滤波电路
嵌入式硬件·硬件工程
多看多敲多思考8 小时前
华润微CS32ME10 MCU使用教程(2)---CS32ME10之UART串口模块使用
stm32·单片机·嵌入式硬件·mcu
神一样的老师8 小时前
【兆易创新GD32VW553开发板试用】天气时钟设计与调试实战
单片机·嵌入式硬件·物联网
国科安芯8 小时前
核电站仪控与监测系统中抗辐射 MCU 芯片应用研究
单片机·嵌入式硬件·macos·无人机·cocos2d·核电站
黑白园8 小时前
STM32系统时钟由72M修改为36M验证示例
stm32·单片机·嵌入式硬件
LCG元9 小时前
基于ARM7的LCD设计与实现:S3C4510B通用IO口控制液晶模块
stm32·单片机·嵌入式硬件
山后太阳9 小时前
Keil5(MDK-ARM)完整下载安装教程+入门教程:从零搭建STM32开发环境
arm开发·stm32·嵌入式硬件
The_superstar610 小时前
衡山派学习之串口
单片机·嵌入式硬件·串口·衡山派