接着之前的问题,单片机断电后的时间可以接上,但日期就会被清零。这样看起来RTC的HAL库问题比较多一点,直接用起来还真挺烦的。
我认真地看了下stm32f1xx_hal_rtc.c
里面的HAL_RTC_GetTime()
和HAL_RTC_GetDate()
两个函数,弄明白了问题的大概原因。
HAL_StatusTypeDef HAL_RTC_GetTime(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDef *sTime, uint32_t Format)
{
...
counter_time = RTC_ReadTimeCounter(hrtc); //counter_time是RTC计数器的值
hours = counter_time / 3600U; //小时
sTime->Minutes = (uint8_t)((counter_time % 3600U) / 60U);
sTime->Seconds = (uint8_t)((counter_time % 3600U) % 60U);
...
所以和Time相关的是RTC计数器的值,是在断电后由电池供电的继续工作的,所以Time可以继续计时。
再看看HAL_RTC_GetDate()
HAL_StatusTypeDef HAL_RTC_GetDate(RTC_HandleTypeDef *hrtc, RTC_DateTypeDef *sDate, uint32_t Format)
{
...
sDate->WeekDay = hrtc->DateToUpdate.WeekDay;
sDate->Year = hrtc->DateToUpdate.Year;
sDate->Month = hrtc->DateToUpdate.Month;
sDate->Date = hrtc->DateToUpdat