那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

STM32學習筆記之RTC實時時鐘1

jf_78858299 ? 來源:TECHTIMES ? 作者:霽風AI ? 2023-05-26 14:26 ? 次閱讀

** 簡述**

STM32實時時鐘(RTC)是一個獨立的定時器。 STM32 的 RTC 模塊擁有一組連續計數的計數器,在相應軟件配置下,可提供時鐘日歷的功能。修改計數器的值可以重新設置系統當前的時間和日期。

RTC 模塊和時鐘配置系統 (RCC_BDCR 寄存器)是在后備區域,即在系統復位或從待機模式喚醒后 RTC 的設置和時間維持不變。但是在系統復位后,會自動禁止訪問后備寄存器和 RTC,以防止對后備區域 (BKP) 的意外寫操作。所以在要設置時間之前, 先要取消備份區域(BKP)寫保護。

圖片

RTC 由兩個主要部分組成(參見上圖), 第一部分(APB1 接口)用來和 APB1 總線相連。此單元還包含一組 16 位寄存器,可通過 APB1 總線對其進行讀寫操作。 APB1 接口由 APB1 總線時鐘驅動,用來與 APB1 總線連接。

另一部分 (RTC 核心) 由一組可編程計數器組成,分成兩個主要模塊。第一個模塊是 RTC 的預分頻模塊,它可編程產生 1 秒的 RTC 時間基準 TR_CLK。 RTC 的預分頻模塊包含了一個 20 位的可編程分頻器 (RTC 預分頻器)。如果在 RTC_CR 寄存器中設置了相應的允許位,則在每個TR_CLK 周期中 RTC 產生一個中斷(秒中斷)。第二個模塊是一個 32 位的可編程計數器,可被初始化為當前的系統時間,一個 32 位的時鐘計數器,按秒鐘計算,可以記錄 4294967296 秒,約合 136 年左右。

RTC 還有一個鬧鐘寄存器 RTC_ALR,用于產生鬧鐘。系統時間按 TR_CLK 周期累加并與存儲在 RTC_ALR 寄存器中的可編程時間相比較,如果 RTC_CR 控制寄存器中設置了相應允許位,比較匹配時將產生一個鬧鐘中斷。RTC 內核完全獨立于 RTC APB1 接口,而軟件是通過 APB1 接口訪問 RTC 的預分頻值、計數器值和鬧鐘值的。但是相關可讀寄存器只在 RTC APB1 時鐘進行重新同步的 RTC 時鐘的上升沿被更新, RTC 標志也是如此。這就意味著,如果 APB1 接口剛剛被開啟之后,在第一次的內部寄存器更新之前,從 APB1 上讀取的 RTC 寄存器值可能被破壞了(通常讀到 0)。因此,若在讀取 RTC 寄存器曾經被禁止的 RTC APB1 接口,軟件首先必須等待 RTC_CRL 寄存器的 RSF位(寄存器同步標志位, bit3)被硬件置 1。

2. RTC 寄存器介紹

2.1 RTC 的控制寄存器——RTC_CRH 寄存器

圖片

該寄存器用來控制中斷的。

2.2 RTC 的控制寄存器——RTC_CRL 寄存器

圖片

RTC 用到的是該寄存器的 0、 3~5 這幾個位,第 0 位是秒鐘標志位,我們在進入鬧鐘中斷的時候,通過判斷這位來決定是不是發生了秒鐘中斷。然后必須通過軟件將該位清零(寫 0)。第 3 位為寄存器同步標志位,我們在修改控制寄存器 RTC_CRH/CRL 之前,必須先判斷該位,是否已經同步了,如果沒有則等待同步,在沒同步的情況下修 RTC_CRH/CRL 的值是不行的。第 4 位為配置標位,在軟件修改 RTC_CNT/RTC_ALR/RTC_PRL 的值的時候,必須先軟件置位該位,以允許進入配置模式。第 5 位為 RTC 操作位,該位由硬件操作,軟件只讀。通過該位可以判斷上次對 RTC 寄存器的操作是否完成,如果沒有,我們必須等待上一次操作結束才能開始下一次操作。

