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