0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

RTC實(shí)時(shí)時(shí)鐘特征與原理

GReq_mcu168 ? 來(lái)源:玩轉(zhuǎn)單片機(jī) ? 2019-12-08 10:36 ? 次閱讀

一、RTC實(shí)時(shí)時(shí)鐘特征與原理

RTC (Real Time Clock):實(shí)時(shí)時(shí)鐘 實(shí)時(shí)時(shí)鐘是一個(gè)獨(dú)立的定時(shí)器。 RTC模塊擁有一組連續(xù)計(jì)數(shù)的計(jì)數(shù)器,在相應(yīng)軟件配置下,可提供時(shí)鐘日歷的功能。修改計(jì)數(shù)器的值可以重新設(shè)置系統(tǒng)當(dāng)前的時(shí)間和日期。 RTC模塊和時(shí)鐘配置系統(tǒng)(RCC_BDCR寄存器)處于后備區(qū)域,即在系統(tǒng)復(fù)位或從待機(jī)模式喚醒后, RTC的設(shè)置和時(shí)間維持不變。 系統(tǒng)復(fù)位后,對(duì)后備寄存器和RTC的訪問(wèn)被禁止,這是為了防止對(duì)后備區(qū)域(BKP)的意外寫(xiě)操作。執(zhí)行以下操作將使能對(duì)后備寄存器和RTC的訪問(wèn): ● 設(shè)置寄存器RCC_APB1ENR的PWREN和BKPEN位,使能電源和后備接口時(shí)鐘 ● 設(shè)置寄存器PWR_CR的DBP位,使能對(duì)后備寄存器和RTC的訪問(wèn)。

RTC特征 可編程的預(yù)分頻系數(shù):分頻系數(shù)最高為220。 ● 32位的可編程計(jì)數(shù)器,可用于較長(zhǎng)時(shí)間段的測(cè)量。 ● 2個(gè)分離的時(shí)鐘:用于APB1接口的PCLK1和RTC時(shí)鐘(RTC時(shí)鐘的頻率必須小于PCLK1時(shí)鐘 頻率的四分之一以上)。 ● 可以選擇以下三種RTC的時(shí)鐘源: ─ HSE時(shí)鐘除以128; ─ LSE振蕩器時(shí)鐘; ─ LSI振蕩器時(shí)鐘(詳見(jiàn)6.2.8節(jié)RTC時(shí)鐘)。 ● 2個(gè)獨(dú)立的復(fù)位類型: ─ APB1接口由系統(tǒng)復(fù)位; ─ RTC核心(預(yù)分頻器、鬧鐘、計(jì)數(shù)器和分頻器)只能由后備域復(fù)位(詳見(jiàn)6.1.3節(jié))。 ● 3個(gè)專門(mén)的可屏蔽中斷: ─ 鬧鐘中斷,用來(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)。

二、RTC由兩部分組成 APB1接口: 用來(lái)和APB1總線相連。通過(guò)APB1接口可以訪問(wèn)RTC的相關(guān)寄存器(預(yù)分頻值,計(jì)數(shù)器值,鬧鐘值)。 RTC核心: 由一組可編程計(jì)數(shù)器組成。分兩個(gè)主要模塊。 第一個(gè)是RTC預(yù)分頻模塊,它可以編程產(chǎn)生最長(zhǎng)1秒的RTC時(shí)間基TR_CLK。如果設(shè)置了秒中斷允許位,可以產(chǎn)生秒中斷。 第二個(gè)是32位的可編程計(jì)數(shù)器,可被初始化為當(dāng)前時(shí)間。系統(tǒng)時(shí)間按TR_CLK周期累加并與存儲(chǔ)在RTC_ALR寄存器中的可編程時(shí)間相比,當(dāng)匹配時(shí)候如果設(shè)置了鬧鐘中斷允許位,可以產(chǎn)生鬧鐘中斷。

RTC內(nèi)核完全獨(dú)立于APB1接口,軟件通過(guò)APB1接口對(duì)RTC相關(guān)寄存器訪問(wèn)。但是相關(guān)寄存器只在RTC APB1時(shí)鐘進(jìn)行重新同步的RTC時(shí)鐘的上升沿被更新。所以軟件必須先等待寄存器同步標(biāo)志位(RTC_CRL的RSF位)被硬件置1才讀。

三、RTC時(shí)鐘源 首先講一下時(shí)鐘源:

