stm32f411的RTC时钟设置问题
使用外部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_TimeTypeDefRTC_TimeStruct;
RTC_DateTypeDefRTC_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;
}
你读之前注意检查下rsf位【RTC_ISR寄存器的】
另外读取数据要完整,先读TR,再读DATE.
页:
[1]