OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4289|回复: 10

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

[复制链接]

16

主题

216

帖子

1

精华

高级会员

Rank: 4

积分
970
金钱
970
注册时间
2016-11-24
在线时间
156 小时
发表于 2017-4-28 09:42:02 | 显示全部楼层 |阅读模式
5金钱
问题:修改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();
于是问题得到解决,但这个疑惑还是没有得到解答,为何需要读两次才能把正确的日期给读出来?希望路过的大神们能解答一下

最佳答案

查看完整内容[请看2#楼]

试过了,设置日期时间后,先获取时间再获取日期,仍是修改前的日期,没有和网上说的那样能好起来。 目前还是连续两次读取日期的方式较好。 2020-02-13 23:20 问题发现了,是用一次RTC_GetTime,就必须也同时用一次RTC_GetDate,就是两个函数要配对使用,这种情况下,修改时间日期是对的。 不然,只使用了RTC_GetTime,不使用RTC_GetDate,改完时间日期后,RTC_GetDate就要多调用一次,相当于把配对补齐。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2019-11-2
在线时间
25 小时
发表于 2017-4-28 09:42:03 | 显示全部楼层
本帖最后由 hmy0569 于 2020-2-13 23:24 编辑

试过了,设置日期时间后,先获取时间再获取日期,仍是修改前的日期,没有和网上说的那样能好起来。
目前还是连续两次读取日期的方式较好。

2020-02-13 23:20
问题发现了,是用一次RTC_GetTime,就必须也同时用一次RTC_GetDate,就是两个函数要配对使用,这种情况下,修改时间日期是对的。
不然,只使用了RTC_GetTime,不使用RTC_GetDate,改完时间日期后,RTC_GetDate就要多调用一次,相当于把配对补齐。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2017-4-28 19:28:16 | 显示全部楼层
你可以直接用我们例程测试下么?通过USMART设置
回复

使用道具 举报

16

主题

216

帖子

1

精华

高级会员

Rank: 4

积分
970
金钱
970
注册时间
2016-11-24
在线时间
156 小时
 楼主| 发表于 2017-5-2 16:48:16 | 显示全部楼层
正点原子 发表于 2017-4-28 19:28
你可以直接用我们例程测试下么?通过USMART设置

我用的就是综合实验里面的程序,就是把 日期设置 那里的函数和 时间设置 的函数给拿出来直接用,目前就是发现设置日期会出现这样的情况
回复

使用道具 举报

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
141
金钱
141
注册时间
2017-1-2
在线时间
24 小时
发表于 2017-5-29 16:37:03 | 显示全部楼层
这个问题我现在也碰到了,时间可以立即生效,但是日期不行,读两次也不可以,请问楼主有没有找到问题点?
回复

使用道具 举报

16

主题

216

帖子

1

精华

高级会员

Rank: 4

积分
970
金钱
970
注册时间
2016-11-24
在线时间
156 小时
 楼主| 发表于 2017-5-31 08:58:24 | 显示全部楼层
CopyCool 发表于 2017-5-29 16:37
这个问题我现在也碰到了,时间可以立即生效,但是日期不行,读两次也不可以,请问楼主有没有找到问题点?

我也没有找到问题的原因所在呢,我读两次日期就可以了,你是读两次也不行,然后后面要怎么操作才会更新日期呢,重启么?
回复

使用道具 举报

8

主题

58

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
273
金钱
273
注册时间
2016-12-30
在线时间
37 小时
发表于 2017-5-31 09:50:08 | 显示全部楼层
。。。。。。。mark
回复

使用道具 举报

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
141
金钱
141
注册时间
2017-1-2
在线时间
24 小时
发表于 2017-5-31 22:37:39 | 显示全部楼层
lzq12 发表于 2017-5-31 08:58
我也没有找到问题的原因所在呢,我读两次日期就可以了,你是读两次也不行,然后后面要怎么操作才会更新日 ...

对的,只有重启日期才会更新过来,不知道是什么原因,痛苦中。。。。
回复

使用道具 举报

16

主题

216

帖子

1

精华

高级会员

Rank: 4

积分
970
金钱
970
注册时间
2016-11-24
在线时间
156 小时
 楼主| 发表于 2017-6-1 08:58:44 | 显示全部楼层
CopyCool 发表于 2017-5-31 22:37
对的,只有重启日期才会更新过来,不知道是什么原因,痛苦中。。。。

你看看那个32768的晶振是不是好的,或者是否接地,我的RTC目前是没有加备用电池的,但只需要读2次就能更新,不读2次重启也是能更新,找了很久也没找到问题
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2018-10-19
在线时间
7 小时
发表于 2019-7-31 10:32:38 | 显示全部楼层
先获取时间再获取日期
回复

使用道具 举报

8

主题

155

帖子

0

精华

高级会员

Rank: 4

积分
748
金钱
748
注册时间
2011-11-12
在线时间
153 小时
发表于 2020-2-14 21:42:46 | 显示全部楼层
学习了,407没试过,103没有这个问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-8 06:17

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表