STM32F207的RTC日期越变出错,怎么解决?

2020-01-10 19:46发布

比如:在2018-01-01 23:29:59变为2018-01-02 00:00:00过程中,可能会出现变成2018-01-01 00:00:00的情况,然后变为2018-01-02 00:00:01,恢复正常。

时间读取函数——

RTC_GetTime(RTC_Format_BIN, &RTC_TimeStructure);
RTC_GetDate(RTC_Format_BIN, &RTC_DateStructure);

经测试,即使连续执行两次,

RTC_GetTime(RTC_Format_BIN, &RTC_TimeStructure1);
RTC_GetDate(RTC_Format_BIN, &RTC_DateStructure1);

RTC_GetTime(RTC_Format_BIN, &RTC_TimeStructure2);
RTC_GetDate(RTC_Format_BIN, &RTC_DateStructure2);

并且判断二者一致再取数,还是会出现上述异常。

请问大家有没有好的办法?
21条回答
prince2010
2020-01-13 05:17 .采纳回答
styleno1 发表于 2018-5-25 17:24
看了下手册,每2个RTCCLK同步一次,可能是时间太长了。

确实比较长,我写了个程序测试——


while(1)
{
    RTC_GetTime(RTC_Format_BIN, &RTC_TimeStructure);
    RTC_GetDate(RTC_Format_BIN, &RTC_DateStructure);

    if((RTC_DateStructure.RTC_Year == (YearBack - 2000)) && (RTC_DateStructure.RTC_Month == MonBack) && (RTC_DateStructure.RTC_Date == DayBack))
    {
        if((RTC_TimeStructure.RTC_Hours * 3600 + RTC_TimeStructure.RTC_Minutes * 60 + RTC_TimeStructure.RTC_Seconds) < (HourBack * 3600 + MinBack * 60 + SecBack))
        {
            RetryTimes++;
            continue;
        }
    }

    break;
}

if(RetryTimes)
{
    printf("重读%u次! ", RetryTimes);
    RetryTimes = 0;
}

经测试,RetryTimes甚至超过100次。

一周热门 更多>