基于STM32的F1的RTC实时时钟+CUBEMX实时获取时间戳实现断电跨天同步时间戳

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

目录

问题描述

实时获取时间戳断电跨日期时间戳同步


问题描述

        今需要把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
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值