在线观看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

    文章

    5363

    瀏覽量

    121193
  • STM32
    +關注

    關注

    2272

    文章

    10924

    瀏覽量

    357592
  • 計數器
    +關注

    關注

    32

    文章

    2261

    瀏覽量

    94992
  • 時鐘
    +關注

    關注

    11

    文章

    1747

    瀏覽量

    131803
收藏 人收藏

    評論

    相關推薦

    STM32 RTC實時時鐘(一)

    STM32處理器內部集成了實時時鐘控制器(RTC),因此在實現實時時鐘功能時,無須外擴時鐘芯片即可構建
    的頭像 發表于 07-22 15:41 ?4828次閱讀
    <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 ?1232次閱讀
    CW32<b class='flag-5'>實時時鐘</b>(<b class='flag-5'>RTC</b>)介紹
    主站蜘蛛池模板: 天堂色网| 狠狠色噜噜噜噜狠狠狠狠狠狠奇米 | 91久久另类重口变态 | 国产美女在线观看 | 黄网站在线观看高清免费 | 亚欧免费视频 | 都市激情综合 | 久久天天| 性色爽爱性色爽爱网站 | 狠狠色色综合网站 | 天堂在线最新版资源www | 欧美日韩精品乱国产 | 天堂成人精品视频在线观 | 狠狠躁| 国产精品特黄毛片 | 国产美女动态免费视频 | 日韩毛片免费在线观看 | 欧美色淫 | 中文字幕人成不卡一区 | 中国日韩欧美中文日韩欧美色 | 亚洲精品亚洲人成人网 | 精品一区二区在线观看 | 午夜视频免费观看黄 | 国产美女一级ba大片免色 | 韩国韩宝贝2020vip福利视频 | 黄色一级片毛片 | 天天操丝袜 | 68日本xxxxxxxxx777| 噜噜噜狠狠夜夜躁 | 午夜影视体验区 | 一级毛片免费全部播放完整 | 一级特黄aaa大片在 一级特黄aaa大片在线观看视频 | 免费一级片视频 | 69re在线观看 | 亚洲一级毛片中文字幕 | 天天综合干 | 一级毛片免费网站 | 欧美人与z0zoxxxx | 日韩在线视频一区 | 性欧美激情在线观看 | 在线免费影视 |