使用外部32.768k晶振作为RTC的时钟源。 配置RTC能正常工作, 出现的问题是:当设置RTC时间为23:59:00后,RTC寄存器更新为设置的值。 但是过了一分钟后,寄存器编程24:00:00了,日期也没有自加1 这么奇怪的问题,头一次遇到,之前用f030没遇到过这问题啊。 请大神帮忙看下 void RTC_CalendarConfig(UINT8 setflag, DATASTRUCT * datastruct) { RTC_TimeTypeDef sTime; RTC_DateTypeDef DateToUpdate; /* 使能PWR时钟和读取备份域 */ //__HAL_RCC_PWR_CLK_ENABLE(); //HAL_PWR_EnableBkUpAccess(); if (setflag) { /* 配置日期 */ DateToUpdate.WeekDay = RTC_WEEKDAY_SATURDAY; DateToUpdate.Month = datastruct->months; DateToUpdate.Date = datastruct->days; DateToUpdate.Year = datastruct->years; HAL_RTC_SetDate(&hrtc,&DateToUpdate,RTC_FORMAT_BIN); } else { /* 配置时间 */ sTime.Hours = datastruct->hours; sTime.Minutes = datastruct->minutes; sTime.Seconds = datastruct->seconds; //sTime.TimeFormat = RTC_HOURFORMAT12_AM; HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BIN); } /* 写入一个数值:0xA5A5到RTC备份数据寄存器1 */ HAL_RTCEx_BKUPWrite(&hrtc, RTC_BKP_DR0, 0xA5A5); } /************************************************************** * Function Name : rtc_read * Param : void * Return Param : void * Description : 读取rtc时间,先读取TR,再读取DR ***************************************************************/ void Rtc_Read(DATASTRUCT *datastruct) { RTC_TimeTypeDef RTC_TimeStruct; RTC_DateTypeDef RTC_DateStruct; HAL_RTC_GetTime(&hrtc, &RTC_TimeStruct, RTC_FORMAT_BIN); datastruct->seconds = RTC_TimeStruct.Seconds; datastruct->minutes = RTC_TimeStruct.Minutes; datastruct->hours = RTC_TimeStruct.Hours; HAL_RTC_GetDate(&hrtc, &RTC_DateStruct, RTC_FORMAT_BIN); datastruct->days = RTC_DateStruct.Date; datastruct->months = (MONTHS)RTC_DateStruct.Month; datastruct->years = RTC_DateStruct.Year; } |
另外读取数据要完整,先读TR,再读DATE.
评分
查看全部评分