PCF8563转STM32 RTC避坑指南

发布时间:2024年01月12日

问题一,时间读取错误

原因,读写时间必须Time在前,Date在后

HAL_RTC_GetTime(&hrtc, &time, RTC_FORMAT_BCD);
HAL_RTC_GetDate(&hrtc, &date, RTC_FORMAT_BCD);

HAL_RTC_SetTime(&hrtc, &time, RTC_FORMAT_BCD);
HAL_RTC_SetDate(&hrtc, &date, RTC_FORMAT_BCD);

问题二,rtc时间超过24小时且日期不变

原因,time一开始声明时没有初始化={0};并且没有给DayLightSaving和StoreOperation赋值,下面的函数是修改后的读写函数

void PCF8563_Read(void)
{
?? ?RTC_DateTypeDef date;
?? ?RTC_TimeTypeDef time;
?? ?HAL_RTC_GetTime(&hrtc, &time, RTC_FORMAT_BCD);
?? ?HAL_RTC_GetDate(&hrtc, &date, RTC_FORMAT_BCD);
?? ?systemclock.year = date.Year;
?? ?systemclock.month = date.Month;
?? ?systemclock.day = date.Date;
?? ?systemclock.week = date.WeekDay;
?? ?systemclock.hour = time.Hours;
?? ?systemclock.min = time.Minutes;
?? ?systemclock.sec = time.Seconds;

}

void ZPCF8563_Write()
{
?? ?RTC_DateTypeDef date={0};
?? ?RTC_TimeTypeDef time={0};
?? ?date.Year=systemclock.year;
?? ?date.Month=systemclock.month;
?? ?date.Date=systemclock.day;
?? ?date.WeekDay=systemclock.week;
?? ?
?? ?time.Hours=systemclock.hour;
?? ?time.Minutes=systemclock.min;
?? ?time.Seconds=systemclock.sec;
?? ?time.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
? ? time.StoreOperation = RTC_STOREOPERATION_RESET;
?? ?HAL_RTC_SetTime(&hrtc, &time, RTC_FORMAT_BCD);
?? ?HAL_RTC_SetDate(&hrtc, &date, RTC_FORMAT_BCD);
}

文章来源:https://blog.csdn.net/qqk808/article/details/135549405
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。