目录
问题描述
今需要把STM32所采集的数据带日期的形式发送到后端服务器上进行处理,由于STM32F103本身是自带有实时时钟的。该RTC(实时时钟)是一个不断递增的计数器,断电后由纽扣电池继续供电计数。奈何它没有万年历的功能,再加上用CUBEMX生成的hal库有一些相同的问题。这些问题总结起来就是:CUBEMX为STM32F103生成的hal库在获取日期和时间时会把时间戳(也就是计数器里的计数值单位为秒)转换成24h内的时间戳,(CUBEMX为F1生成的hal库就只是把实时时间戳为一天的时间戳)最大也就是24*3600s。我感觉可能是hal库并未完善这点。别的型号的芯片没有测试过。本文只针对于STM32F1论述。
看看CUBEMX配置后生成的hal库函数
在设置时分秒的库函数中
HAL_StatusTypeDef HAL_RTC_SetTime(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDef *sTime, uint32_t Format)

它只把时分秒转成了时间戳(24小时内)
在获取时分秒的库函数中
HAL_StatusTypeDef HAL_RTC_GetTime(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDef *sTime, uint32_t Format)

这里更加明显,但时间戳大于24h的时间戳则又转换成24内的时间戳。。
诸如此类的代码在 中都有体现。
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

本文介绍如何在STM32F103上实现断电跨日期的时间戳同步,包括利用实时时钟RTC进行时间戳的获取与写入,以及自定义函数实现精确的时间戳转换。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



