STM32的RTC簡單操作
簡單說明:
/*****************************************************************************************************
1、RTC模組和時鐘配置系統(RCC_BDCR暫存器)處於後備區域中。其斷電時靠備份電源供電可繼續維持其功能。所以RTC的使用同時涉及到BKP(備份暫存器)和PWR(電源控制),還需對它們進行配置。
2、由於RTC之前可能已配置(不是第一次使用),它斷電時若有備份電源時,其仍在工作,若如此,我們上電後的程式就要考慮是否還要重新配置,若重新配置,之前的就會“灰飛煙滅”;所以,當我們是第一次使用或沒有備份時,我們就配置RTC,若之前已配置,我們就不呼叫,直接使用。在本例中寫一個值到BKP_DR1中以標示RTC是否已配置,在啟動之後程式檢查BKP_DR1的值。(1)若BKP_DR1的值不正確:(BKP_DR1的值有誤或者由於是第一次執行值還未寫進去),則需要配置RTC(2) 若BKP_DR1的值正確,則意味著RTC已配置.
******************************************************************************************************************/
1.首先,需要用到BKP和PWR,則當然要使能其時鐘咯。 因為RTC的一些設定是儲存在後備域中的,so,操作RTC的設定暫存器前,要開啟後備域模組中的防寫功能。呼叫函式PWR_BackupAccessCmd(ENABLE);
2.接著,我們使用LSE作為RTC的時鐘,則需要進行相應時鐘的配置;配置完後就可以開啟RTC時鐘;開啟後,還需等待APB1時鐘與RTC時鐘同步(呼叫RTC_WaitForSynchro())才能讀寫RTC暫存器;
3.我們對RTC進行寫入操作之前,都要檢查命令有沒有完成,呼叫RTC_WaitForLastTas()即可;我們要對暫存器寫入哪些值呢?分頻數、操作中斷等。
4.因為我們要在BKP中加入RTC校驗功能,所以還需呼叫函式BKP_TamperPinCmd(DISABLE)失能侵入檢測功能。RTC時鐘經64分頻輸出到侵入檢測引腳TAMPER上,可呼叫BKP_RTCOutputConfig(BKP_RTCOutputSource_CalibClock)來實現;
5.當然,要用到中斷、串列埠,肯定要進行相應配置的。
6.中斷函式在stm32f10x_it.c檔案中編寫,注意每一種中斷都有其指定的中斷服務函式名稱,如果自己胡亂該名稱,編譯器是不能識別是該類中斷的。
7.注意:不管我們是否需要重新配置RTC,每次系統復位都需要執行如下操作:開啟PWR和BKP外設時鐘、開啟後備區域的防寫功能(系統復位後,對後備暫存器和RTC的訪問被禁止)、使能RTC時鐘();具體函式如下:RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE); PWR_BackupAccessCmd(ENABLE); RCC_RTCCLKCmd(ENABLE);(若不呼叫該函式,就會在 RTC_WaitForSynchro() 函式中死迴圈,等待RTC時鐘同步)。