在使用HAL库驱动RTC的时候,遇到过一个BUG,那就是读出来的时间没有变化,后来找到原因。
那就是在读取RTC时间的时候必须日期和时间一起读,且最好保证先读时间,再读日期。
在 HAL_RTC_GetDate 这个函数中有如下注释:
* @note You must call HAL_RTC_GetDate() after HAL_RTC_GetTime() to unlock the values
* in the higher-order calendar shadow registers to ensure consistency between the time and date values.
* Reading RTC current time locks the values in calendar shadow registers until Current date is read.
原因就是要在 高精度日历影子寄存器 中确保时间和日期值之间的一致性,读取RTC当前时间的值会锁定日历影子寄存器中的值。直到读取当前日期后才会解锁。
意思就是想要获取实时时间,必须时间与日期一起读。否则下次读取时间读到的就是之前被锁定的时间值。所以时间没有变化。