三種不同的時(shí)鐘源可被用來(lái)驅(qū)動(dòng)系統(tǒng)時(shí)鐘(SYSCLK): ● HSI振蕩器時(shí)鐘 ● HSE振蕩器時(shí)鐘 ● PLL時(shí)鐘 這些設(shè)備有以下2種二級(jí)時(shí)鐘源: ● 40kHz低速內(nèi)部RC,可以用于驅(qū)動(dòng)獨(dú)立看門(mén)狗和通過(guò)程序選擇驅(qū)動(dòng)RTC。 RTC用于從停機(jī)/待機(jī)模式下自動(dòng)喚醒系統(tǒng)。 ● 32.768kHz低速外部晶體也可用來(lái)通過(guò)程序選擇驅(qū)動(dòng)RTC(RTCCLK)。

當(dāng)不被使用時(shí),任一個(gè)時(shí)鐘源都可被獨(dú)立地啟動(dòng)或關(guān)閉,由此優(yōu)化系統(tǒng)功耗。 用戶可通過(guò)多個(gè)預(yù)分頻器配置AHB、高速APB(APB2)和低速APB(APB1)域的頻率。 AHB和APB2域的最大頻率是72MHz。 APB1域的最大允許頻率是36MHz。 SDIO接口的時(shí)鐘頻率固定為HCLK/2。 RCC通過(guò)AHB時(shí)鐘(HCLK)8分頻后作為Cortex系統(tǒng)定時(shí)器(SysTick)的外部時(shí)鐘。通過(guò)對(duì)SysTick控制與狀態(tài)寄存器的設(shè)置,可選擇上述時(shí)鐘或Cortex(HCLK)時(shí)鐘作為SysTick時(shí)鐘。 ADC時(shí)鐘由高速APB2時(shí)鐘經(jīng)2、 4、 6或8分頻后獲得。 定時(shí)器時(shí)鐘頻率分配由硬件按以下2種情況自動(dòng)設(shè)置:

如果相應(yīng)的APB預(yù)分頻系數(shù)是1,定時(shí)器的時(shí)鐘頻率與所在APB總線頻率一致。 否則,定時(shí)器的時(shí)鐘頻率被設(shè)為與其相連的APB總線頻率的2倍。 如上圖,有五個(gè)時(shí)鐘源,為HSI、HSE、LSI、LSE、PLL。 接下來(lái)我們一一看一下:

HSE時(shí)鐘

**高速外部時(shí)鐘信號(hào)(HSE)**由以下兩種時(shí)鐘源產(chǎn)生: ● HSE外部晶體/陶瓷諧振器 ● HSE用戶外部時(shí)鐘 為了減少時(shí)鐘輸出的失真和縮短啟動(dòng)穩(wěn)定時(shí)間,晶體/陶瓷諧振器和負(fù)載電容器必須盡可能地靠 近振蕩器引腳。負(fù)載電容值必須根據(jù)所選擇的振蕩器來(lái)調(diào)整。

外部時(shí)鐘源(HSE旁路) 在這個(gè)模式里,必須提供外部時(shí)鐘。它的頻率最高可達(dá)25MHz。用戶可通過(guò)設(shè)置在時(shí)鐘控制寄存器中的HSEBYP和HSEON位來(lái)選擇這一模式。外部時(shí)鐘信號(hào)(50%占空比的方波、正弦波或三角波)必須連到SOC_IN引腳,同時(shí)保證OSC_OUT引腳懸空。見(jiàn)圖9。 外部晶體/陶瓷諧振器(HSE晶體) **4~16Mz外部振蕩器可為系統(tǒng)提供更為精確的主時(shí)鐘。**相關(guān)的硬件配置可參考圖9,進(jìn)一步信息可參考數(shù)據(jù)手冊(cè)的電氣特性部分。 在時(shí)鐘控制寄存器RCC_CR中的HSERDY位用來(lái)指示高速外部振蕩器是否穩(wěn)定。在啟動(dòng)時(shí),直到這一位被硬件置’1’,時(shí)鐘才被釋放出來(lái)。如果在時(shí)鐘中斷寄存器RCC_CIR中允許產(chǎn)生中斷,將會(huì)產(chǎn)生相應(yīng)中斷。 HSE晶體可以通過(guò)設(shè)置時(shí)鐘控制寄存器里RCC_CR中的HSEON位被啟動(dòng)和關(guān)閉。

HSI時(shí)鐘

