什么是RTC
RTC (Real Time Clock):實時時鐘
RTC是個獨立的定時器。RTC模塊擁有一個連續(xù)計數(shù)的計數(shù)器,在相應的軟件配置下,可以提供時鐘日歷的功能。修改計數(shù)器的值可以重新設置當前時間和日期 RTC還包含用于管理低功耗模式的自動喚醒單元。
在斷電情況下 RTC仍可以獨立運行 只要芯片的備用電源一直供電,RTC上的時間會一直走。
RTC實質是一個掉電后還繼續(xù)運行的定時器,從定時器的角度來看,相對于通用定時器TIM外設,它的功能十分簡單,只有計時功能(也可以觸發(fā)中斷)。但其高級指出也就在于掉電之后還可以正常運行。
兩個 32 位寄存器包含二進碼十進數(shù)格式 (BCD) 的秒、分鐘、小時( 12 或 24 小時制)、星期幾、日期、月份和年份。此外,還可提供二進制格式的亞秒值。系統(tǒng)可以自動將月份的天數(shù)補償為 28、29(閏年)、30 和 31 天。
上電復位后,所有RTC寄存器都會受到保護,以防止可能的非正常寫訪問。
無論器件狀態(tài)如何(運行模式、低功耗模式或處于復位狀態(tài)),只要電源電壓保持在工作范圍內,RTC使不會停止工作。
RCT特征:
● 可編程的預分頻系數(shù):分頻系數(shù)高為220。
● 32位的可編程計數(shù)器,可用于較長時間段的測量。
● 2個分離的時鐘:用于APB1接口的PCLK1和RTC時鐘(RTC時鐘的頻率必須小于PCLK1時鐘 頻率的四分之一以上)。
● 可以選擇以下三種RTC的時鐘源:
● HSE時鐘除以128;
● LSE振蕩器時鐘;
● LSI振蕩器時鐘
● 2個獨立的復位類型:
● APB1接口由系統(tǒng)復位;
● RTC核心(預分頻器、鬧鐘、計數(shù)器和分頻器)只能由后備域復位
● 3個專門的可屏蔽中斷:
● 1.鬧鐘中斷,用來產生一個軟件可編程的鬧鐘中斷。
● 2.秒中斷,用來產生一個可編程的周期性中斷信號(長可達1秒)。
● 3.溢出中斷,指示內部可編程計數(shù)器溢出并回轉為0的狀態(tài)。
RTC時鐘源:
三種不同的時鐘源可被用來驅動系統(tǒng)時鐘(SYSCLK):
● HSI振蕩器時鐘
● HSE振蕩器時鐘
● PLL時鐘
這些設備有以下2種二級時鐘源:
● 40kHz低速內部RC,可以用于驅動獨立看門狗和通過程序選擇驅動RTC。 RTC用于從停機/待機模式下自動喚醒系統(tǒng)。
● 32.768kHz低速外部晶體也可用來通過程序選擇驅動RTC(RTCCLK)。
RTC原理框圖
RTC時鐘的框圖還是比較簡單的,這里我們把他分成 兩個部分:
APB1 接口:用來和 APB1 總線相連。 此單元還包含一組 16 位寄存器,可通過 APB1 總線對其進行讀寫操作。APB1 接口由 APB1 總 線時鐘驅動,用來與 APB1 總線連接。
通過APB1接口可以訪問RTC的相關寄存器(預分頻值,計數(shù)器值,鬧鐘值)。
RTC 核心接口:由一組可編程計數(shù)器組成,分成 兩個主要模塊 。
第一個模塊是 RTC 的 預分頻模塊,它可編程產生 1 秒的 RTC 時間基準 TR_CLK。RTC 的預分頻模塊包含了一個 20 位的可編程分頻器(RTC 預分頻器)。如果在 RTC_CR 寄存器中設置了相應的允許位,則在每個 TR_CLK 周期中 RTC 產生一個中斷(秒中斷)。
第二個模塊是一個 32 位的可編程計數(shù)器 (RTC_CNT),可被初始化為當前的系統(tǒng)時間,一個 32 位的時鐘計數(shù)器,按秒鐘計算,可以記 錄 4294967296 秒,約合 136 年左右,作為一般應用,這已經是足夠了的。
RTC具體流程:
RTCCLK經過RTC_DIV預分頻,RTC_PRL設置預分頻系數(shù),然后得到TR_CLK時鐘信號,我們一般設置其周期為1s,RTC_CNT計數(shù)器計數(shù),假如1970設置為時間起點為0s,通過當前時間的秒數(shù)計算得到當前的時間。RTC_ALR是設置鬧鐘時間,RTC_CNT計數(shù)到RTC_ALR就會產生計數(shù)中斷,
RTC_Second為秒中斷,用于刷新時間,
RTC_Overflow是溢出中斷。
RTC Alarm 控制開關機
RTC時鐘選擇
使用HSE分頻時鐘或者LSI的時候,在主電源VDD掉電的情況下,這兩個時鐘來源都會受到影響,因此沒法保證RTC正常工作.所以RTC一般都時鐘低速外部時鐘LSE,頻率為實時時鐘模塊中常用的32.768KHz,因為32768 = 2^15,分頻容易實現(xiàn),所以被廣泛應用到RTC模塊.(在主電源VDD有效的情況下(待機),RTC還可以配置鬧鐘事件使STM32退出待機模式).
RTC復位過程
除了RTC_PRL、RTC_ALR、RTC_CNT和RTC_DIV寄存器外,所有的系統(tǒng)寄存器都由系統(tǒng)復位或電源復位進行異步復位。
RTC_PRL、RTC_ALR、RTC_CNT和RTC_DIV寄存器僅能通過備份域復位信號復位。
系統(tǒng)復位后,禁止訪問后備寄存器和RCT,防止對后衛(wèi)區(qū)域(BKP)的意外寫操作
讀RTC寄存器
RTC內核完全獨立于APB1接口,軟件通過APB1接口對RTC相關寄存器訪問。但是相關寄存器只在RTC APB1時鐘進行重新同步的RTC時鐘的上升沿被更新。所以軟件必須先等待寄存器同步標志位(RTC_CRL的RSF位)被硬件置1才讀。
配置RTC寄存器
必須設置RTC_CRL寄存器中的CNF位,使RTC進入配置模式后,才能寫入RTC_PRL、
RTC_CNT、RTC_ALR寄存器。
另外,對RTC任何寄存器的寫操作,都必須在前一次寫操作結束后進行。可以通過查詢
RTC_CR寄存器中的RTOFF狀態(tài)位,判斷RTC寄存器是否處于更新中。僅當RTOFF狀態(tài)位是’1’
時,才可以寫入RTC寄存器。
審核編輯:符乾江
-
嵌入式
+關注
關注
5082文章
19104瀏覽量
304796 -
RTC
+關注
關注
2文章
538瀏覽量
66460
發(fā)布評論請先 登錄
相關推薦
評論