在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

    文章

    5432

    瀏覽量

    124031
  • STM32
    +關注

    關注

    2291

    文章

    11026

    瀏覽量

    363716
  • 計數器
    +關注

    關注

    32

    文章

    2290

    瀏覽量

    96266
  • 時鐘
    +關注

    關注

    11

    文章

    1893

    瀏覽量

    133046
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    STM32 RTC實時時鐘(一)

    STM32處理器內部集成了實時時鐘控制器(RTC),因此在實現實時時鐘功能時,無須外擴時鐘芯片即可構建
    的頭像 發表于 07-22 15:41 ?5516次閱讀
    <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的時間計算部分

    STM32實時時鐘RTC是什么?STM32實時時鐘RTC是由哪些部分組成的?如何去實現
    發表于 11-22 06:33

    如何去使用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 ?8761次閱讀
    <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 ?1473次閱讀
    <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
    主站蜘蛛池模板: 色多多视频官网 | 日韩在线一区视频 | 性欧美xxxx视频在线观看 | tv电影天堂| 2021国内精品久久久久影院 | 欧美成人免费夜夜黄啪啪 | 在线看片地址 | 亚洲欧美视频在线播放 | 九九国产精品视频 | 国产欧美一级片 | 狠狠干亚洲色图 | 国产综合免费视频 | 91拍拍在线观看 | 黄篇网站在线观看 | 国产午夜精品理论片 | 国产汉服被啪福利在线观看 | 欧美一二 | 日本三级黄视频 | 五月天丁香婷婷综合 | 夜夜爽天天操 | 四虎影视4hu4虎成人 | 狠狠色丁香久久综合婷婷 | 国产精品福利一区二区亚瑟 | 性欧美videofree丝袜 | 三级色图 | 在线观看视频一区 | 欧美怡红院免费全视频 | 亚洲最色网站 | videosex久久麻豆 | 色香蕉视频 | 一区二区三区在线观看免费 | 男女网站在线观看 | 4hu四虎永久免在线视 | 天天夜天干天天爽 | 伊人婷婷涩六月丁香七月 | 亚州色吧| 欧美综合影院 | 亚洲 欧美 日韩 丝袜 另类 | 一区二区免费在线观看 | 另类图片综合网 | 97久久精品国产精品青草 |