之前RTC存在不更新日期的问题,后续采用修改更新日期函数,并存储日期,但是并无卵用。后面采用万年历的方式。采用万年历方式首先获取TimeCounter,通过万年历函数计算出日期,TimeCounter是uint32_t类型,可130年内不溢出绰绰有余。
1.修改stm32f1xx_hal_rtc.c文件,增加两个函数
HAL_StatusTypeDef HAL_RTC_SetTimeCounter(RTC_HandleTypeDef *hrtc,uint32_t TimeCounter)
{
return RTC_WriteTimeCounter(hrtc, TimeCounter);
}
uint32_t HAL_RTC_GetTimeCounter(RTC_HandleTypeDef* hrtc)
{
return RTC_ReadTimeCounter(hrtc);
}
2.修改stm32f1xx_hal_rtc.h文件,增加函数名
HAL_StatusTypeDef HAL_RTC_SetTimeCounter(RTC_HandleTypeDef *hrtc,uint32_t TimeCounter);
uint32_t HAL_RTC_GetTimeCounter(RTC_HandleTypeDef* hrtc);
3.应用函数
htimedate.Year=17;
htimedate.Month=1;
htimedate.Date=9;
htimedate.Hours=10;
htimedate.Minutes=56;
htimedate.Seconds=0;
TimeDate_SetTime(&hrtc,&htimedate);
TimeDate_CountTime(&hrtc,&htimedate);
printf("%d/%d/%d %d:%d:%d\r\n",htimedate.Year,htimedate.Month,htimedate.Date,htimedate.Hours,htimedate.Minutes,htimedate.Seconds);
源文件 点击打开链接