注意:相關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鬧鐘中斷,并將中斷處理函式給注銷,
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/24233.html
標籤:嵌入式
