eric2013 发表于 2019-6-24 09:17:13

F4的RTC亚秒值获取

手册:


公式:
1、3FF是前面RTC配置的分频值,即PREDIV_S
2、SS是亚秒值,即RTC_GetSubSecond()的返回值
   ( PREDIV_S - SS ) / ( PREDIV_S + 1 ) * 1000
= (3FF - SS)/( 3FF+ 1 ) * 1000
将3FF+1取值为3FF,就是下面
≈ 1000 - SS*1000/3FF


注:
PREDIV_S 的值来自这里:



eric2013 发表于 2019-6-24 09:18:58

注意
ubSSecondfraction要定义成uint16_t及其以上的数据类型


yanchao7788 发表于 2019-6-24 14:38:15

哈哈,上周用这个东西做了个秒表:lol

shh.yang 发表于 2020-7-3 14:25:57

挖个坟,亚秒是毫秒的意思吗?

eric2013 发表于 2020-7-3 14:31:02

shh.yang 发表于 2020-7-3 14:25
挖个坟,亚秒是毫秒的意思吗?

对。

15871408292 发表于 2020-7-27 10:40:51

SS值如何确认啊

15871408292 发表于 2020-7-27 10:59:18

SS和PREDIV_S有什么区别?

eric2013 发表于 2020-7-27 11:00:54

15871408292 发表于 2020-7-27 10:59
SS和PREDIV_S有什么区别?

有api,调用下即可

15871408292 发表于 2020-7-27 11:03:01

eric2013 发表于 2020-7-27 11:00
有api,调用下即可

不懂?公式中这两个怎么取值呢

eric2013 发表于 2020-7-27 11:13:00

15871408292 发表于 2020-7-27 11:03
不懂?公式中这两个怎么取值呢


1、3FF是前面RTC配置的分频值,即PREDIV_S
2、SS是亚秒值,即RTC_GetSubSecond()的返回值
   ( PREDIV_S - SS ) / ( PREDIV_S + 1 ) * 1000
= (3FF - SS)/( 3FF+ 1 ) * 1000
将3FF+1取值为3FF,就是下面
≈ 1000 - SS*1000/3FF

15871408292 发表于 2020-7-27 11:13:13

eric2013 发表于 2020-7-27 11:00
有api,调用下即可

比如PREDIV_S=3FF,SS【15:0】等于多少呢,怎么觉得这两个是一个值

eric2013 发表于 2020-7-27 11:21:15

15871408292 发表于 2020-7-27 11:13
比如PREDIV_S=3FF,SS【15:0】等于多少呢,怎么觉得这两个是一个值


1、3FF是前面RTC配置的分频值,即PREDIV_S
2、SS是亚秒值,即RTC_GetSubSecond()的返回值
   ( PREDIV_S - SS ) / ( PREDIV_S + 1 ) * 1000
= (3FF - SS)/( 3FF+ 1 ) * 1000
将3FF+1取值为3FF,就是下面
≈ 1000 - SS*1000/3FF

BUGvirus 发表于 2020-10-25 11:36:53

这个亚秒的问题,如果对精度没啥要求,直接调用 HAL_RTC_GetTime(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDef *sTime, Uint32_t Format)函数,其中的RTC_TimeTypeDef 结构体里面有SubSeconds成员,直接使用就行。
如果对精度有要求,也不会用RTC的亚秒功能。

eric2013 发表于 2020-10-28 12:14:10

BUGvirus 发表于 2020-10-25 11:36
这个亚秒的问题,如果对精度没啥要求,直接调用 HAL_RTC_GetTime(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDe ...

这么理解可以的。

廷润 发表于 2020-12-30 15:55:05

本帖最后由 廷润 于 2020-12-30 16:28 编辑

感谢分享,脑子不够用,要不然压秒都不知如何靠谱的转换。
-------------实测换算结果有出入----------------------------
亚秒寄存器的值是 0-255.
转换公式要变一下。

廷润 发表于 2020-12-30 16:42:15

好事多磨,终于理解原产品代码实现 ms级别 SOE记录的设计思想。

在SysTick_Handler 傻傻的计算毫秒,递增赋值秒/分/时。这个方法是傻,但是相比调库函数节约了很多指令周期。

毕竟产品需要记录SOE的场合,太多实时检测/计算/判断/保护/记录的任务需要执行了。

koenlee93 发表于 2021-7-21 09:41:16

可以 刚好要用            

完大家 发表于 2024-4-25 10:41:39

如果要实现毫秒同步对时的话,怎么设置呀。

eric2013 发表于 2024-4-25 16:25:57

完大家 发表于 2024-4-25 10:41
如果要实现毫秒同步对时的话,怎么设置呀。

RTC有个脉冲输出功能,你试试精度怎么样。
页: [1]
查看完整版本: F4的RTC亚秒值获取