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及制作时间戳的主要内容,如果未能解决你的问题,请参考以下文章

STM32CubeMX使用之RTC及制作时间戳

STM32CubeMX之RTC电子钟

STM32F103VET6基于STM32CubeMX RTC时钟使用示例

STM32F103VET6基于STM32CubeMX RTC时钟秒更新中断使用示例

使用STM32CubeMX生成RTC工程[闹钟中断2]

STM32F103VET6基于STM32CubeMX RTC时钟报警中断使用示例