實時時鐘 (RTC) 是一個獨立的 BCD 定時器/計數器,提供具有可程式設計鬧鐘中斷功能的月曆時鐘/月曆,可用于管理所有低功耗模式的自動喚醒單元。在配置RTC時鐘時預分頻器是關鍵名額,通過配置預分頻器可以自定義計數周期。
以STM32L0系列MCU為例,介紹RTC時鐘的異步預分頻和同步預分頻配置方法。
RTC 時鐘源 (RTCCLK) 通過時鐘控制器從 LSE 時鐘、LSI 振蕩器時鐘以及 HSE 時鐘三者中選擇。預分頻器分為 2 個可程式設計的預分頻器:通過 RTC_PRER 寄存器的 PREDIV_A 位配置的 7 位異步預分頻器(範圍0~2^7),通過 RTC_PRER 寄存器的 PREDIV_S 位配置的 15 位同步預分頻器(範圍0~2^15)。如下圖所示:

在參考文檔中給出了(f ck_apre)異步預分頻和(f ck_spre)同步預分頻的計算公式,(f ck_apre)異步預分頻主要是亞秒級計數,(f ck_spre)同步預分頻是普通得月曆計數(秒級别),在計算兩個預分頻器時,推薦将異步預分頻器(PREDIV_A)配置為較高的值,以最大程度降低功耗。如下所示:
若想實作普通計數功能,例如使用頻率為 32.768 kHz 的 LSE 獲得頻率為 1 Hz 的内部時鐘 (ck_spre),為了最大程度降低功耗,PREDIV_A=127,則(f ck_spre)同步預分頻=32768Hz/(PREDIV_S+1)x(127+1),1Hz=32768Hz/(PREDIV_S+1)x(127+1),
計算得,PREDIV_S=255。
當然使用者計算完成後就可以在STM32CubeMX中配置,自動生成配置好的RTC代碼。