无帝老三 发表于 2017-1-23 13:41:58

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;      
}

xmshao 发表于 2017-1-23 14:24:25

你读之前注意检查下rsf位【RTC_ISR寄存器的】
另外读取数据要完整,先读TR,再读DATE.
页: [1]
查看完整版本: stm32f411的RTC时钟设置问题