HSI時(shí)鐘信號(hào)由內(nèi)部8MHz的RC振蕩器產(chǎn)生,可直接作為系統(tǒng)時(shí)鐘或在2分頻后作為PLL輸入。 HSI RC振蕩器能夠在不需要任何外部器件的條件下提供系統(tǒng)時(shí)鐘。它的啟動(dòng)時(shí)間比HSE晶體振蕩器短。然而,即使在校準(zhǔn)之后它的時(shí)鐘頻率精度仍較差。 校準(zhǔn) 制造工藝決定了不同芯片的RC振蕩器頻率會(huì)不同,這就是為什么每個(gè)芯片的HSI時(shí)鐘頻率在出廠前已經(jīng)被ST校準(zhǔn)到1%(25°C)的原因。系統(tǒng)復(fù)位時(shí),工廠校準(zhǔn)值被裝載到時(shí)鐘控制寄存器的HSICAL[7:0]位。 如果用戶的應(yīng)用基于不同的電壓或環(huán)境溫度,這將會(huì)影響RC振蕩器的精度。可以通過(guò)時(shí)鐘控制寄存器里的HSITRIM[4:0]位來(lái)調(diào)整HSI頻率。 時(shí)鐘控制寄存器中的HSIRDY位用來(lái)指示HSI RC振蕩器是否穩(wěn)定。在時(shí)鐘啟動(dòng)過(guò)程中,直到這一位被硬件置’1’, HSI RC輸出時(shí)鐘才被釋放。 HSI RC可由時(shí)鐘控制寄存器中的HSION位來(lái)啟動(dòng)和關(guān)閉。 如果HSE晶體振蕩器失效, HSI時(shí)鐘會(huì)被作為備用時(shí)鐘源。

PLL

內(nèi)部PLL可以用來(lái)倍頻HSI RC的輸出時(shí)鐘或HSE晶體輸出時(shí)鐘。 PLL的設(shè)置(選擇HIS振蕩器除2或HSE振蕩器為PLL的輸入時(shí)鐘,和選擇倍頻因子)必須在其被激活前完成。一旦PLL被激活,這些參數(shù)就不能被改動(dòng)。 如果PLL中斷在時(shí)鐘中斷寄存器里被允許,當(dāng)PLL準(zhǔn)備就緒時(shí),可產(chǎn)生中斷申請(qǐng)。 如果需要在應(yīng)用中使用USB接口, PLL必須被設(shè)置為輸出48或72MHZ時(shí)鐘,用于提供48MHz的USBCLK時(shí)鐘。

LSE時(shí)鐘

**LSE晶體是一個(gè)32.768kHz的低速外部晶體或陶瓷諧振器。**它為實(shí)時(shí)時(shí)鐘或者其他定時(shí)功能提供一個(gè)低功耗且精確的時(shí)鐘源。 LSE晶體通過(guò)在備份域控制寄存器(RCC_BDCR)里的LSEON位啟動(dòng)和關(guān)閉。 在備份域控制寄存器(RCC_BDCR)里的LSERDY指示LSE晶體振蕩是否穩(wěn)定。在啟動(dòng)階段,直到這個(gè)位被硬件置’1’后, LSE時(shí)鐘信號(hào)才被釋放出來(lái)。如果在時(shí)鐘中斷寄存器里被允許,可產(chǎn)生中斷申請(qǐng)。 外部時(shí)鐘源(LSE旁路) 在這個(gè)模式里必須提供一個(gè)32.768kHz頻率的外部時(shí)鐘源。你可以通過(guò)設(shè)置在備份域控制寄存器(RCC_BDCR)里的LSEBYP和LSEON位來(lái)選擇這個(gè)模式。具有50%占空比的外部時(shí)鐘信號(hào)(方波、正弦波或三角波)必須連到OSC32_IN引腳,同時(shí)保證OSC32_OUT引腳懸空,見(jiàn)圖9。

LSI時(shí)鐘

LSI RC擔(dān)當(dāng)一個(gè)低功耗時(shí)鐘源的角色,它可以在停機(jī)和待機(jī)模式下保持運(yùn)行,為獨(dú)立看門(mén)狗和自動(dòng)喚醒單元提供時(shí)鐘。 **LSI時(shí)鐘頻率大約40kHz(在30kHz和60kHz之間)。**進(jìn)一步信息請(qǐng)參考數(shù)據(jù)手冊(cè)中有關(guān)電氣特性部分。 LSI RC可以通過(guò)控制/狀態(tài)寄存器(RCC_CSR)里的LSION位來(lái)啟動(dòng)或關(guān)閉。 在控制/狀態(tài)寄存器(RCC_CSR)里的LSIRDY位指示低速內(nèi)部振蕩器是否穩(wěn)定。在啟動(dòng)階段,直到這個(gè)位被硬件設(shè)置為’1’后,此時(shí)鐘才被釋放。如果在時(shí)鐘中斷寄存器(RCC_CIR)里被允許,將產(chǎn)生LSI中斷申請(qǐng)。 注意: 只有大容量和互聯(lián)型產(chǎn)品可以進(jìn)行LSI校準(zhǔn)

