STM32F407 RTC 配置理解與總結(jié)
RTC: Real time clock
相比較而言,STM32F407的RTC比STM32F1的更加容易配置。當(dāng)然,F(xiàn)4的資源相對(duì)也就更加豐富很多了。具體的資源可查看官方參考手冊(cè),通過(guò)下面的圖表也可以了解其大致功能
1、開(kāi)始的時(shí)候?qū)τ?ALRAM A/B的功能沒(méi)有怎么理解,后面再來(lái)看時(shí)發(fā)現(xiàn)其很簡(jiǎn)單,舉個(gè)簡(jiǎn)單的例子,就比如,定的鬧鐘,當(dāng)然,這個(gè)也是可以實(shí)現(xiàn)鬧鐘的功能。只是通過(guò)這個(gè)簡(jiǎn)單的例子來(lái)說(shuō)明,ALARM A/B的用途或者功能吧
2、自動(dòng)喚醒與時(shí)間戳及時(shí)間篡改事件,與1的差不多,細(xì)細(xì)體會(huì)就知道
3、RTC_AFO 與 RTC_AFI 就是對(duì)外輸出及檢測(cè)外部時(shí)間事件
4、 RTC的時(shí)鐘源一般情況下,是使用LSE ,通過(guò)適當(dāng)?shù)姆诸l產(chǎn)生一個(gè)1HZ的時(shí)鐘,分頻中有2個(gè)關(guān)鍵點(diǎn),就是 異步分頻因子(7bit)和同步分頻因子(15bit),兩者配置會(huì)影響功耗,官方建議配置異步分頻因子為較高值,以減少功耗,這里采用最大值配置方式:SynchPrediv = 0xFF; AsynchPrediv = 0x7F;這樣時(shí)鐘就配置OK了
5、下面看一下RTC的初始化和配置,個(gè)人認(rèn)為只要這里搞懂了,RTC也就懂了,至于自動(dòng)喚醒、ALARM等都是很容易配置,更何況ST庫(kù)函數(shù)已經(jīng)寫(xiě)好了,直接調(diào)用相關(guān)函數(shù)就可。
1) 首先要知道 RTC的寄存器是具有寫(xiě)保護(hù)功能的,因此在每次對(duì)其進(jìn)行寫(xiě)操作前,就要先退出寫(xiě)保護(hù),這里很直白的告訴我們,就是依照這個(gè)順序操作,分別對(duì)RTC_WPR 寫(xiě)入 0xCA 和 0x53 就可解除寫(xiě)保護(hù),注意順序不可變。其下,還有一句話(huà),寫(xiě)一個(gè)錯(cuò)鍵重新激活寫(xiě)保護(hù),就是隨便寫(xiě)一個(gè)與上面2個(gè)不同的,就可再次激活寫(xiě)保護(hù)功能
6、 對(duì)于具體如何設(shè)置具體值就不講了,官方庫(kù)中 RTC_SetTime() /RTC_SetDate() 等函數(shù)可以很容易的實(shí)現(xiàn)。
7、最后將一下 RTC的備份寄存器 ,備份寄存器的作用顧名思義就是備份,其總共有20個(gè)相關(guān)寄存器,舉一個(gè)簡(jiǎn)單的例子就可以明白其作用,比如我們要初始化設(shè)置RTC的相關(guān)值,第一次的時(shí)候我設(shè)置了一次,當(dāng)我復(fù)位MCU,RTC還在正常運(yùn)行,我并不需要重新設(shè)置RTC,這時(shí)候,我們可以在要設(shè)置RTC的時(shí)候,添加一個(gè)判斷條件,就是如果我選擇的備份寄存器中填入一個(gè)值,如果我獨(dú)到的值和我要寫(xiě)的值一致,我就不重新設(shè)置RTC,如果不一致我就重新設(shè)置。當(dāng)然這個(gè)值是隨意設(shè)置的。
如官方例程: if (RTC_ReadBackupRegister(RTC_BKP_DR0) != 0x32F2) //判讀讀到的值是否與設(shè)置的一致
{
。。。。
RTC_WriteBackupRegister(RTC_BKP_DR0, 0x32F2); //設(shè)置完成后,給備份寄存器寫(xiě)入一個(gè)值
}
8、至此,介紹就結(jié)束了,主要還是看參考手冊(cè),當(dāng)然,官方的庫(kù)已經(jīng)給大家省去了很多功能,但是從寄存器層面去了解如何操作的也是相當(dāng)?shù)谋匾?/p>