簡介
"RTC"是Real Time Clock 的簡稱,意為實時時鐘。即,提供類似于 PC 上的時間記錄信息的功能。既然是實時時鐘,則至少應(yīng)該有秒、分、時等信息。也可以直觀的把他理解成為一個計數(shù)器,一直累加。但又不同于 CPU 上電后的那些計數(shù)器,對于 RTC ,需要支持的是掉電后的繼續(xù)計數(shù)(存在備用電源)。所謂掉電,是指電源Vpp斷開的情況下,為了RTC外設(shè)掉電可以繼續(xù)運行,必須給STM32芯片通過VBAT引腳街上鋰電池.當主電源VDD有效時,由VDD給RTC外設(shè)供電.當VDD掉電后,由VBAT給RTC外設(shè)供電.無論由什么電源供電,RTC中的數(shù)據(jù)始終都保存在屬于RTC的備份域中,如果主電源和VBA都掉電,那么備份域中保存的所有數(shù)據(jù)都將丟失.(備份域除了RTC模塊的寄存器,還有42個16位的寄存器可以在VDD掉電的情況下保存用戶程序的數(shù)序,系統(tǒng)復(fù)位或電源復(fù)位時,這些數(shù)據(jù)也不會被復(fù)位).
STM32 的 RTC 操作,主要功能由三部分組成:
電源配置
后備(BKP配置)
RTC 配置
時鐘
RTC 時鐘可以選擇三種時鐘源的輸入:
1. 高速外部時鐘 HSE 的 128 分頻
2. 低速外部時鐘 LSE
3. 低速內(nèi)部時鐘 LSI
針對單板上,我們選擇 LSE 32.768kHz 的 LSE 作為 RTC 的時鐘輸入。
當主電源掉電的時候,由Vbat進行供電:
工作原理
灰色部分為備用區(qū)域,系統(tǒng)掉電后,由后備電源持續(xù)供電,寄存器相關(guān)的值會持續(xù)存在并持續(xù)工作。同時,此部分的復(fù)位也單獨存在 BKP 復(fù)位部分,即通過對 BKP 的復(fù)位來進行此部分的復(fù)位。
可以看到, RTC CLK 供給 RTC 模塊時,首先通過一個分頻器,進行分頻,經(jīng)過分頻器后的時鐘 TR_CLK 用于后續(xù)的計數(shù)器使用。RTC 支持鬧鐘功能,即,在 RTC_ALR 寄存器設(shè)置一個期望的值,RTC_CNT 在 TR_CLK 下進行計數(shù),當計數(shù)器的值到達了 RTC_ALR ,則產(chǎn)生鬧鐘事件。
注:普通情況下,通過計算,使得 RTC 計數(shù)器能以 1s 一次的方式進行計數(shù),這樣能夠滿足基本使用。
除了RTC_PRL、RTC_ALR、RTC_CNT和RTC_DIV寄存器外,所有的系統(tǒng)寄存器都由系統(tǒng)復(fù)位或電源復(fù)位進行異步復(fù)位。
RTC_PRL、RTC_ALR、RTC_CNT和RTC_DIV寄存器僅能通過備份域復(fù)位信號復(fù)位。
中斷
RTC 支持 3 個中斷:
1. 秒中斷:即經(jīng)過分頻器的時鐘 TR_CLK 每次計數(shù)產(chǎn)生的中斷
2. 溢出中斷 : 計數(shù)器是 32bits 的,當計數(shù)器達到上限的時候產(chǎn)生的中斷
3. 鬧鐘中斷:當計數(shù)器的值達到配置的期望值 (RTC_ALR) 的時候產(chǎn)生鬧鐘
這三個中斷均需要配置對應(yīng)的中斷使能位,進行使能后,方可使用。
訪問限制
由于 RTC 處于 STM32 的備用區(qū)域(BKP),同時 RTC 的核心獨立于 APB1,同時又是使用了 APB1 進行訪問,此處,在訪問 RTC 相關(guān)寄存器的時候,硬件有跨時鐘域的同步操作,需要有幾點注意的地方:
A. 訪問 RTC 相關(guān)寄存器之前,首先需要開啟 BKP 和 PWR 相關(guān)的時鐘
B. 設(shè)置 PWR 的 DBP 位,使能對后備寄存器和RTC的訪問
C. 若在讀取 RTC 寄存器時,RTC 的 APB1 接口曾經(jīng)處于禁止狀態(tài),則軟件首先必須等待 RTC_CRL 寄存器中的 RSF 位(寄存器同步標志)被硬件置’1’。
D. 對RTC任何寄存器的寫操作,都必須在前一次寫操作結(jié)束后進行。可以通過查詢RTC_CR寄存器中的RTOFF狀態(tài)位,判斷RTC寄存器是否處于更新中。僅當RTOFF狀態(tài)位是’1’時,才可以寫入RTC寄存器。
C. 使能 RTC 進入配置模式,在配置模式下進行寄存器更新,設(shè)置完后,退出配置模式
針對最后一項D,訪問過程如下:
D1. 查詢RTOFF位,直到RTOFF的值變?yōu)椤?’
D2. 置 CNF 值為1,進入配置模式
D3. 對一個或多個RTC寄存器進行寫操作
D4. 清除CNF標志位,退出配置模式
D5. 查詢RTOFF,直至RTOFF位變?yōu)椤?’以確認寫操作已經(jīng)完成。
配置過程
1. 開啟 PWR,BKP 區(qū)域的時鐘
2. 寫 PWR 的 DBP 位,使能后備區(qū)域的訪問權(quán)限
3. Deinit RTC 模塊
4. 配置 LSE 的時鐘開啟,并等待 LSE 穩(wěn)定(32.768kHz)
5. 選擇 RTC 的時鐘為 LSE(注意,此部分不在 RTC 寄存器,故,無需滿足”訪問限制”章節(jié)的限制)
6. 使能 RTC
7. 由于是上電配置,故 APB1 之前出于禁止狀態(tài),故需要等待 RSF 置位
8. 等待 RTOFF 置位,即等待 RTC 出于 no busy
9. 設(shè)置分頻系數(shù)為 32768 - 1,并等待 RTOFF 置位(等待寫完成)
10. 配置使能秒中斷,并等待 RTOFF 置位(等待寫完成)
11. 初始化當前時間(這個可以隨意設(shè)置)
12. 配置 NVIC
注意:為了使上電后,RTC 只被配置一次,這里使用了一個備用寄存器來作為 RTC 是否被配置過的標志(如果使用軟件的一個變量,掉電后,變量的值會丟掉)。每次上電的時候進行 check, 如果配置過 RTC,則不再配置。
這里測試的時候,使用一個全局變量進行讀數(shù)據(jù),每次在秒中斷中,將數(shù)據(jù)讀出并解析。(因為寄存器中的計數(shù)器的單位是s秒)
當然,在中斷處理程序 RTC_IRQHandler ,對 clear 中斷 pending 的標志,也是需要等待寫完成的 (RTOFF 置位)
代碼如下:
#define LSE_CLK_32768KHZ 32768
#define RTC_CFG_DONE 0xAAAA
#define LEAP_YEAR_SEC 31622400
#define NORMAL_YEAR_SEC 31536000
#define A_DAY_SEC 86400
#define A_HOUR_SEC 3600
#define A_MIN_SEC 60
#define MAX_DAY 10
#define ONE_DAY_HOURS 24
#define ONE_HOUR_MIN 60
#define ONE_MIN_SEC 60
#define MAX_SEC (MAX_DAY * ONE_DAY_HOURS * ONE_HOUR_MIN * ONE_MIN_SEC)
typedef struct {
uint32_t day;
uint32_t hour;
uint32_t min;
uint32_t sec;
} SK_TIME_t;
SK_TIME_t g_stCurrentTime;
static void _setCurrentTime(SK_TIME_t *cur_time)
{
// Test RTC At 2018.7.13 -- 00:26:00
RTC_SetCounter(0x00);
RTC_WaitForLastTask();
}
void SK_getCurrentTime(SK_TIME_t *cur_time)
{
uint32_t secCount = RTC_GetCounter();
uint32_t sec = secCount % A_DAY_SEC;
cur_time->day = secCount / A_DAY_SEC ;
cur_time->hour = sec / 3600;
cur_time->min = (sec % 3600) / 60;
cur_time->sec = (sec % 3600) % 60;
}
static uint8_t SK_RTCIsConfiged(void)
{
return ((BKP_ReadBackupRegister(BKP_DR1) == RTC_CFG_DONE) ? 1 : 0);
}
static void SK_RTCNVICConfig(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
static void SK_RTC_Configuration(void)
{
// Step 1 : Open Power & Backup zone Clock
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
// Step 2 : Set Power register to allow to access backup domain
PWR_BackupAccessCmd(ENABLE);
// Step 3 : Rest BackUp domain
BKP_DeInit();
// Step 4 : Enable LSE Clock and wait for ready
RCC_LSEConfig(RCC_LSE_ON);
while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET);
// Step 5 : Configure the LSE as RTC Clock input
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
// Step 6 : Enable RTC Clock
RCC_RTCCLKCmd(ENABLE);
// Step 7 : Because APB1 was reset when power on, follow datasheet, must wait RSF
RTC_WaitForSynchro();
// Step 8 : Wait until last write was finished
RTC_WaitForLastTask();
// Step 9 : Set prescaler as 32767
// RTC period = RTCCLK/RTC_PR = (32.768 KHz)/(32767+1)
RTC_SetPrescaler(LSE_CLK_32768KHZ - 1);
RTC_WaitForLastTask();
// Step 10 : Enable second interrupt
RTC_ITConfig(RTC_IT_SEC, ENABLE);
RTC_WaitForLastTask();
}
void SK_RTCInit(void)
{
// First Configure RTC
if (!SK_RTCIsConfiged())
{
SK_RTC_Configuration();
_setCurrentTime(&stTestRTCTime);
BKP_WriteBackupRegister(BKP_DR1, RTC_CFG_DONE);
}
else
{
RTC_WaitForSynchro();
RTC_ITConfig(RTC_IT_SEC, ENABLE);
RTC_WaitForLastTask();
}
SK_RTCNVICConfig();
SK_getCurrentTime(&g_stCurrentTime);
}
void SK_RTCDeInit(void)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
PWR_BackupAccessCmd(ENABLE);
BKP_DeInit();
}
void RTC_IRQHandler(void)
{
if (RTC_GetITStatus(RTC_IT_SEC) != RESET)
{
if (RTC_GetCounter() >= MAX_SEC)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
PWR_BackupAccessCmd(ENABLE);
RTC_WaitForLastTask();
RTC_SetCounter(0x0);
RTC_WaitForLastTask();
}
SK_getCurrentTime(&g_stCurrentTime);
}
if(RTC_GetITStatus(RTC_IT_ALR)!= RESET)
{
RTC_ClearITPendingBit(RTC_IT_ALR);
}
RTC_ClearITPendingBit(RTC_IT_SEC | RTC_IT_OW);
RTC_WaitForLastTask();
}
上一篇:STM32F103ZET6 — EXTI
下一篇:STM32F103ZET6 — TIM6/TIM7
推薦閱讀
史海拾趣
為了確保產(chǎn)品質(zhì)量和穩(wěn)定性,Bomar Interconnect公司建立了嚴格的質(zhì)量管理體系。公司引進了先進的質(zhì)量檢測設(shè)備和方法,對原材料、生產(chǎn)過程、成品進行全面檢測和控制。同時,公司還加強了員工培訓(xùn),提高了員工的質(zhì)量意識和操作技能。這些措施有效提升了產(chǎn)品的質(zhì)量水平,降低了不良品率,為客戶提供了更加可靠的產(chǎn)品和服務(wù)。
在追求經(jīng)濟效益的同時,ELM也注重環(huán)保和可持續(xù)發(fā)展。公司積極采用環(huán)保材料和綠色生產(chǎn)工藝,降低生產(chǎn)過程中的能耗和排放。同時,ELM還積極參與環(huán)保公益活動,推動電子行業(yè)的綠色發(fā)展。這些舉措不僅體現(xiàn)了ELM的社會責任感,也為公司的長期發(fā)展奠定了堅實的基礎(chǔ)。
ELM始終將品質(zhì)管理作為公司發(fā)展的核心。公司建立了完善的質(zhì)量管理體系,從原材料采購到生產(chǎn)、檢測、包裝等各個環(huán)節(jié)都進行嚴格的質(zhì)量控制。同時,ELM還注重客戶需求和反饋,不斷優(yōu)化產(chǎn)品和服務(wù),以滿足客戶的個性化需求。這些舉措使得ELM的產(chǎn)品在市場上享有很高的聲譽和口碑,客戶滿意度持續(xù)提升。
在晶圓盒傳輸業(yè)務(wù)上,Entegris與臺灣的家登精密之間發(fā)生了一場長達數(shù)年的專利侵權(quán)訴訟。Entegris最終獲得了勝訴,家登被要求賠償超過3,000萬美元。這一勝利不僅保護了Entegris的知識產(chǎn)權(quán),也進一步鞏固了其在半導(dǎo)體材料市場的地位。
ENSIGN不僅關(guān)注傳統(tǒng)電子行業(yè)的發(fā)展,還積極探索新的業(yè)務(wù)領(lǐng)域。最近,ENSIGN集團宣布收購位于亞利桑那州的醫(yī)療保健園區(qū)River Park Post Acute和Elmwood Senior Living,以及其他七家公司。這一收購標志著ENSIGN正逐步向醫(yī)療保健領(lǐng)域進軍,尋求多元化的發(fā)展機會。
為了進一步擴大市場份額,Enterpoint公司開始積極拓展國際市場。他們通過參加國際電子展會、建立海外銷售網(wǎng)絡(luò)等方式,不斷提升品牌知名度和影響力。同時,公司還積極尋求與國際知名企業(yè)的合作機會,通過技術(shù)交流和產(chǎn)品合作,不斷提升自身的技術(shù)實力和產(chǎn)品質(zhì)量。
目前在做一個SRAM驅(qū)動,寫成的是流驅(qū)動,驅(qū)動寫好了! 但是在做MMU地址映射表時出問題了!具體如下: 原來的g_oalAddressTable[DATA] 表為 g_oalAddressTable DCD 0x80000000, ...… 查看全部問答∨ |
|
公司交給我讓我先了解下pos機,但是我對Pos機一點不了解,公司做的pos機是和銀行沒有關(guān)系的。就是給本公司的會員使用 想問下大蝦: 1:Pos機的相關(guān)硬件有什么設(shè)備 2:用什么語言開發(fā),能運行到什么系統(tǒng),是否認能兼容 3:軟硬件兩者怎么相互嵌 ...… 查看全部問答∨ |
SD WiFi 插拔之后工作不正常(Wince 5.0) Urgent SD WiFi在首次插入后均可以與指定AP(Access Point)成功連接,后經(jīng)過一次拔插后,就無法工作了,只有重新系統(tǒng)才可以。經(jīng)Trace log可知,無法得到BSSI List,其列表為空,由此可知,WiFi Adapter處于異常狀態(tài),至今沒有找到具體原因,曾試過NdisReset ...… 查看全部問答∨ |
STM32 ,用固件庫寫一個流水燈的程序需要哪些庫?我知道肯定要用GPIO,RCC要用到USART,NVIC嗎?為什么啊? 初學(xué)者求助… 查看全部問答∨ |
方法和技術(shù)——《使用2790型數(shù)字源表開關(guān)系統(tǒng)測試雙安全氣囊充氣機模塊》 機械臂接口 – 數(shù)字I/O 2790內(nèi)置的數(shù)字接口能夠直接控制器件機械臂。數(shù)字接口包含五路TTL兼容數(shù)字輸出和兩路輸入,以及外部供電的繼電器和地線連接。五路輸出提供測試通過/失敗通知。可以定義兩個上限和兩個下限用于任何數(shù)字萬用表測試。每個測 ...… 查看全部問答∨ |
本帖最后由 paulhyde 于 2014-9-15 03:39 編輯 有誰用過CC430及CC1111的嗎?有沒有相關(guān)的資料,最好是中文的 … 查看全部問答∨ |
今天調(diào)新板子,程序從JTAG和AS口都下不進去,且提示不同。 加載JTAG,程序燒到48%,出ERROR: CFG_DONE pin failed to go high. 用萬用表測,CFG_DONE 角經(jīng)電阻10K接到3.3V,且 CFG_nCE 已接地。 換成AS口,在選擇目標POF文件時就出錯 ...… 查看全部問答∨ |
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦
- 英飛凌微控制器:以全新實惠套件和強大開發(fā)環(huán)境為開發(fā)者提供支持
- iTOP-i.MX6開發(fā)板設(shè)備數(shù)驅(qū)動Menuconfig的用法
- 迅為IMX6ULL開發(fā)板Qt for Android搭建開發(fā)環(huán)境
- 迅為i.MX8M mini開發(fā)板Windots QT系統(tǒng)開發(fā)環(huán)境搭建
- 迅為IMX8MM開發(fā)板Yocto系統(tǒng)使用Gstarwmra(一)
- 迅為IMX8M mini開發(fā)板Linix系統(tǒng)修改默認屏幕
- iTOP-4412開發(fā)板支持4G以上文件系統(tǒng)擴展
- 迅為IMX8MM開發(fā)板Yocto系統(tǒng)設(shè)置開機自啟動
- 迅為IMX6Q開發(fā)板 Buildroot文件系統(tǒng)mqtt測試
- 高通攜手中國“汽車朋友圈”亮相2025上海車展: 加速駕駛輔助普惠,推動艙駕創(chuàng)新升級
- 工業(yè)市場正在快速回暖,德州儀器如何重塑電力電子市場?
- 特斯拉:美國交付的Model Y/3電池包已實現(xiàn)100%美國生產(chǎn)
- 地平線與博世深化合作,攜手為多家車企提供輔助駕駛產(chǎn)品
- 強化中國市場戰(zhàn)略布局,德州儀器正靈活應(yīng)對全球關(guān)稅挑戰(zhàn)
- Molex莫仕通過本地合作和創(chuàng)新加強支持中國汽車行業(yè)
- 貿(mào)澤開售Texas Instruments適用于高分辨率AR HUD的 全新DLP4620S-Q1 0.46"汽車數(shù)字微鏡器件
- ROHM推出高功率密度的新型SiC模塊,將實現(xiàn)車載充電器小型化!
- 用上車規(guī)級UFS 4.0,讓出行變得高效且可靠
- 車載測試技術(shù)解析:聚焦高帶寬、多通道同步采集與協(xié)議分析
- 打卡最后一周,解鎖TI汽車解決方案。解鎖的數(shù)量決定獎品的質(zhì)量!
- 下載有禮|是德科技:測試設(shè)備如何影響產(chǎn)品質(zhì)量調(diào)研報告
- 溫故而知新——開關(guān)電源經(jīng)典課程學(xué)習(xí)
- 下載《TI MCU與無線連接技術(shù)研討會講座實錄》抽獎贏好禮!
- 芯(E)幣兌換Nucleo擴展板:讓你的Nucleo變身成pyboard
- 美信基礎(chǔ)模擬IC APP下載 助力您創(chuàng)新模擬設(shè)計!評論、搶樓全有禮!
- 英飛凌BMS解決方案,為電動汽車和儲能系統(tǒng)保駕護航!
- 我給Xilinx資源中心做貢獻
- 重新上市?三星Galaxy Note 7通過Wi-Fi聯(lián)盟認證
- 三星S9首月出貨800萬支,Q1美國銷量超過蘋果
- 魅族官方確認:將推出首款谷歌Android Go手機
- 讓人“嚇尿”的錘子新機R1, 驍龍845與劉海屏穩(wěn)了?
- SkyWater研發(fā)汽車夜視技術(shù) AI及機器視覺助力自動駕駛
- Crucial英睿達25周年慶,多款明星單品超強攻略來了!
- 貿(mào)澤電子攜手Molex舉辦光纖布線解決方案在線研討會
- 貿(mào)澤開售Skyworks Solutions的高科技陶瓷帶通濾波器
- 2022年中國機器人諧波減速機行業(yè)發(fā)展現(xiàn)狀及市場規(guī)模分析
- 四大機器人品牌產(chǎn)品橫評,看你心儀那款?