LSI校準(zhǔn) 可以通過(guò)校準(zhǔn)內(nèi)部低速振蕩器LSI來(lái)補(bǔ)償其頻率偏移,從而獲得精度可接受的RTC時(shí)間基數(shù),以及獨(dú)立看門(mén)狗(IWDG)的超時(shí)時(shí)間(當(dāng)這些外設(shè)以LSI為時(shí)鐘源)。 **校準(zhǔn)可以通過(guò)使用TIM5的輸入時(shí)鐘(TIM5_CLK)測(cè)量LSI時(shí)鐘頻率實(shí)現(xiàn)。**測(cè)量以HSE的精度為保證,軟件可以通過(guò)調(diào)整RTC的20位預(yù)分頻器來(lái)獲得精確的RTC時(shí)鐘基數(shù),以及通過(guò)計(jì)算得到精確的獨(dú)立看門(mén)狗(IWDG)的超時(shí)時(shí)間。 LSI校準(zhǔn)步驟如下:

打開(kāi)TIM5,設(shè)置通道4為輸入捕獲模式; 設(shè)置AFIO_MAPR的TIM5_CH4_IREMAP位為’1’,在內(nèi)部把LSI連接到TIM5的通道4; 通過(guò)TIM5的捕獲/比較4事件或者中斷來(lái)測(cè)量LSI時(shí)鐘頻率; 根據(jù)測(cè)量結(jié)果和期望的RTC時(shí)間基數(shù)和獨(dú)立看門(mén)狗的超時(shí)時(shí)間,設(shè)置20位預(yù)分頻器。 四、RTC時(shí)鐘 **通 過(guò) 設(shè) 置 備 份 域 控 制 寄 存 器 (RCC_BDCR) 里 的 RTCSEL[1:0] 位 , RTCCLK 時(shí)鐘源可以由HSE/128、LSE或LSI時(shí)鐘提供。**除非備份域復(fù)位,此選擇不能被改變。 LSE時(shí)鐘在備份域里,但HSE和LSI時(shí)鐘不是。因此: ● 如果LSE被選為RTC時(shí)鐘: ─ 只要VBAT維持供電,盡管VDD供電被切斷, RTC仍繼續(xù)工作。 ● 如果LSI被選為自動(dòng)喚醒單元(AWU)時(shí)鐘: ─ 如果VDD供電被切斷, AWU狀態(tài)不能被保證。有關(guān)LSI校準(zhǔn),詳見(jiàn)6.2.5節(jié)LSI時(shí)鐘。 ● 如果HSE時(shí)鐘128分頻后作為RTC時(shí)鐘: ─ 如果VDD供電被切斷或內(nèi)部電壓調(diào)壓器被關(guān)閉(1.8V域的供電被切斷),則RTC狀態(tài)不確定。 ─ 必須設(shè)置電源控制寄存器(見(jiàn)4.4.1節(jié))的DPB位(取消后備區(qū)域的寫(xiě)保護(hù))為’1’。

五、RTC寄存器 上面都是從STM32中文手冊(cè)里摘取的。大概了解一下RTC和時(shí)鐘。 不過(guò)講的有點(diǎn)扯,里面有多好寄存器,不知道是干啥的。接下來(lái)重點(diǎn)看一下這些寄存器。

RTC控制寄存器高位(RTC_CRH)

RTC控制寄存器低位(RTC_CRL)

①修改CRH/CRL寄存器,必須先判斷RSF位,確定已經(jīng)同步。 ②修改CNT,ALR,PRL的時(shí)候,必須先配置CNF位進(jìn)入配置模式,修改完之后,設(shè)置CNF位為0退出配置模式 ③同時(shí)在對(duì)RTC相關(guān)寄存器寫(xiě)操作之前,必須判斷上一次寫(xiě)操作已經(jīng)結(jié)束,也就是判斷RTOFF位是否置位。

RTC預(yù)分頻裝載寄存器(RTC_PRLH/RTC_PRLL) 預(yù)分頻裝載寄存器用來(lái)保存RTC預(yù)分頻器的周期計(jì)數(shù)值。它們受RTC_CR寄存器的RTOFF位保護(hù),僅當(dāng)RTOFF值為’1’時(shí)允許進(jìn)行寫(xiě)操作。

RTC預(yù)分頻器余數(shù)寄存器(RTC_DIVH / RTC_DIVL)

RTC計(jì)數(shù)器寄存器 (RTC_CNTH / RTC_CNTL)

RTC鬧鐘寄存器(RTC_ALRH/RTC_ALRL)

