注意:相關RTC基礎知識這里不提!
該庫頭文件引用:

初始化RTC相關時鍾
Arduino版的庫里初始化配置PWR時鍾、初始化配置備份寄存器時鍾、復位備份寄存器(RTC時鍾需要用到備份寄存器相關東西)
官方老標准庫里也是一樣的:
設置寄存器RCC_APB1ENR的PWREN和BKPEN位打開電源和后備時鍾。
使能寫備份寄存器
在Arduino版庫里,寫備份寄存器使能是操作電源相關里的CR寄存器的DBP位置1
在老版標准庫里也是這樣。
電源后備寄存器(PWR_CR)的DBP位使能對后備寄存器和RTC的訪問。
失能寫備份寄存器
那么不難理解,失能寫備份寄存器,就是將DBP位置0了。
設置RTC時鍾
庫代碼截圖里可以看到,如果不寫入參數,那么就默認使用 RTClock(RTCSEL_HSE); 外部高速時鍾來作為RTC時鍾源。
我的代碼中,選擇了LSE,也就是外部低速時鍾來作為時鍾源。
rtc_init();函數里實現了設置和打開相應時鍾。
寫入RTC時間
time_t 類型就是 unsigned long類型。
追蹤rtc_set_count();函數:
該函數所在文件:
等待最近一次RTC寄存器同步完成
等待最近一次對RTC寫操作完成
RTC進入配置模式的源碼:
等待寫操作完成,配置RTC的CRL寄存器的CNF位。
因為紅線的話,所以上面的rtc_set_count函數才會有進入配置模式和退出配置模式的配套語句。
讀出RTC時間
源碼如下:
定位到rtc_get_count();函數:
很簡單,就是把RTC計數寄存器的值讀出來合並返回。
創建RTC鬧鍾中斷
RTC有幾種鬧鍾,一種是秒鬧鍾,每過一秒進入一次;一種就是對於時間的對比的鬧鍾,到了時間點就產生一次鬧鍾。
下面是設置時間對比的鬧鍾源碼:
追蹤到rtc_set_alarm()函數:
前三句話和配置模式老生常談。
后面是設置鬧鍾寄存器的值。
下面追蹤到rtc_attach_interrupt函數:
使能鬧鍾中斷,switch里是第四個case。再使能鬧鍾優先級。
設置RTC鬧鍾時間
顧名思義,可以修改RTC的鬧鍾時間。注意:該函數是修改,並不會創建鬧鍾中斷。
解除RTC鬧鍾中斷
失能RTC鬧鍾中斷,並將中斷處理函數給注銷。