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

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

请问大家有没有好的办法?
20条回答
prince2010
1楼 · 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次。
Romate
2楼-- · 2020-01-10 20:17
 精彩回答 2  元偷偷看……
wye11083
3楼-- · 2020-01-10 23:00
看来是rtc计数不同步造成的。没办法,你只能在大时间范围内做中值什么的。
prince2010
4楼-- · 2020-01-11 00:13
wye11083 发表于 2018-5-24 18:29
看来是rtc计数不同步造成的。没办法,你只能在大时间范围内做中值什么的。 ...

这个得取多大的时间范围呢?
prince2010
5楼-- · 2020-01-11 02:46
没有人关注过这个问题吗?
wye11083
6楼-- · 2020-01-11 06:36
prince2010 发表于 2018-5-24 18:45
这个得取多大的时间范围呢?

从你的数据来看,可能有个两三秒吧。这个一般还真不一定有人注意。
prince2010
7楼-- · 2020-01-11 07:26
 精彩回答 2  元偷偷看……

一周热门 更多>