STM32學習筆記——RTC的亞秒值校准
1. 使用GPS作為RTC
gps模塊配置出PPS脈沖,單片機使用pps中斷作為RTC校准的標准時鍾。解析GPS模塊輸出的RMC消息中的年月日時分秒的值,在pps中斷發生時候默認是沒秒的開始,也就是此時亞秒值應該為0。這時候和本地的RTC時鍾做對比,進行后續的校准工作。
2. RTC亞秒校准的相關寄存器



3. 校准流程

4. 亞秒校准函數記錄
校准亞秒時使用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-增加的秒值)。