2.3 RTC 預分頻裝載寄存器——RTC_PRLH 寄存器

這兩個寄存器用來配置 RTC 時鐘的分頻數的,比如我們使用外部 32.768K 的晶振作為時鐘的輸入頻率,那么我們要設置這兩個寄存器的值為 32767,以得到一秒鐘的計數頻率。

圖片

2.4 RTC 預分頻裝載寄存器——RTC_PRLL 寄存器

圖片

2.5 RTC 預分頻器余數寄存器——RTC_DIVH 寄存器

圖片

2.6 RTC 預分頻器余數寄存器——RTC_DIVH 寄存器

圖片

這兩個寄存器的作用就是用來獲得比秒鐘更為準確的時鐘,比如可以得到 0.1 秒,或者 0.01 秒等。該寄存器的值自減的,用于保存還需要多少時鐘周期獲得一個秒信號。在一次秒鐘更新后,由硬件重新裝載。

2.7 RTC 計數器寄存器——RTC_CNT 寄存器

該寄存器由 2 個 16 位的寄存器組成 RTC_CNTH 和 RTC_CNTL,總共 32 位,用來記錄秒鐘值(一般情況下)。在修改這個寄存器的時候要先進入配置模式。

圖片

2.8 RTC 計數器寄存器——RTC 鬧鐘寄存器

該寄存器也是由 2 個 16 位的寄存器組成 RTC_ALRH 和 RTC_ALRL。總共也是 32 位,用來標記鬧鐘產生的時間(以秒為單位),如果 RTC_CNT 的值與 RTC_ALR 的值相等,并使能了中斷的話,會產生一個鬧鐘中斷。該寄存器的修改也要進入配置模式才能進行。

圖片

3. 備份寄存器介紹

備份寄存器是 42 個 16 位的寄存器(Mini 開發板就是大容量的),可用來存儲 84 個字節的用戶應用程序數據。他們處在備份域里,當 VDD 電源被切斷,他們仍然由 VBAT 維持供電。即使系統在待機模式下被喚醒,或系統復位或電源復位時,他們也不會被復位。

復位后,對備份寄存器和 RTC 的訪問被禁止,并且備份域被保護以防止可能存在的意外的

寫操作。執行以下操作可以使能對備份寄存器和 RTC 的訪問:

(1)通過設置寄存器 RCC_APB1ENR 的 PWREN 和 BKPEN 位來打開電源和后備接口的時鐘;

(2)電源控制寄存器 (PWR_CR) 的 DBP 位來使能對后備寄存器和 RTC 的訪問。

一般用 BKP 來存儲 RTC 的校驗值或者記錄一些重要的數據,相當于一個 EEPROM,不過這個 EEPROM 并不是真正的 EEPROM,而是需要電池來維持它的數據。

圖片

RTC 的時鐘源選擇及使能設置都是通過這個寄存器來實現的,所以我們在 RTC 操作之前先要通過這個寄存器選擇 RTC 的時鐘源,然后才能開始其他的操作。

4. RTC 配置步驟

(1) 使能電源時鐘和備份區域時鐘

RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);

(2) 取消備份區寫保護

PWR_BackupAccessCmd(ENABLE); //使能 RTC 和后備寄存器訪問

(3) 復位備份區域,開啟外部低速振蕩器

BKP_DeInit();//復位備份區域

(4) 選擇 RTC 時鐘,并使能

RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); //選擇 LSE 作為 RTC 時鐘(RCC_RTCCLKSource_LSI 和 RCC_RTCCLKSource_HSE_Div128)
RCC_RTCCLKCmd(ENABLE); //使能 RTC 時鐘

(5) 設置 RTC 的分頻,以及配置 RTC 時鐘

在開啟了 RTC 時鐘之后,我們要做的是設置 RTC 時鐘的分頻數,通過 RTC_PRLH 和RTC_PRLL 來設置,然后等待 RTC 寄存器操作完成,并同步之后,設置秒鐘中斷。然后設置 RTC 的允許配置位(RTC_CRH 的 CNF 位),設置時間(其實就是設置RTC_CNTH 和 RTC_CNTL兩個寄存器)。

