问题一,时间读取错误
原因,读写时间必须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赋值,下面的函数是修改后的读写函数
问题三,如果问题二已经发生,需要设备断电或者HAL_RTC_DeInit(&hrtc); 重置RTC,否则异常不会清除。
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};文章来源:https://www.toymoban.com/news/detail-813889.html
HAL_RTC_DeInit(&hrtc);
MX_RTC_Init();
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://www.toymoban.com/news/detail-813889.html
到了这里,关于PCF8563转STM32 RTC避坑指南的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!