关于在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鬧鐘中斷,并將中斷處理函數給注銷。
總結
以上是生活随笔為你收集整理的关于在Arduino下STM32编程——RTC函数解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux find命令
- 下一篇: STM32——SPI驱动SD卡