RTC_EnterConfigMode();/// 允許配置
RTC_ExitConfigMode();//退出配置模式,更新配置
void RTC_SetPrescaler(uint32_t PrescalerValue);
void RTC_ITConfig(uint16_t RTC_IT, FunctionalState NewState);//RTC_ITConfig(RTC_IT_SEC, ENABLE); //使能 RTC 秒中斷
void RTC_SetCounter(uint32_t CounterValue)最后在配置完成之后

(6) 更新配置,設置 RTC 中斷分組

設置完時鐘之后,我們將配置更新同時退出配置模式,這里還是通過 RTC_CRH 的 CNF 來實現。

RTC_ExitConfigMode();//退出配置模式,更新配置

在退出配置模式更新配置之后我們在備份區域 BKP_DR1 中寫入 0X5050 代表我們已經初始化過時鐘了,下次開機(或復位)的時候,先讀取 BKP_DR1 的值,然后判斷是否是 0X5050 來決定是不是要配置。接著我們配置 RTC 的秒鐘中斷,并進行分組。

void BKP_WriteBackupRegister(uint16_t BKP_DR, uint16_t Data);//往備份區域寫用戶數據

uint16_t BKP_ReadBackupRegister(uint16_t BKP_DR);//讀取備份區域指定寄存器

(7) 編寫中斷服務函數

流程圖:

圖片

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 寄存器
    +關注

    關注

    31

    文章

    5363

    瀏覽量

    121162
  • STM32
    +關注

    關注

    2272

    文章

    10923

    瀏覽量

    357568
  • 計數器
    +關注

    關注

    32

    文章

    2261

    瀏覽量

    94983
  • 時鐘
    +關注

    關注

    11

    文章

    1746

    瀏覽量

    131799
