目錄
一、初識(shí)RTC
1.簡(jiǎn)介
2.特性
3.后備寄存器和RTC寄存器特性
二、RTC組成
1.相關(guān)寄存器
(1)控制寄存器高位(RTC_CRH)
(2)控制寄存器低位(RTC_CRL)
(3)預(yù)分頻裝載寄存器高位(RTC_PRLH)
(4)預(yù)分頻裝載寄存器低位(RTC_PRLL)
(5)計(jì)數(shù)器寄存器高位(RTC_CNTH)
(6)計(jì)數(shù)器寄存器低位(RTC_CNTL)
(7)電源控制寄存器(PWR_CR)
(8)APB1 外設(shè)時(shí)鐘使能寄存器(RCC_APB1ENR)
(9)備份域控制寄存器(RCC_BDCR)
2.RTC結(jié)構(gòu)
3.RTC基本配置步驟
4.RTC系統(tǒng)配置流程描述
三、RTC驅(qū)動(dòng)程序
一、初識(shí)RTC
1.簡(jiǎn)介
????????實(shí)時(shí)時(shí)鐘是一個(gè)獨(dú)立的定時(shí)器。RTC模塊擁有一組連續(xù)計(jì)數(shù)的計(jì)數(shù)器,在相應(yīng)軟件配置下,可提供時(shí)鐘日歷的功能,計(jì)數(shù)頻率常為秒。修改計(jì)數(shù)器的值可以重新設(shè)置系統(tǒng)當(dāng)前的時(shí)間和日期。
2.特性
(1)32位的可編程計(jì)數(shù)器,可用于較長(zhǎng)時(shí)間段的測(cè)量
(2)能在MCU掉電后運(yùn)行
(3) 低功耗
3.后備寄存器和RTC寄存器特性
(1)部分寄存器寫(xiě)保護(hù):RTC_PRL、RTC_ALR、RTC_CNT和RTC_DIV寄存器不會(huì)被系統(tǒng)復(fù)位。
(2)數(shù)據(jù)存儲(chǔ)功能:RTC和后備寄存器不會(huì)被系統(tǒng)或電源復(fù)位源復(fù)位;當(dāng)從待機(jī)模式喚醒時(shí),也不會(huì)被復(fù)位。后備寄存器可用于保存掉電時(shí)的數(shù)據(jù)。
(3)獨(dú)立工作:RTC和后備寄存器通過(guò)一個(gè)開(kāi)關(guān)供電,在VDD有效時(shí)該開(kāi)關(guān)選擇VDD供電,否則由VBAT引腳供電。在VBAT供電時(shí)仍可繼續(xù)工作。
(4)2個(gè)獨(dú)立復(fù)位:APB1接口由系統(tǒng)復(fù)位;RTC核心只能由后備域復(fù)位;
二、RTC組成
1.相關(guān)寄存器
(1)控制寄存器高位(RTC_CRH)
位2(OWIE):允許溢出中斷位。
位1(ALRIE):允許鬧鐘中斷。
位0(SECIE):允許秒中斷。
(2)控制寄存器低位(RTC_CRL)
位5(RTOFF):RTC操作關(guān)閉。(指示對(duì)其寄存器進(jìn)行的最后一次操作的狀態(tài),即指示操作是否完成)
位4(CNF):配置標(biāo)志。(只有當(dāng)此位在被置’1’并重新由軟件清’0’后,從而允許向RTC_CNT、RTC_ALR或RTC_PRL寄存器寫(xiě)入數(shù)據(jù))
(3)預(yù)分頻裝載寄存器高位(RTC_PRLH)
(4)預(yù)分頻裝載寄存器低位(RTC_PRLL)
(5)計(jì)數(shù)器寄存器高位(RTC_CNTH)
(6)計(jì)數(shù)器寄存器低位(RTC_CNTL)
(7)電源控制寄存器(PWR_CR)
(8)APB1 外設(shè)時(shí)鐘使能寄存器(RCC_APB1ENR)
位28(PWREN):電源接口時(shí)鐘使能。
位27(BKPEN):備份接口時(shí)鐘使能。
(9)備份域控制寄存器(RCC_BDCR)
位15(RTCEN):RTC時(shí)鐘使能。
位9:8(RTCSEL):RTC時(shí)鐘源選擇。
位 0(SEON):外部低速振蕩器使能。
2.RTC結(jié)構(gòu)
????????RTC由兩個(gè)主要部分組成。第一部分(APB1接口)用來(lái)和APB1總線相連。另一部分(RTC核心)由一組可編程計(jì)數(shù)器組成,分成兩個(gè)主要模塊。第一個(gè)模塊是RTC的預(yù)分頻模塊(可編程產(chǎn)生最長(zhǎng)為1秒的RTC時(shí)間基準(zhǔn)TR_CLK)。第二個(gè)模塊是一個(gè)32位的可編程計(jì)數(shù)器,可被初始化為當(dāng)前的系統(tǒng)時(shí)間。
補(bǔ)充:
(1)RTC可以選擇三種RTC的時(shí)鐘源:
????????①HSE時(shí)鐘除以128。
????????②LSE振蕩器時(shí)鐘。
????????③LSI振蕩器時(shí)鐘。
(2)RTC的APB1單元還包含一組16位寄存器,可通過(guò)APB1,總線對(duì)其進(jìn)行讀寫(xiě)操作。
(3)APB1接口由APB1總線時(shí)鐘驅(qū)動(dòng),用來(lái)與APB1總線接口。
(4)RTC的預(yù)分頻模塊包含的是一個(gè)20位的可編程分頻器(RTC預(yù)分頻器),分頻系數(shù)最高為2的20次方。
(5)RTC有3個(gè)專門的可屏蔽中斷:
????????①鬧鐘中斷:用來(lái)產(chǎn)生一個(gè)軟件可編程的鬧鐘中斷。
????????②秒中斷:用來(lái)產(chǎn)生一個(gè)可編程的周期性中斷信號(hào)(最長(zhǎng)可達(dá)1秒)。
????????③溢出中斷:指示內(nèi)部可編程計(jì)數(shù)器溢出并回轉(zhuǎn)為0的狀態(tài)。
(6)如果在RTC_CR寄存器中設(shè)置了相應(yīng)的允許位,則在每個(gè)TR_CLK周期中RTC產(chǎn)生一個(gè)中斷(秒中斷)。
(7)系統(tǒng)時(shí)間按TR_CLK周期累加并與存儲(chǔ)在RTC_ALR寄存器中的可編程時(shí)間相比較,如果RTC_CR控制寄存器中設(shè)置了相應(yīng)允許位,比較匹配時(shí)將產(chǎn)生一個(gè)中斷(鬧鐘中斷)。
3.RTC基本配置步驟
(1)使能對(duì)RTC的訪問(wèn):使能PWR和BKP時(shí)鐘(RCC_APB1ENR)、使能對(duì)后備寄存器和RTC(PWR_CR)的訪問(wèn)權(quán)限
(2)設(shè)置RTC時(shí)鐘源:激活LSE,設(shè)置RTC的計(jì)數(shù)時(shí)鐘源為L(zhǎng)SE。(RCC_BDCR)
(3)進(jìn)入配置模式:等待 RTOFF位為1,設(shè)置CNF位為1。(RTC_CRL)
(4)設(shè)置RTC寄存器:設(shè)置分頻值、計(jì)數(shù)值等(RTC_PRL),一般先只設(shè)置分頻值,CNT的設(shè)置獨(dú)立。
(5)退出配置模式:清除CNF位,等待RTOFF 位為1(RTC_CRL)即配置完成。
4.RTC系統(tǒng)配置流程描述
(1)查詢RTOFF位,直到RTOFF的值變?yōu)?。
(2)置CNF值為1,進(jìn)入配置模式。
(3)對(duì)一個(gè)或多個(gè)RTC寄存器進(jìn)行寫(xiě)操作。
(4)清除CNF標(biāo)志位,退出配置模式。
(5)查詢RTOFF,直至RTOFF位變?yōu)?/strong>’1‘以確認(rèn)寫(xiě)操作已經(jīng)完成。
三、RTC驅(qū)動(dòng)程序
1.使能電源時(shí)鐘并使能后備域訪問(wèn):__HAL_RCC_PWR_CLK_ENABLE(使能電源時(shí)鐘)、__HAL_RCC_BKP_CLK_ENABLE (使能備份時(shí)鐘)、HAL_PWR_EnableBkUpAccess(使能備份訪問(wèn))
2.開(kāi)啟LSE / 選擇RTC時(shí)鐘源 / 使能RTC時(shí)鐘:HAL_RCC_OscConfig(開(kāi)啟LSE)、HAL_RCCEx_PeriphCLKConfig (選擇RTC時(shí)鐘源)、__HAL_RCC_RTC_ENABLE (使能RTC時(shí)鐘)
3.初始化RTC,設(shè)置分頻值以及工作參數(shù):HAL_RTC_Init(初始化RTC)、HAL_RTC_MspInit(完成RTC底層初始化工作)
4.設(shè)置RTC的日期和時(shí)間
5.獲取RTC當(dāng)前日期和時(shí)間
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-825712.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-825712.html
到了這里,關(guān)于嵌入式——實(shí)時(shí)時(shí)鐘(RTC)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!