F4 的RTC功能比较强,但使用中如果不注意细节,就会发生奇怪的现象:
我对F4 的RTC设置时间和日期的时候,发现经常日期设置失败,其值修改不了,但是时间的修改没有问题。
使用的是4个库函数:
RTC_GetDate
RTC_GetTime
RTC_SetDate
RTC_SetTime
花了近两天的时间才搞清原因,设置日期失败是由于没有正确的读RTC日期和时间所致:
F4 的RTC 必须先读时间,然后再读日期。一旦读了时间,必须紧接着再读日期,否则后面的写日期会出错的。 因为 RTC_GetTime 会导致 RTC停止计时,直到RTC_GetDate 才恢复计时。
而我的读RTC代码顺序是:
RTC_GetDate
RTC_GetTime
因此会出现日期设置失败。
比较有趣的是,如果你用Debug跟踪调试写日期的函数 RTC_SetDate,而且打开了RTC寄存器的监视串口,RTC_SetDate函数执行又会是成功的。连续执行就不可以。
其原因是,Debug 程序需要读RTC的内容,他的读RTC操作,使得逻辑恢复正常。 |