收藏 人收藏

    評論

    相關推薦

    STM32 RTC實時時鐘(一)

    STM32處理器內部集成了實時時鐘控制器(RTC),因此在實現實時時鐘功能時,無須外擴時鐘芯片即可構建
    的頭像 發表于 07-22 15:41 ?4827次閱讀
    <b class='flag-5'>STM32</b> <b class='flag-5'>RTC</b><b class='flag-5'>實時時鐘</b>(一)

    RTC實時時鐘簡介

    RTC實時時鐘1. RTC實時時鐘簡介2. 硬件設計3. 軟件設計3.1 STM32CubeMX
    發表于 08-18 06:55

    談一談STM32RTC實時時鐘

    STM32RTC實時時鐘...
    發表于 08-18 06:39

    如何去使用STM32實時時鐘RTC

    實時時鐘RTC是什么?如何去使用STM32實時時鐘RTC呢?有哪些注意事項?
    發表于 11-22 08:05

    RTC是什么?RTC實時時鐘實驗

    文章目錄前言一、RTC是什么?二、RTC實時時鐘實驗1.引入庫2.讀入數據總結前言前面我們說了OLED實驗,是一個比較好的顯示測試代碼的方法。現在我們
    發表于 01-13 07:19

    RTC實時時鐘實驗的相關資料分享

    STM32CubMX自學筆記(六)—RTC實時時鐘實驗主要介紹RTCSTM32單片機的內置外設
    發表于 03-02 07:34

    STM32F0xx_ RTC實時時鐘配置詳細過程

    STM32F0xx_RTC實時時鐘配置詳細過程
    的頭像 發表于 04-07 11:50 ?8402次閱讀
    <b class='flag-5'>STM32</b>F0xx_ <b class='flag-5'>RTC</b><b class='flag-5'>實時時鐘</b>配置詳細過程

    淺談RTC實時時鐘特征與原理

    一、RTC實時時鐘特征與原理 查看STM32中文手冊 16 實時時鐘RTC)(308頁) RTC
    的頭像 發表于 06-30 15:54 ?1.1w次閱讀

    STM32CubeMX | 40 - 實時時鐘RTC的使用(日歷和鬧鐘)

    STM32CubeMX | 40 - 實時時鐘RTC的使用(日歷和鬧鐘)
    發表于 11-23 18:06 ?19次下載
    <b class='flag-5'>STM32</b>CubeMX | 40 - <b class='flag-5'>實時時鐘</b><b class='flag-5'>RTC</b>的使用(日歷和鬧鐘)

    stm32f4 RTC實時時鐘解析

    應用最為廣泛的消費類電子產品之一。它為人們提供精確的實時時間,或者為電子系統提供精確的時間基準,目前實時時鐘芯片大多采用精度較高的晶體振蕩器作為時鐘源。對于STM32F的
    發表于 12-04 18:06 ?19次下載
    <b class='flag-5'>stm32</b>f4 <b class='flag-5'>RTC</b><b class='flag-5'>實時時鐘</b>解析

    STM32CubeMX學習筆記(14)——RTC實時時鐘使用

    一、RTC簡介實時時鐘RTC) 是一個獨立的 BCD 定時器/計數器。 RTC 提供具有可編程鬧鐘中斷功能的日歷時鐘/日歷。
    發表于 12-05 21:06 ?13次下載
    <b class='flag-5'>STM32</b>CubeMX<b class='flag-5'>學習</b><b class='flag-5'>筆記</b>(14)——<b class='flag-5'>RTC</b><b class='flag-5'>實時時鐘</b>使用

    STM32CubeMX系列|RTC實時時鐘

    RTC實時時鐘1. RTC實時時鐘簡介2. 硬件設計3. 軟件設計3.1 STM32CubeMX
    發表于 12-24 19:15 ?16次下載
    <b class='flag-5'>STM32</b>CubeMX系列|<b class='flag-5'>RTC</b><b class='flag-5'>實時時鐘</b>

    基于STM32單片機RTC實時時鐘使用庫文件設計

    基于STM32單片機RTC實時時鐘使用庫文件設計源代碼
    發表于 04-26 14:28 ?5次下載

    STM32學習筆記RTC實時時鐘2

    STM32實時時鐘RTC)是一個獨立的定時器。 STM32RTC 模塊擁有一組連續計數的計數器,在相應軟件配置下,可提供
    的頭像 發表于 05-26 14:26 ?1227次閱讀
    <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><b class='flag-5'>實時時鐘</b>2

    CW32實時時鐘RTC)介紹

    CW32實時時鐘RTC)介紹
    的頭像 發表于 10-24 15:36 ?1231次閱讀
    CW32<b class='flag-5'>實時時鐘</b>(<b class='flag-5'>RTC</b>)介紹
    六合彩历史开奖记录| 威尼斯人娱乐网| 百家乐官网现金网信誉排名| 顶级赌场连环夺宝| 誉博百家乐开户导航| 为什么百家乐官网玩家越来越多选择网上百家乐官网 | 百家乐官网辅助器| 百家乐官网正确的打法| 百家乐视频游戏挖坑| 免佣百家乐官网的玩法| 博九百家乐官网娱乐城| 鄂托克旗| 逍遥坊百家乐的玩法技巧和规则| 百家乐咋个玩的| 缅甸百家乐官网赌城| 网络百家乐官网怎样出千| 个旧市| 大发888娱乐开户| 吕百家乐官网赢钱律| 百家乐官网扑| 孝义市| 百家乐官网视频游戏大厅| bet365百家乐| 帝王百家乐官网全讯网2| 百家乐官网从哪而来| 大发888dafa8668| 百家乐群| 大发888真钱游戏注册| 大发888娱乐城新澳博| 大发888明星婚讯| 百家乐官网号破| 游戏百家乐押金| 属虎属鼠合伙做生意吗| 百家乐官网赌场程序| 百家乐是否有路子| 百苑百家乐官网的玩法技巧和规则 | 百家乐官网网络真人斗地主| 粤港澳百家乐官网娱乐| 娱乐城百家乐官网技巧| 百家乐官网出千工具价格| 巨星百家乐官网的玩法技巧和规则|