12.1 概述
實時時鐘Real TimeClock(簡稱RTC),實時時鐘芯片是日常生活中應用最為廣泛的消費類電子產品之一。它為人們提供精確的實時時間,或者為電子系統提供精確的時間基準,目前實時時鐘芯片大多采用精度較高的晶體振蕩器作為時鐘源。有些時鐘芯片為了在主電源掉電時,還可以工作,需要外加電池供電。
現在的ARM體系處理器基本都會內置RTC模塊,STM32也不例外。STM32內部RTC結構如下圖所示。
RTC主要有兩個部分組成,第一部分的APB1接口用來和APB1總線相連,此單元還包含一組16位寄存器,可通過APB1總線對其進行讀寫操作。另一部分由一組可編程計數器組成,分成兩個主要模塊。第一個模塊是RTC的預分頻模塊,它可編程產生最長為1秒的RTC時間基準TR_CLK。RTC的預分頻模塊包含了一個20位的可編程分頻器。如果在RTC_CR寄存器中設置了相應的允許位,則在每個TR_CLK周期中RTC產生一個中斷。第二個模塊是一個32位的可編程計數器,可被初始化為當前的系統時間。系統時間按TR_CLK周期累加并與存儲在RTC_ALR寄存器中的可編程時間相比較,如果RTC_CR控制寄存器中設置了相應允許位,比較匹配時將產生一個鬧鐘中斷。
RTC模塊和時鐘配置系統是在后備區域,即在系統復位或從待機模式喚醒后RTC的設置和時間維持不變。但是在系統復位后,會自動禁止訪問后備寄存器和RTC,以防止對后備區域的意外寫操作。所以在要設置時間之前,先要取消備份區域寫保護。
12.2 相關寄存器
12.2.1 控制寄存器1:RTC_CRH
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
- | OWIE | ALRIE | SECIE |
Bit 2:允許溢出中斷位
0:屏蔽溢出中斷
1:允許溢出中斷
Bit 1:允許鬧鐘中斷
0:屏蔽鬧鐘中斷
1:允許鬧鐘中斷
Bit 0:允許秒中斷
0:屏蔽秒中斷
1:允許秒中斷
12.2.2 控制寄存器2:RTC_CRL
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
- | RTOFF | CNF | RSF | OWF | ALRF | SECF |
Bit 5:RTC操作關閉
0:寫操作未完成
1:操作已完成
Bit 4:配置標志
0:退出配置模式
1:進入配置模式
Bit 3:RTC同步標志
RTC_CNT寄存器和RTC_DIV寄存器由軟件更新或清0時,此位由硬件置1。在APB1復位后,或APB1時鐘停止后,此位必須由軟件清0。要進行任何的讀操作之前,用戶程序必須等待這位被硬件置1
0:寄存器尚未被同步
1:寄存器已經被同步
Bit 2:溢出標志
當32位可編程計數器溢出時,此位由硬件置1。此位只能由軟件清0
0:無溢出
1:32位可編程計數器溢出
Bit 1:鬧鐘標志
當32位可編程計數器達到RTC_ALR寄存器所設置的預定值,此位由硬件置1。此位只能由軟件清0。
0:無鬧鐘
1:有鬧鐘
Bit 0:秒標志
當32位可編程預分頻器溢出時,此位由硬件置1,同時RTC計數器加1。此位只能由軟件清除。
0:秒標志條件不成立
1:秒標志條件成立
12.2.3 預分頻裝載寄存器1:RTC_PRLH
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
- | PRL[19:16] |
Bit 3~Bit 0:RTC預分頻裝載值高位
12.2.4 預分頻裝載寄存器2:RTC_PRLL
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
PRL[15:0] |
Bit 15~Bit 0:RTC預分頻裝載值低位
注:RTC時鐘頻率根據預分頻寄存器的值有如下計算公式。
其中RTCCLK代表的RTC的輸入時鐘,一般默認32.768kHz。
12.3 實驗例程
功能:讀取RTC的日期顯示在LCD上面。
(1)創建rtc.h文件輸入以下代碼。
/*********************************************************************************************************
RTC 驅 動 文 件
*********************************************************************************************************/
#ifndef _RTC_H_
#define _RTC_H_
#include "sys.h"
/*********************************************************************************************************
數 據 結 構
*********************************************************************************************************/
typedef struct
{
u8 year; //年
u8 month; //月
u8 date; //日
u8 hour; //時
u8 minute; //分
u8 second; //秒
}RTC_Data;
extern RTC_Data RTC_Time;
/*********************************************************************************************************
函 數 列 表
*********************************************************************************************************/
void RTC_Init( void ) ; //RTC初始化
void RTC_Set_Time( u8 year, u8 month, u8 date, u8 hour, u8 minute, u8 second ) ; //設置時間
void RTC_Get_Time( void ) ; //獲取時間
#endif
-
電源
+關注
關注
185文章
17870瀏覽量
252133 -
晶體振蕩器
+關注
關注
9文章
635瀏覽量
29273 -
時鐘芯片
+關注
關注
2文章
254瀏覽量
39999 -
RTC
+關注
關注
2文章
544瀏覽量
67121
發布評論請先 登錄
相關推薦
CubeMX入門STM32 HAL庫的學習筆記
STM32各模塊學習筆記
STM32入門學習筆記之RTC實驗(下)
STM32學習筆記之RTC實時時鐘1
![<b class='flag-5'>STM32</b><b class='flag-5'>學習</b><b class='flag-5'>筆記</b><b class='flag-5'>之</b><b class='flag-5'>RTC</b>實時時鐘1](https://file1.elecfans.com/web2/M00/88/B9/wKgaomRwUFWAVQ1gAADmaX15GIg780.jpg)
STM32學習筆記之RTC實時時鐘2
![<b class='flag-5'>STM32</b><b class='flag-5'>學習</b><b class='flag-5'>筆記</b><b class='flag-5'>之</b><b class='flag-5'>RTC</b>實時時鐘2](https://file1.elecfans.com/web2/M00/88/BA/wKgZomRwUFaAJXNGAALkIvX9IWc784.jpg)
評論