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 的值来自这里:
注意
ubSSecondfraction要定义成uint16_t及其以上的数据类型
哈哈,上周用这个东西做了个秒表:lol 挖个坟,亚秒是毫秒的意思吗? shh.yang 发表于 2020-7-3 14:25
挖个坟,亚秒是毫秒的意思吗?
对。 SS值如何确认啊 SS和PREDIV_S有什么区别? 15871408292 发表于 2020-7-27 10:59
SS和PREDIV_S有什么区别?
有api,调用下即可 eric2013 发表于 2020-7-27 11:00
有api,调用下即可
不懂?公式中这两个怎么取值呢 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
eric2013 发表于 2020-7-27 11:00
有api,调用下即可
比如PREDIV_S=3FF,SS【15:0】等于多少呢,怎么觉得这两个是一个值 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
这个亚秒的问题,如果对精度没啥要求,直接调用 HAL_RTC_GetTime(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDef *sTime, Uint32_t Format)函数,其中的RTC_TimeTypeDef 结构体里面有SubSeconds成员,直接使用就行。
如果对精度有要求,也不会用RTC的亚秒功能。 BUGvirus 发表于 2020-10-25 11:36
这个亚秒的问题,如果对精度没啥要求,直接调用 HAL_RTC_GetTime(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDe ...
这么理解可以的。 本帖最后由 廷润 于 2020-12-30 16:28 编辑
感谢分享,脑子不够用,要不然压秒都不知如何靠谱的转换。
-------------实测换算结果有出入----------------------------
亚秒寄存器的值是 0-255.
转换公式要变一下。
好事多磨,终于理解原产品代码实现 ms级别 SOE记录的设计思想。
在SysTick_Handler 傻傻的计算毫秒,递增赋值秒/分/时。这个方法是傻,但是相比调库函数节约了很多指令周期。
毕竟产品需要记录SOE的场合,太多实时检测/计算/判断/保护/记录的任务需要执行了。 可以 刚好要用 如果要实现毫秒同步对时的话,怎么设置呀。 完大家 发表于 2024-4-25 10:41
如果要实现毫秒同步对时的话,怎么设置呀。
RTC有个脉冲输出功能,你试试精度怎么样。
页:
[1]