【笔记】cubeMX使用RTC时钟,附带时间不更新解决方法

本来是不打算发这篇的,这是最基础的初始化设置,但是今天在项目上遇到时钟不更新的问题,排查了一下解决好了,所以发上来备忘一下。

  1. 首先在cubeMX里面进行初始化,其他相关设置我就不赘述了,只介绍RTC相关的

【笔记】cubeMX使用RTC时钟,附带时间不更新解决方法_第1张图片
上图是M3架构的,M4会有不一样,不过其实差不多,如图
【笔记】cubeMX使用RTC时钟,附带时间不更新解决方法_第2张图片
【笔记】cubeMX使用RTC时钟,附带时间不更新解决方法_第3张图片
设置完之后直接看代码,默认代码会在每次开机重置时间,解决方法是

void MX_RTC_Init(void)
{
/* USER CODE BEGIN Check_RTC_BKUP */
    return;					//在这里直接加return就可以
/* USER CODE END Check_RTC_BKUP */
}

这样就可以了,至于为什么时间不更新,底层逻辑我还没研究,但是只要在读取时间的时候读取一下日期就解决了

extern RTC_HandleTypeDef hrtc;
RTC_DateTypeDef sdatestructure;
RTC_TimeTypeDef stimestructure;

HAL_RTC_GetTime(&hrtc, &stimestructure, RTC_FORMAT_BIN);
HAL_RTC_GetDate(&hrtc, &sdatestructure, RTC_FORMAT_BIN);
//顺序不能颠倒

printf("%02d/%02d/%02d\r\n",2000 + sdatestructure.Year, sdatestructure.Month, sdatestructure.Date);
//注意+2000
printf("%02d:%02d:%02d\r\n",stimestructure.Hours, stimestructure.Minutes, stimestructure.Seconds);

你可能感兴趣的:(【笔记】cubeMX使用RTC时钟,附带时间不更新解决方法)