前言
最近使用RT-Thread Studio开发工程时,发现STM32F103系列芯片的RTC功能存在一些缺陷,和同学查找了一些资料后得以解决,希望以此博客作为记录以便温故知新。
RTC简介
RTC(Real-Time Clock)译为实时时钟,因为它一般是集成电路,故也称为时钟芯片。它能提供精确的实时时间,可以用于产生年、月、日、时、分、秒等信息。
在RT-Thread Studio中开启RTC
首先,我们在drivers目录中打开board.h
源文件,找到RTC相关内容如下:
按照如上提示,通过以下三个步骤打开RTC。
1.打开RTC驱动
双击RT-Thread Setting,进入界面后点击更多配置。
接着找到RTC驱动并勾选。
2.打开RTC的宏定义
在board.h
文件中,去掉RTC宏定义的注释。
3.使能RTC
在drivers目录下的stm32xxxhal_config.h
文件中去掉如下代码的注释。
4.下载验证
编译工程后下载到开发板,参照官方开发手册进行验证。
首先,使用date
命令查询当前时间,随后按照格式输入当前时间,可以看到设置成功。
然而,当按下系统复位按键,系统重启后再使用date
命令查询时间时,可以看到时分秒均正常保存,但是日期却并不正确。
解决复位不保存年月日问题
查找资料后,发现是因为STM32F1系列芯片不支持日历功能,但好在可以通过修改程序进行修正。
在RT-Thread社区看到一篇帖子,里面的方法解决了这个问题。原帖地址
操作步骤
1.打开drivers
目录下的drv_rtc.c
文件
2.修改get_rtc_timestamp()
函数如下
static time_t get_rtc_timestamp(void)
{
#if 0
RTC_TimeTypeDef RTC_TimeStruct = {
0};
RTC_DateTypeDef RTC_DateStruct = {
0};
struct tm tm_new;
HAL_RTC_GetTime(&RTC_Handler, &RTC_TimeStruct, RTC_FORMAT