STM32学习笔记——RTC的亚秒值校准1. 使用GPS作为RTC gps模块配置出PPS脉冲,单片机使用pps中断作为RTC校准的标准时钟。解析GPS模块输出的RMC消息中的年月日时分秒的值,在pps中断发生时
gps模块配置出PPS脉冲,单片机使用pps中断作为RTC校准的标准时钟。解析GPS模块输出的RMC消息中的年月日时分秒的值,在pps中断发生时候默认是没秒的开始,也就是此时亚秒值应该为0。这时候和本地的RTC时钟做对比,进行后续的校准工作。
2. RTC亚秒校准的相关寄存器
校准亚秒时使用HAL_RTCEx_SetSynchroShift函数。
参数1:RTC_Handler:要校准的RTC
参数2:ShiftAdd1S:如果这个值置为RTC_SHIFTADD1S_SET将会在RTC的RTC_TR中加一秒。置为RTC_SHIFTADD1S_RESET不会更改秒值
参数3:ShiftSubFS:要调整的值占的RTC_SSR 的值。SSR寄存器是一个从256开始倒计时的寄存器。倒计时到0就相当于增加了一秒,这里将要调整的时间的 值计算出对应要调整的SSR的值后最终会增加到SSR寄存器中。如想要调慢0.5s:
其中PREDIV_S是在配置RTC时候设置的![image-20220421170105647]
得出式子:0.5=SUBFS/(255+1) => SUBFS = 128 。这个值最后会增加到SSR寄存器,SSR寄存器就相当于多跑128后才会增加一秒,达到了延时的作用。向前校准时候要就需要先把S值增加一秒在将SSR的寄存器增加(1-增加的秒值)。