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次。
单片工程师
2楼-- · 2020-01-12 09:55
Hi prince2010 !

很巧,我手头一个STM32的RTC驱动,但我没搞STM32,所以请教您一个问题:

附件代码中439行RtcGetTimerValue 函数,返回的是当前时间转换为总的毫秒吗?   TimerTime_t的类型是uint32,这样岂不会有溢出?

谢谢啦


t3486784401
3楼-- · 2020-01-12 14:57
我看了看 F2 的 HAL 库,在 GetTime/Date 的函数源码中没有看到 RSF 访问,
但是手册上明确写明了这是同步标志,用于处理临界区问题。

因此你调用库的时候,应该是没调用 RTC_WaitForSynchro 这个函数,这是 HAL 库里唯一用到 RSF 位的函数,猜测能解决你的问题
prince2010
4楼-- · 2020-01-12 17:33
t3486784401 发表于 2018-5-24 21:22
我看了看 F2 的 HAL 库,在 GetTime/Date 的函数源码中没有看到 RSF 访问,
但是手册上明确写明了这是同步 ...

试过了,目前为止没有出现异常。

RTC_WaitForSynchro();
RTC_GetTime(RTC_Format_BIN, &RTC_TimeStructure);
RTC_GetDate(RTC_Format_BIN, &RTC_DateStructure);
styleno1
5楼-- · 2020-01-12 20:50
 精彩回答 2  元偷偷看……
fei-lai-fei-qu
6楼-- · 2020-01-13 00:53
不用他的rtc,最简单省心
prince2010
7楼-- · 2020-01-13 10:02
单片工程师 发表于 2018-5-24 21:20
Hi prince2010 !

很巧,我手头一个STM32的RTC驱动,但我没搞STM32,所以请教您一个问题:

已解决,谢谢

一周热门 更多>