配置RTC寄存器 必須設(shè)置RTC_CRL 寄 存 器 中 的CNF位 , 使RTC進(jìn)入配置模式后 , 才能寫(xiě) 入RTC_PRL、RTC_CNT、 RTC_ALR寄存器。 另外,對(duì)RTC任何寄存器的寫(xiě)操作,都必須在前一次寫(xiě)操作結(jié)束后進(jìn)行。可以通過(guò)查詢RTC_CR寄存器中的RTOFF狀態(tài)位,判斷RTC寄存器是否處于更新中。僅當(dāng)RTOFF狀態(tài)位是’1’時(shí),才可以寫(xiě)入RTC寄存器。 配置過(guò)程:

查詢RTOFF位,直到RTOFF的值變?yōu)椤?’ 置CNF值為1,進(jìn)入配置模式 對(duì)一個(gè)或多個(gè)RTC寄存器進(jìn)行寫(xiě)操作 清除CNF標(biāo)志位,退出配置模式 查詢RTOFF,直至RTOFF位變?yōu)椤?’以確認(rèn)寫(xiě)操作已經(jīng)完成。 僅當(dāng)CNF標(biāo)志位被清除時(shí),寫(xiě)操作才能進(jìn)行,這個(gè)過(guò)程至少需要3個(gè)RTCCLK周期。 讀RTC寄存器 RTC核完全獨(dú)立于RTC APB1接口。 軟件通過(guò)APB1接口訪問(wèn)RTC的預(yù)分頻值、 計(jì)數(shù)器值和鬧鐘值。但是,相關(guān)的可讀寄存器只在與RTC APB1時(shí)鐘進(jìn)行重新同步的RTC時(shí)鐘的上升沿被更新。 RTC標(biāo)志也是如此的。 這意味著,如果APB1接口曾經(jīng)被關(guān)閉,而讀操作又是在剛剛重新開(kāi)啟APB1之后,則在第一次的內(nèi)部寄存器更新之前,從APB1上讀出的RTC寄存器數(shù)值可能被破壞了(通常讀到0)。下述幾種 情況下能夠發(fā)生這種情形: ● 發(fā)生系統(tǒng)復(fù)位或電源復(fù)位 ● 系統(tǒng)剛從待機(jī)模式喚醒(參見(jiàn)第4.3節(jié): 低功耗模式)。 ● 系統(tǒng)剛從停機(jī)模式喚醒(參見(jiàn)第4.3節(jié): 低功耗模式)。 所有以上情況中, APB1接口被禁止時(shí)(復(fù)位、無(wú)時(shí)鐘或斷電)RTC核仍保持運(yùn)行狀態(tài)。 因此,若在讀取RTC寄存器時(shí), RTC的APB1接口曾經(jīng)處于禁止?fàn)顟B(tài),則軟件首先必須等待RTC_CRL寄存器中的RSF位(寄存器同步標(biāo)志)被硬件置’1’。 注: RTC的 APB1接口不受WFI和WFE等低功耗模式的影響

六、RTC相關(guān)庫(kù)函數(shù)講解 庫(kù)函數(shù)所在文件:stm32f10x_rtc.c / stm32f10x_rtc.h

RTC時(shí)鐘源和時(shí)鐘操作函數(shù): void RCC_RTCCLKConfig(uint32_t CLKSource);//時(shí)鐘源選擇 void RCC_RTCCLKCmd(FunctionalState NewState)//時(shí)鐘使能

RTC配置函數(shù)(預(yù)分頻,計(jì)數(shù)值: void RTC_SetPrescaler(uint32_t PrescalerValue);//預(yù)分頻配置:PRLH/PRLL void RTC_SetCounter(uint32_t CounterValue);//設(shè)置計(jì)數(shù)器值:CNTH/CNTL void RTC_SetAlarm(uint32_t AlarmValue);//鬧鐘設(shè)置:ALRH/ALRL

RTC中斷設(shè)置函數(shù): void RTC_ITConfig(uint16_t RTC_IT, FunctionalState NewState);//CRH RTC允許配置和退出配置函數(shù): void RTC_EnterConfigMode(void);//允許RTC配置 :CRL位 CNF void RTC_ExitConfigMode(void);//退出配置模式:CRL位 CNF

同步函數(shù): void RTC_WaitForLastTask(void);//等待上次操作完成:CRL位RTOFF void RTC_WaitForSynchro(void);//等待時(shí)鐘同步:CRL位RSF

相關(guān)狀態(tài)位獲取清除函數(shù): FlagStatus RTC_GetFlagStatus(uint16_t RTC_FLAG); void RTC_ClearFlag(uint16_t RTC_FLAG); ITStatus RTC_GetITStatus(uint16_t RTC_IT); void RTC_ClearITPendingBit(uint16_t RTC_IT);

其他相關(guān)函數(shù)(BKP等) PWR_BackupAccessCmd();//BKP后備區(qū)域訪問(wèn)使能 RCC_APB1PeriphClockCmd();//使能PWR和BKP時(shí)鐘 RCC_LSEConfig();//開(kāi)啟LSE,RTC選擇LSE作為時(shí)鐘源 PWR_BackupAccessCmd();//BKP后備區(qū)域訪問(wèn)使能 uint16_t BKP_ReadBackupRegister(uint16_t BKP_DR);//讀BKP寄存器 void BKP_WriteBackupRegister(uint16_t BKP_DR, uint16_t Data);//寫(xiě)B(tài)KP

七、RTC配置一般步驟 1) 使能電源時(shí)鐘和備份區(qū)域時(shí)鐘。 前面已經(jīng)介紹了,我們要訪問(wèn) RTC 和備份區(qū)域就必須先使能電源時(shí)鐘和備份區(qū)域時(shí)鐘。

RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE); 2) 取消備份區(qū)寫(xiě)保護(hù)。 要向備份區(qū)域?qū)懭霐?shù)據(jù),就要先取消備份區(qū)域?qū)懕Wo(hù)(寫(xiě)保護(hù)在每次硬復(fù)位之后被使能),否則是無(wú)法向備份區(qū)域?qū)懭霐?shù)據(jù)的。我們需要用到向備份區(qū)域?qū)懭胍粋€(gè)字節(jié),來(lái)標(biāo)記時(shí)鐘已經(jīng)配置過(guò)了,這樣避免每次復(fù)位之后重新配置時(shí)鐘。 取消備份區(qū)域?qū)懕Wo(hù)的庫(kù)函數(shù)實(shí)現(xiàn)方法是:

PWR_BackupAccessCmd(ENABLE); //使能 RTC 和后備寄存器訪問(wèn) 3) 復(fù)位備份區(qū)域,開(kāi)啟外部低速振蕩器。 在取消備份區(qū)域?qū)懕Wo(hù)之后,我們可以先對(duì)這個(gè)區(qū)域復(fù)位,以清除前面的設(shè)置,當(dāng)然這個(gè)操作不要每次都執(zhí)行,因?yàn)閭浞輩^(qū)域的復(fù)位將導(dǎo)致之前存在的數(shù)據(jù)丟失,所以要不要復(fù)位,要看情況而定。然后我們使能外部低速振蕩器,注意這里一般要先判斷 RCC_BDCR 的 LSERDY位來(lái)確定低速振蕩器已經(jīng)就緒了才開(kāi)始下面的操作。 備份區(qū)域復(fù)位的函數(shù)是:

BKP_DeInit();//復(fù)位備份區(qū)域 開(kāi)啟外部低速振蕩器的函數(shù)是:

RCC_LSEConfig(RCC_LSE_ON);// 開(kāi)啟外部低速振蕩器 4) 選擇 RTC 時(shí)鐘,并使能。 這里我們將通過(guò) RCC_BDCR 的 RTCSEL 來(lái)選擇選擇外部 LSI 作為 RTC 的時(shí)鐘。然后通過(guò)RTCEN 位使能 RTC 時(shí)鐘。庫(kù)函數(shù)中,選擇 RTC 時(shí)鐘的函數(shù)是:

RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); //選擇 LSE 作為 RTC 時(shí)鐘 對(duì)于 RTC 時(shí)鐘的選擇,還有 RCC_RTCCLKSource_LSI 和RCC_RTCCLKSource_HSE_Div128 這兩個(gè),顧名思義,前者為 LSI,后者為 HSE 的 128 分頻,這在時(shí)鐘系統(tǒng)章節(jié)有講解過(guò)。 使能 RTC 時(shí)鐘的函數(shù)是:

RCC_RTCCLKCmd(ENABLE); //使能 RTC 時(shí)鐘 5) 設(shè)置 RTC 的分頻,以及配置 RTC 時(shí)鐘。 在開(kāi)啟了 RTC 時(shí)鐘之后,我們要做的就是設(shè)置 RTC 時(shí)鐘的分頻數(shù),通過(guò) RTC_PRLH 和RTC_PRLL 來(lái)設(shè)置,然后等待 RTC 寄存器操作完成,并同步之后,設(shè)置秒鐘中斷。然后設(shè)置RTC 的允許配置位(RTC_CRH 的 CNF 位),設(shè)置時(shí)間(其實(shí)就是設(shè)置 RTC_CNTH 和 RTC_CNTL兩個(gè)寄存器)。 下面我們一一這些步驟用到的庫(kù)函數(shù):在進(jìn)行 RTC 配置之前首先要打開(kāi)允許配置位(CNF),庫(kù)函數(shù)是:

RTC_EnterConfigMode();/// 允許配置 在配置完成之后,千萬(wàn)別忘記更新配置同時(shí)退出配置模式,函數(shù)是:

RTC_ExitConfigMode();//退出配置模式, 更新配置 設(shè)置 RTC 時(shí)鐘分頻數(shù), 庫(kù)函數(shù)是:

void RTC_SetPrescaler(uint32_t PrescalerValue); 這個(gè)函數(shù)只有一個(gè)入口參數(shù),就是 RTC 時(shí)鐘的分頻數(shù),很好理解。 然后是設(shè)置秒中斷允許, RTC 使能中斷的函數(shù)是:

void RTC_ITConfig(uint16_t RTC_IT, FunctionalState NewState); 這個(gè)函數(shù)的第一個(gè)參數(shù)是設(shè)置秒中斷類型,這些通過(guò)宏定義定義的。 對(duì)于使能秒中斷方法是: RTC_ITConfig(RTC_IT_SEC, ENABLE); //使能 RTC 秒中斷

八、RTC程序 這篇文章復(fù)制粘貼了這么多,感覺(jué)不到一絲有用的東西。算了,還是看一下,程序是怎么寫(xiě)的吧。

RTC_Init

RTC_Set

RTC_Get

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 計(jì)數(shù)器
    +關(guān)注

    關(guān)注

    32

    文章

    2248

    瀏覽量

    94197
  • 時(shí)鐘
    +關(guān)注

    關(guān)注

    10

    文章

    1704

    瀏覽量

    131213
  • RTC
    RTC
    +關(guān)注

    關(guān)注

    2

    文章

    519

    瀏覽量

    66151

原文標(biāo)題:STM32開(kāi)發(fā) -- RTC詳解

