關於在Arduino下STM32編程——RTC函數解析

注意:相關RTC基礎知識這裏不提!函數

 

該庫頭文件引用:ui

#include <RTClock.h>
 
該庫所在Arduino位置:

 

 

初始化RTC相關時鐘

Arduino版的庫裏初始化配置PWR時鐘、初始化配置備份寄存器時鐘、復位備份寄存器(RTC時鐘須要用到備份寄存器相關東西)spa

官方老標準庫裏也是同樣的:3d

設置寄存器RCC_APB1ENR的PWREN和BKPEN位打開電源和後備時鐘。blog

使能寫備份寄存器

在Arduino版庫裏,寫備份寄存器使能是操做電源相關裏的CR寄存器的DBP位置1get

 

在老版標準庫裏也是這樣。同步

電源後備寄存器(PWR_CR)的DBP位使能對後備寄存器和RTC的訪問。源碼

 

失能寫備份寄存器

那麼不難理解,失能寫備份寄存器,就是將DBP位置0了。it

 

設置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鬧鐘中斷,並將中斷處理函數給註銷。

相關文章
相關標籤/搜索