STM32CubeMX使用之RTC及制作时间戳
Posted 何事误红尘
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32CubeMX使用之RTC及制作时间戳相关的知识,希望对你有一定的参考价值。
一、概述
本文记录下RTC的使用过程,主要是后续使用,能有个参考。主要是为了提供时间戳,所以应用非常简单。用到其他功能,再补充此篇文章。
CubeMX芯片: STM32G0B1RCT6
实际焊接STM32G0B1RET6
二、Pinout&Configuration
开启RTC外设,设置初始的时间:
三、Clock Configuration
注意将RTC的时钟来源选择为外部的32.768晶振。
生成代码就可以了。
四、测试RTC
4.1 获取时间
RTC_DateTypeDef GetData; //获取日期结构体
RTC_TimeTypeDef GetTime; //获取时间结构体
while(1)
HAL_RTC_GetTime(&hrtc, &GetTime, RTC_FORMAT_BIN);
HAL_RTC_GetDate(&hrtc, &GetData, RTC_FORMAT_BIN);
main_debug("%02d/%02d/%02d\\r\\n",2000 + GetData.Year, GetData.Month, GetData.Date);
main_debug("%02d:%02d:%02d\\r\\n",GetTime.Hours, GetTime.Minutes, GetTime.Seconds);
nbos_msleep(3000);
查看打印结果:
4.2 制作时间戳
这里的时间戳是指,格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。
首先增加时间戳函数,制作时间戳需要用到mktime
库函数,需要添加的头文件和函数说明,可以参考:C 库函数 – mktime() | 菜鸟教程:
查看打印结果:
得到时间戳后,可以使用在线工具进行验证:时间戳(Unix timestamp)转换工具 - 在线工具。
将我们自己的时间戳输入进去,即可得到北京时间,以此进行验证。也可以将我们需要转换的时间输入进去,转换得到时间戳:
从转换结果看,时间戳得到时间,与北京时间相差8小时。可以想到,是因为时区导致,对时间戳函数进行调整即可:
参考链接:STM32 之 时间戳的解析与生成。
以上是关于STM32CubeMX使用之RTC及制作时间戳的主要内容,如果未能解决你的问题,请参考以下文章
STM32F103VET6基于STM32CubeMX RTC时钟使用示例