文章出處:【微信號(hào):mcu168,微信公眾號(hào):硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    實(shí)時(shí)時(shí)鐘芯片RTC

    FRTC8563是NYFEA徠飛公司推出的一款實(shí)時(shí)時(shí)鐘芯片,采用SOP-8封裝形式。這種封裝形式具有體積小、引腳間距小、便于集成等特點(diǎn),使得FRTC8563能夠方便地應(yīng)用于各種電子設(shè)備中
    的頭像 發(fā)表于 10-22 11:33 ?102次閱讀

    使用實(shí)時(shí)時(shí)鐘庫(kù)

    電子發(fā)燒友網(wǎng)站提供《使用實(shí)時(shí)時(shí)鐘庫(kù).pdf》資料免費(fèi)下載
    發(fā)表于 10-22 10:09 ?0次下載
    使用<b class='flag-5'>實(shí)時(shí)時(shí)鐘</b>庫(kù)

    適用于智能門(mén)鎖的低功耗RTC實(shí)時(shí)時(shí)鐘模塊RX8010SJ

    隨著智能家居的普及,智能門(mén)鎖已成為保障家庭安全的重要設(shè)備。作為智能門(mén)鎖的關(guān)鍵組件之一,實(shí)時(shí)時(shí)鐘RTC)模塊負(fù)責(zé)提供準(zhǔn)確的時(shí)間基準(zhǔn),確保門(mén)鎖的各種時(shí)間相關(guān)功能正常運(yùn)行。一款適用于智能門(mén)鎖的低功耗
    的頭像 發(fā)表于 08-28 14:29 ?237次閱讀
    適用于智能門(mén)鎖的低功耗<b class='flag-5'>RTC</b><b class='flag-5'>實(shí)時(shí)時(shí)鐘</b>模塊RX8010SJ

    bq32000實(shí)時(shí)時(shí)鐘(RTC)數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《bq32000實(shí)時(shí)時(shí)鐘(RTC)數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 08-23 11:23 ?0次下載
    bq32000<b class='flag-5'>實(shí)時(shí)時(shí)鐘</b>(<b class='flag-5'>RTC</b>)數(shù)據(jù)表

    BQ32002實(shí)時(shí)時(shí)鐘(RTC)數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《BQ32002實(shí)時(shí)時(shí)鐘(RTC)數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 08-23 11:23 ?0次下載
    BQ32002<b class='flag-5'>實(shí)時(shí)時(shí)鐘</b>(<b class='flag-5'>RTC</b>)數(shù)據(jù)表

    bq3285E/L實(shí)時(shí)時(shí)鐘(RTC)數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《bq3285E/L實(shí)時(shí)時(shí)鐘(RTC)數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 08-23 11:22 ?0次下載
    bq3285E/L<b class='flag-5'>實(shí)時(shí)時(shí)鐘</b>(<b class='flag-5'>RTC</b>)數(shù)據(jù)表

    bq3285實(shí)時(shí)時(shí)鐘(RTC)數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《bq3285實(shí)時(shí)時(shí)鐘(RTC)數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 08-23 11:21 ?0次下載
    bq3285<b class='flag-5'>實(shí)時(shí)時(shí)鐘</b>(<b class='flag-5'>RTC</b>)數(shù)據(jù)表

    DP8573A實(shí)時(shí)時(shí)鐘(RTC)數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《DP8573A實(shí)時(shí)時(shí)鐘(RTC)數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 08-23 10:11 ?0次下載
    DP8573A<b class='flag-5'>實(shí)時(shí)時(shí)鐘</b>(<b class='flag-5'>RTC</b>)數(shù)據(jù)表

    TCXO RTC實(shí)時(shí)時(shí)鐘模塊的特性

    高精度實(shí)時(shí)時(shí)鐘模塊內(nèi)建TCXO數(shù)字式實(shí)時(shí)時(shí)鐘模塊的特征【序文】時(shí)間是我們?nèi)粘I钪械幕靖拍??;疖囘\(yùn)行管理、進(jìn)出場(chǎng)管理等各種處理系統(tǒng)和應(yīng)用程序按照時(shí)間信息工作。在金融、股市領(lǐng)域中,時(shí)間操縱著巨大利益
    的頭像 發(fā)表于 08-14 11:44 ?236次閱讀
    TCXO <b class='flag-5'>RTC</b><b class='flag-5'>實(shí)時(shí)時(shí)鐘</b>模塊的特性

    RTC實(shí)時(shí)時(shí)鐘的基本概念和工作原理

    在現(xiàn)代電子設(shè)備中,精確的時(shí)間管理和控制是至關(guān)重要的。為了實(shí)現(xiàn)這一功能,實(shí)時(shí)時(shí)鐘RTC, Real-Time Clock)模塊被廣泛應(yīng)用于各種設(shè)備和系統(tǒng)中。RTC模塊作為一個(gè)獨(dú)立的定時(shí)器,能夠提供
    的頭像 發(fā)表于 05-27 15:43 ?3128次閱讀

    stm8l051 RTC LSI作為實(shí)時(shí)時(shí)鐘不準(zhǔn)怎么校準(zhǔn)?

    (CLK_RTCCLKSource_LSI, CLK_RTCCLKDiv_1); CLK_PeripheralClockConfig(CLK_Peripheral_RTC, ENABLE); 現(xiàn)在以LSI作為實(shí)時(shí)時(shí)鐘,十分鐘內(nèi)快了2分鐘,分頻2后右邊慢了 請(qǐng)問(wèn)大神么 這個(gè)
    發(fā)表于 04-30 07:13

    愛(ài)普生實(shí)時(shí)時(shí)鐘模塊RTC

    愛(ài)普生是一家IC和晶體自主研發(fā)的公司,有自己的IC和晶振產(chǎn)線。所以我們能將RTC IC+晶體單元+外結(jié)電容封裝在一起,組成獨(dú)立RTC模塊。外圍不需要在接晶體和匹配電容。愛(ài)普生RTC能夠簡(jiǎn)化客戶
    發(fā)表于 04-17 11:10 ?0次下載

    基于51單片機(jī)的實(shí)時(shí)時(shí)鐘設(shè)計(jì)

    電子發(fā)燒友網(wǎng)站提供《基于51單片機(jī)的實(shí)時(shí)時(shí)鐘設(shè)計(jì).rar》資料免費(fèi)下載
    發(fā)表于 01-12 10:43 ?12次下載

    基于51單片機(jī)的實(shí)時(shí)時(shí)鐘設(shè)計(jì)

    電子發(fā)燒友網(wǎng)站提供《基于51單片機(jī)的實(shí)時(shí)時(shí)鐘設(shè)計(jì).rar》資料免費(fèi)下載
    發(fā)表于 01-02 10:15 ?41次下載

    Arduino篇—實(shí)時(shí)時(shí)鐘

    DS1307時(shí)鐘模塊:** DS1307串行實(shí)時(shí)時(shí)鐘RTC)是低功耗,全二進(jìn)制編碼的十進(jìn)制(BCD)時(shí)鐘/日歷以及56字節(jié)的NV SRAM。
    的頭像 發(fā)表于 11-01 16:49 ?1991次閱讀
    Arduino篇—<b class='flag-5'>實(shí)時(shí)時(shí)鐘</b>