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


注意:相關RTC基礎知識這里不提!

 

該庫頭文件引用:

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

 

 

初始化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鬧鍾中斷,並將中斷處理函數給注銷。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM