探索者407 RTC修改日期不能立即生效问题

2019-07-20 14:15发布

问题:修改RTC的时间和日期后,时间立即生效,但日期不生效

配置:STM32F407  没有RTC备用电池

问题描述:
原来时间:2016-3-20   08:00:15
配置日期和时间为:2017-4-28 09:15:20
使用函数(原子哥MDK 库函数版本)
My_RTC_Init();
RTC_Set_Time();
RTC_Set_Date();
calendar_get_date();
calendar_get_time();

由于没有装RTC备用电池,所以每次上电后会通过My_RTC_Init();配置为默认的时间2017-4-20   08:00:15
但在程序运行状态下,通过函数
RTC_Set_Date();
RTC_Set_Time();
直接配置日期和时间为2017-4-28 09:15:20
然后再通过函数
calendar_get_date();
calendar_get_time();

读取更新后的日期和时间,得出的日期和时间为:2016-3-20 09:15:20
也就是时间改变了,但日期没有改变
初步分析为修改后,日期的生效时间需要比较久,然后用RTC_Set_Date();设置日期后延时了5、6秒钟后再用calendar_get_date();读出日期,
但读出来的日期依旧是2016-3-20 也就是说没有生效。
没办法,在不断电的情况下软件重启后,神奇的是日期居然生效了,变成了2017-4-28
那么说来,当用RTC_Set_Date();进行设置日期时,RTC的日期其实是写进去了,但读出来的却没有改变
只是需要再多读一次(因为软件设计为RTC初始化后会读一次日期和时间用于显示),于是在使用了
RTC_Set_Date();后,读日期时,调用2次calendar_get_date();,也就是
RTC_Set_Date();
RTC_Set_Time();

calendar_get_date();
calendar_get_time();

calendar_get_date();
于是问题得到解决,但这个疑惑还是没有得到解答,为何需要读两次才能把正确的日期给读出来?希望路过的大神们能解答一下
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。