RTC(實時時鐘)和BKP(備份暫存器)
RTC:
RTC模組和時鐘配置系統(RCC_BDCR暫存器)處於後備區域,系統復位或從待機模式喚醒後,RTC的設定和時間維持不變。
RCC_BDCR:備份域控制暫存器。其LSEON、LSEBYP、RTCSEL和RTCEN位處於備份域,在復位後處於防寫狀態,只有在電源控制暫存器(PWR_CR)中的DBP位置 1 後才能對這些位進行改動;這些位只能由備份域復位清除。
備份域復位:軟體復位,RCC_BDCR 暫存器 BDRST位置1產生;
在VDD和VBAT兩者掉電的前提下,VDD或VBAT上電將引發備份區域復位。
系統復位後,對後備暫存器和RTC的訪問被禁止,執行以下操作將使能對後備暫存器和RTC的訪問。
後備暫存器和RTC的訪問:
1)設定暫存器 RCC_APB1ENR 的PWREN 和BKPEN位,使能電源和後備介面時鐘。
RCC_APB1ENR:APB1外設時鐘使能暫存器;
PWREN:電源介面時鐘使能位,置1有效;BKPEN:備份介面時鐘使能位,置1有效;
後備介面為:RTC與APB1匯流排連線的的APB1介面,系統通過APB1介面訪問RTC暫存器;
2)電源控制暫存器(PWR_CR)的DBP位來使能對後備暫存器和RTC的訪問。
PWR_CR:電源控制暫存器,DPB位:取消後備區域的防寫位,置1則允許寫入RTC和後備暫存器。
組成部分:
2)RTC核心,由一組可程式設計計數器組成,分成兩個主要模組:
i) 是RTC的預分頻模組(RTC_PRL),包含了一個20位的RTC預分頻器,可程式設計產生最長為1秒的RTC時間基準TR_CLK。如果在RTC_CR暫存器中設定了相應的允許位(RTC_CRH-SECIE位),則在每個TR_CLK週期中RTC產生一箇中斷(秒中斷)。
ii)一個32位的可程式設計計數器 RTC_CNT,可被初始化為當前的系統時間,對 TR_CLK訊號計數操作。如果RTC_CRH暫存器中設定了相應的允許位(OWIE),計滿時會產生溢位中斷;
系統時間按TR_CLK週期累加並與儲存在RTC_ALR暫存器中的可程式設計時間相比較,如果RTC_CRH控制暫存器中設定了相應允許位(ALRIE),比較匹配時將產生一個鬧鐘中斷。
簡化的RTC框圖:
復位過程:
1)APB1介面由系統復位;
2)RTC核心(RTC_PRL、RTC_ALR、RTC_CNT和RTC_DIV 暫存器)只能由後備域復位。
讀RTC暫存器:
軟體通過APB1介面訪問RTC的預分頻值、計數器值和鬧鐘值。但是,相關的可讀暫存器只在與RTC APB1時鐘進行重新同步的RTC時鐘的上升沿被更新。如果APB1介面曾經被關閉而讀操作又是在剛剛重新開啟APB1之後,則在第一次的內部暫存器更新之前,從APB1上讀出的RTC暫存器數值可能被破壞了(通常讀到0)。
下述幾種情況下能夠發生這種情形:
- 發生系統復位或電源復位;
- 系統剛從待機模式喚醒;
- 系統剛從停機模式喚醒。
因此,若在讀取RTC暫存器時,RTC的APB1介面曾經處於禁止狀態,則軟體首先必須等待RTC_CRL暫存器中的RSF位(暫存器同步標誌)被硬體置 1。
RTC的 APB1介面不受WFI和WFE等低功耗模式的影響,APB1介面被禁止時(復位、無時鐘或斷電)RTC核仍保持執行狀態。
配置RTC暫存器:
必須設定RTC_CRL暫存器中的CNF位,使RTC進入配置模式後,才能寫入RTC_PRL、RTC_CNT、RTC_ALR暫存器。
對RTC任何暫存器的寫操作,都必須在前一次寫操作結束後進行。可以通過查詢 RTC_CR暫存器中的RTOFF狀態位,判斷RTC暫存器是否處於更新中。僅當RTOFF狀態位是 1時,才可以寫入RTC暫存器。
配置過程:
1. 查詢RTOFF位,直到RTOFF的值變為 1;
2. 置CNF值為1,進入配置模式;
3. 對一個或多個RTC暫存器進行寫操作;
4. 清除CNF標誌位,退出配置模式;
5. 查詢RTOFF,直至RTOFF位變為 1 以確認寫操作已經完成。
RTC控制暫存器低位(RTC_CRL):
RTC校準:
將 RTCCLK 64分頻後輸出到防入侵引腳(PC.13),以供校驗時鐘是否正確。
BKP:
備份暫存器是42個16位的暫存器,可用來儲存84個位元組的使用者應用程式資料。他們處在備份域裡,當VDD電源被切斷,他們仍然由VBAT維持供電。當系統在待機模式下被喚醒,或系統復位或電源復位時,他們也不會被複位。
BKP控制暫存器用來管理侵入檢測和RTC校準功能。
特性:
用來管理防侵入檢測並具有中斷功能的狀態/控制暫存器;
用來儲存RTC校驗值的校驗暫存器;
在PC13引腳(當該引腳不用於侵入檢測時)上輸出RTC校準時鐘,RTC鬧鐘脈衝或者秒脈衝。
訪問:
復位後,對備份暫存器和RTC的訪問被禁止,並且備份域被保護以防止可能存在的意外的寫操作。
1)、通過設定暫存器RCC_APB1ENR的PWREN和BKPEN位來開啟電源和後備介面(與APB1匯流排連線的介面)的時鐘
2)、電源控制暫存器(PWR_CR)的DBP位來使能對後備暫存器和RTC的訪問。
侵入檢測:
當TAMPER引腳上的訊號從0變成1或者從1變成0(取決於備份控制暫存器BKP_CR的TPAL位),會產生一個侵入檢測事件,侵入檢測事件將所有資料備份暫存器內容清除;
侵入檢測訊號是邊沿檢測的訊號與侵入檢測允許位的邏輯與,從而在侵入檢測引腳被允許前發生的侵入事件也可以被檢測到;
設定BKP_CSR暫存器的TPIE位為 1,當檢測到侵入事件時就會產生一箇中斷。
在一個侵入事件被檢測到並被清除後,侵入檢測引腳TAMPER應該被禁止。然後,在再次寫入備份資料暫存器前重新用TPE位啟動侵入檢測功能。這樣,可以阻止軟體在侵入檢測引腳上仍然有侵入事件時對備份資料暫存器進行寫操作。當VDD電源斷開時,侵入檢測功能仍然有效。為了避免不必要的復位資料備份暫存器,TAMPER
引腳應該在片外連線到正確的電平。
RTC校準:
RTC時鐘可以經64分頻輸出到侵入檢測引腳TAMPER上。通過設定RTC校驗暫存器(BKP_RTCCR)的CCO位來開啟這一功能。
暫存器:
BKP_DRx (備份資料暫存器x x = 1 … 10)
BKP_DRx暫存器不會被系統復位、電源復位、從待機模式喚醒所復位,它們可以由備份域復位來複位或(如果侵入檢測引腳TAMPER功能被開啟時)由侵入引腳事件復位。
BKP_RTCCR(RTC時鐘校準暫存器)
CCO 位:校準時鐘輸出(Calibration clock output)
此位置1可以在侵入檢測引腳輸出經64分頻後的RTC時鐘。當CCO位置1時,必須關閉侵入檢測功能(TPE 位)以避免檢測到無用的侵入訊號;當VDD供電斷開時,該位被清除。
ASOE 位:允許輸出鬧鐘或秒脈衝(Alarm or second output enable)
該位允許RTC鬧鐘或秒脈衝輸出到TAMPER引腳上,輸出脈衝的寬度為一個RTC時鐘的週期。設定ASOE位時不能開啟TAMPER的功能,該位只能被後備區的復位所清除。
ASOS 位:鬧鐘或秒輸出選擇(Alarm or second output selection)
當設定了ASOE位,ASOS位可用於選擇在TAMPER引腳上輸出的是RTC秒脈衝還是鬧鐘脈衝訊號。
0:輸出RTC鬧鐘脈衝
1:輸出秒脈衝 該位只能被後備區的復位所清除。
BKP_CR(備份控制暫存器)
TPE 位:0:侵入檢測TAMPER引腳作為通用IO口使用
1:開啟侵入檢測引腳作為侵入檢測使用
TPAL 位:侵入檢測TAMPER引腳有效電平(TAMPER pin active level)
0:侵入檢測TAMPER引腳上的高電平會清除所有資料備份暫存器(如果TPE位為1)
1:侵入檢測TAMPER引腳上的低電平會清除所有資料備份暫存器(如果TPE位為1)
BKP_CSR(備份控制/狀態暫存器) 主要是侵入事件和中斷的標誌位和清除標誌位、中斷允許位。