硬汉嵌入式论坛

 找回密码
 立即注册
查看: 6829|回复: 37
收起左侧

[RTC] 使用STM32H7的RTC依然要先读时间,再读日期,这个老毛病在F4上就有

  [复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106847
QQ
发表于 2018-10-23 02:14:17 | 显示全部楼层 |阅读模式
如果先读日期,后时间,会造成读取的时间很长时间才更新一次。

88.png





回复

使用道具 举报

610

主题

3055

回帖

4905

积分

至尊会员

积分
4905
发表于 2018-10-23 09:12:10 | 显示全部楼层
估计这个问题 st 是不打算解决了吧,估计他们认为这样读也挺好的,哈哈哈
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106847
QQ
 楼主| 发表于 2018-10-23 09:14:22 | 显示全部楼层
hpdell 发表于 2018-10-23 09:12
估计这个问题 st 是不打算解决了吧,估计他们认为这样读也挺好的,哈哈哈

是的,这个硬件估计是F4的直接拿过来继续用。
回复

使用道具 举报

3

主题

26

回帖

35

积分

新手上路

积分
35
发表于 2018-10-23 09:17:58 | 显示全部楼层
硬汉哥有没有试过用F1的HAL读过,只能读时间不能读日期,不知道什么问题。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106847
QQ
 楼主| 发表于 2018-10-23 09:21:04 | 显示全部楼层
fl7547454 发表于 2018-10-23 09:17
硬汉哥有没有试过用F1的HAL读过,只能读时间不能读日期,不知道什么问题。

F1的HAL还真没用过。
回复

使用道具 举报

36

主题

2040

回帖

2148

积分

至尊会员

积分
2148
发表于 2018-10-23 12:03:44 | 显示全部楼层
好多年的老毛病了
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.
回复

使用道具 举报

2

主题

21

回帖

27

积分

新手上路

积分
27
发表于 2018-10-24 15:20:22 | 显示全部楼层
而且还不能只读时间,如果只调用HAL_RTC_GetTime,那么时间是不会变得,必须调用HAL_RTC_GetDate来解锁
回复

使用道具 举报

4

主题

42

回帖

54

积分

初级会员

积分
54
发表于 2018-10-24 21:01:09 | 显示全部楼层
放弃hal,就不会有那些稀奇古怪的事情了。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106847
QQ
 楼主| 发表于 2018-10-25 02:53:56 | 显示全部楼层
jinggx 发表于 2018-10-24 21:01
放弃hal,就不会有那些稀奇古怪的事情了。

F4用的是标准库,也是这样的。
回复

使用道具 举报

2

主题

134

回帖

140

积分

初级会员

积分
140
发表于 2018-10-25 10:07:28 | 显示全部楼层
的确是这样的  我也发现了
回复

使用道具 举报

39

主题

929

回帖

1051

积分

至尊会员

积分
1051
发表于 2018-10-25 13:54:48 | 显示全部楼层
ST的很多芯片都很坑的,比如有些芯片的UART连个FIFO都没有
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106847
QQ
 楼主| 发表于 2018-10-26 02:25:46 | 显示全部楼层
ghslfgkkl88 发表于 2018-10-25 13:54
ST的很多芯片都很坑的,比如有些芯片的UART连个FIFO都没有

H7终于带了。
回复

使用道具 举报

39

主题

929

回帖

1051

积分

至尊会员

积分
1051
发表于 2018-10-26 10:50:45 | 显示全部楼层

真是难得啊
其实我个人挺不喜欢ST的MCU的,从STR710时代就坑过来的,一直坑到现在,预计还会坑不短的一段时间。
回复

使用道具 举报

19

主题

150

回帖

207

积分

高级会员

积分
207
发表于 2019-8-29 14:47:27 | 显示全部楼层
MARK . 记下这个BUG,以防后患。
回复

使用道具 举报

1

主题

8

回帖

11

积分

新手上路

积分
11
发表于 2019-8-29 14:58:11 | 显示全部楼层
H7自带的RTC准不准?
回复

使用道具 举报

25

主题

287

回帖

367

积分

高级会员

积分
367
发表于 2019-8-30 21:01:13 | 显示全部楼层
要使用RTC,推荐使用DS3231M,内置晶振,计时精度保持在±5ppm (±0.432秒/天),无论是计时精度,还是稳定性方面,都要比内置的好多了
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106847
QQ
 楼主| 发表于 2019-8-31 00:26:12 | 显示全部楼层
徐海轮 发表于 2019-8-29 14:58
H7自带的RTC准不准?

还凑活,得需要经常校准下才靠谱。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106847
QQ
 楼主| 发表于 2019-8-31 00:26:43 | 显示全部楼层
爱恋之燕 发表于 2019-8-30 21:01
要使用RTC,推荐使用DS3231M,内置晶振,计时精度保持在±5ppm (±0.432秒/天),无论是计时精度,还是稳定 ...

对,外置的好,就是贵,而且不方便通过自带RTC低功耗案例。
回复

使用道具 举报

6

主题

88

回帖

106

积分

初级会员

积分
106
发表于 2019-9-2 08:59:15 | 显示全部楼层
m刚开始搞这个F429 调RTC,折腾我很久,就这个小问题,读时间一直不对
回复

使用道具 举报

36

主题

1445

回帖

1553

积分

至尊会员

积分
1553
发表于 2019-12-26 21:04:35 | 显示全部楼层
这个坑,刚刚遇到,脑子突然一转,印象中有这么回事,来搜索一下帖子,果然有。
回复

使用道具 举报

3

主题

1223

回帖

1232

积分

至尊会员

积分
1232
发表于 2022-9-19 13:20:37 | 显示全部楼层
硬汉大哥,H7的RTC有电池,读取时序也是按照你的例子写的,现在发现每隔十几、二十秒,RTC会停顿一秒不更新,然后再继续跑,  这样下来,一分钟就要慢3秒多的样子。   硬汉大哥遇到过这种状况吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106847
QQ
 楼主| 发表于 2022-9-19 16:29:31 | 显示全部楼层
morning_enr6U 发表于 2022-9-19 13:20
硬汉大哥,H7的RTC有电池,读取时序也是按照你的例子写的,现在发现每隔十几、二十秒,RTC会停顿一秒不更新 ...

貌似跟我的楼主位现象是一样的,另外HAL库推荐使用最新版。
回复

使用道具 举报

0

主题

11

回帖

11

积分

新手上路

积分
11
发表于 2022-9-19 17:36:51 | 显示全部楼层
STM32L系列也是一样的。
回复

使用道具 举报

3

主题

1223

回帖

1232

积分

至尊会员

积分
1232
发表于 2022-9-19 20:51:14 | 显示全部楼层
[C] 纯文本查看 复制代码
#define __STM32H7xx_CMSIS_DEVICE_VERSION_MAIN   (0x01) /*!< [31:24] main version */
#define __STM32H7xx_CMSIS_DEVICE_VERSION_SUB1   (0x0A) /*!< [23:16] sub1 version */
#define __STM32H7xx_CMSIS_DEVICE_VERSION_SUB2   (0x00) /*!< [15:8]  sub2 version */
#define __STM32H7xx_CMSIS_DEVICE_VERSION_RC     (0x00) /*!< [7:0]  release candidate */
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106847
QQ
 楼主| 发表于 2022-9-20 03:35:34 | 显示全部楼层
morning_enr6U 发表于 2022-9-19 20:51
[mw_shl_code=c,true]#define __STM32H7xx_CMSIS_DEVICE_VERSION_MAIN   (0x01) /*!< [31:24] main version ...

已经是新版了,那有必要查查你的硬件了。
回复

使用道具 举报

3

主题

337

回帖

346

积分

高级会员

积分
346
发表于 2022-9-20 07:49:39 | 显示全部楼层
2022-09-20_074630.png


回复

使用道具 举报

334

主题

2033

回帖

3040

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3040
发表于 2022-9-20 08:26:39 | 显示全部楼层

看来是由于mcu的主频和RTC频率无法同步,所以读取起来有很多要求。
回复

使用道具 举报

15

主题

76

回帖

121

积分

初级会员

积分
121
发表于 2022-9-20 09:13:47 | 显示全部楼层
本帖最后由 fantasyhpu 于 2022-9-20 10:40 编辑

还有这个bug:
1.png
窗口看门狗,用软件在窗口看门狗中断服务函数WWDG_IRQHandler()里清除EWIF位时,不能放在最后一行,否则STM32不停的复位。例如:
[C] 纯文本查看 复制代码
// wrong code
void WWDG_IRQHandler(void)
{
        WWDG_SetCounter(WWDG_CNT); 
        WWDG_ClearFlag();
}

[C] 纯文本查看 复制代码
// correct code
void WWDG_IRQHandler(void)
{
    WWDG_ClearFlag();
    WWDG_SetCounter(WWDG_CNT);
}


回复

使用道具 举报

3

主题

337

回帖

346

积分

高级会员

积分
346
发表于 2022-9-20 09:46:04 | 显示全部楼层
读RTC_SSR或者RTC_TR会锁定更高地址的RTC影子寄存器,直到RTC_DR被读取。
可以认为,这是ST设计的工作机制,他们不视为BUG,而且全系列STM32都如此。
回复

使用道具 举报

3

主题

337

回帖

346

积分

高级会员

积分
346
发表于 2022-9-20 09:48:21 | 显示全部楼层
在32位系统中,读取超过32位的寄存器内容,用这个锁定机制不失为一个好方法。
比如硬件64位记数器,由于低32位和高32位是两个寄存器,不能用原子方式读取。
回复

使用道具 举报

4

主题

32

回帖

44

积分

新手上路

积分
44
发表于 2022-9-20 10:11:05 | 显示全部楼层
附件中有说明

STM32_RTC不更新原因分析.pdf

141.17 KB, 下载次数: 31

回复

使用道具 举报

8

主题

136

回帖

160

积分

初级会员

积分
160
发表于 2022-9-20 17:02:07 | 显示全部楼层
glory 发表于 2022-9-20 09:48
在32位系统中,读取超过32位的寄存器内容,用这个锁定机制不失为一个好方法。
比如硬件64位记数器,由于低 ...

说得挺有道理的, 临界点的时候可能会出现这个问题, 8位芯片读取16位的定时器, 就会出现这个情况
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106847
QQ
 楼主| 发表于 2022-9-21 10:31:24 | 显示全部楼层

谢谢分享,我贴下,方便浏览
image.png



回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106847
QQ
 楼主| 发表于 2022-9-21 10:32:16 | 显示全部楼层
fantasyhpu 发表于 2022-9-20 09:13
还有这个bug:

窗口看门狗,用软件在窗口看门狗中断服务函数WWDG_IRQHandler()里清除EWIF位时,不能放在 ...

谢谢分享。
回复

使用道具 举报

4

主题

32

回帖

44

积分

新手上路

积分
44
发表于 2022-9-21 11:29:56 | 显示全部楼层
徐海轮 发表于 2019-8-29 14:58
H7自带的RTC准不准?

内置RTC,如果使用外部时钟晶振的话一月误差2分钟左右。而外部RTC一年的误差才2分钟左右。如果没那么高的时间准确需求,内部的还凑合能用
回复

使用道具 举报

3

主题

56

回帖

65

积分

初级会员

积分
65
发表于 2022-9-22 11:34:09 来自手机 | 显示全部楼层
最奇葩的是先读时间,如果中间插入其他程序再读日期,时间就到24点后一直加上去,不会变0,日期也不会自动加一
回复

使用道具 举报

8

主题

36

回帖

60

积分

初级会员

积分
60
发表于 2022-11-24 16:50:14 | 显示全部楼层
RTC时间里年只能设置0-99 那么闰年RTC是怎么判断出来的
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106847
QQ
 楼主| 发表于 2022-11-25 09:31:17 | 显示全部楼层
365497604 发表于 2022-11-24 16:50
RTC时间里年只能设置0-99 那么闰年RTC是怎么判断出来的

那个是硬件实现的,不需要用户去实现。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-7 13:48 , Processed in 0.299945 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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