色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

STM32的實時時鐘RTC編程詳解

jf_78858299 ? 來源:雨飛工作室 ? 作者:雨飛工作室 ? 2023-05-26 14:32 ? 次閱讀

STM32里,一個CPU已經足夠,不需要像DS1302這樣的實時時鐘芯片。實際上,RTC就只一個定時器而已,掉電之后所有信息都會丟失,因此我們需要找一個地方來存儲這些信息,于是就找到了備份寄存器。因為它掉電后仍然可以通過紐扣電池供電,所以能時刻保存這些數據。

  1. STM32的RTC模塊

RTC模塊之所以具有實時時鐘功能,是因為它內部維持了一個獨立的定時器,通過配置,可以讓它準確地每秒鐘中斷一次。

1.1 RTC的組成

RTC由兩個部分組成:APB1接口部分以及RTC核心部分。 STM32所有的外設默認時鐘無效,使用某個外設時,再開啟時鐘,用這樣的方式來降低功耗。 這里的RTC,APB1 接口由APB1總線時鐘來驅動。為了突出時鐘吧?不過據說APB1接口部分還包括一組16 位寄存器。

RTC核心部分又分為預分頻模塊和一個32位的可編程計數器。前者可使每個TR_CLK 周期中RTC產生一個秒中斷,后者可被初始化為當前系統時間。此后系統時間會按照TR_CLK周期進行累加,實現時鐘功能。

1.2 對RTC的操作

我們對RTC的訪問,是通過APB1接口來進行的。注意,APB1剛被開啟的時候(比如剛上電,或剛復位后),從APB1上讀出來的RTC寄存器的第一個值有可能是被破壞了的(通常讀到0)。這個不幸,STM32是如何預防的呢?我們在程序中,會先等待RTC_CRL寄存器中的RSF位(寄存器同步標志)被硬件置1,然后才開始讀操作,這時候讀出來的值就是OK的。

那么對RTC寄存器的寫操作會不會有類似的情況呢?對于寫操作,我們只要注意, 每一次寫操作,必須確保在前一次寫操作完成后進行。 這個“確保”,是通過查詢RTC_CR寄存器中的RTOFF狀態位,判斷RTC寄存器是否處于更新中。只有當RTOFF狀態位是1,才可以寫RTC寄存器。

  1. RTC的編程

RTC的例程,主要是設置RTC時鐘,使得其在超級終端上顯示出當前的時鐘。這個時鐘的顯示是“不停地走”。而且掉電后,重新上電,時鐘仍然在走,仍然顯示當前的時間。當然,如果感興趣,您可以讓它在LCD上顯示—— 那就是一個名副其實的電子鐘了。

編程的時候,首先要注意備份寄存器BKP_DR1,它做了一件關鍵的事情:判斷RTC是否已經被設置過。 因為RTC跟其他計時器不同,它是使用紐扣電池單獨供電工作,所以它不會每次上電或者復位都被重置。判斷RTC是否已經被設置過,可以決定當前是否需要去設置RTC。如果剛安裝電池,第一次上電,自然需要去設置。否則的話,我們只要讓它顯示當前時鐘即可。

當第一次使用RTC的時候(第一次配置),需要做的工作總結下:

1、打開電源管理和備份寄存器時鐘。注意,一定要打開備份寄存器的時鐘。

我們正是通過在備份寄存器寫固定的數據來判斷芯片是否第一次使用RTC,從而在系統運行RTC 時提示配置時鐘的。

2、使能RTC 和備份寄存器的訪問(復位默認是關閉的,以防止可能存在的意外的寫操作)。

3、選擇外部低速晶體為RTC時鐘,并使能時鐘。筆者當初調試RTC 的時候,犯了一個低級錯誤:由于沒有定義如下:

#define RTCClockSource_LSE

導致程序一直停留在這里:

/* Wait till LSE is ready */while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET){}

希望大家能避免這個錯誤。

4、使能秒中斷,程序里在秒中斷里置位標志位來通知主程序顯示時間數據,同時在32 位計數器到23:59:59時清零;

5 、設置RTC 預分頻器值產生1秒信號計算公式fTR_CLK = fRTCCLK/(PRL+1),我們設置32767來產生秒信號。

我們再次強調:所有在對RTC寄存器操作之前都要判斷讀寫操作是否完成,即內部是否有讀寫操作。

下面來看代碼:

/* System Clocks Configuration */RCC_Configuration();
/* NVIC configuration */NVIC_Configuration();
/* Configure the GPIOs */GPIO_Configuration();
/* Configure the USART1 */USART_Configuration();

注意時鐘,為避免遺漏,筆者將其代碼放在第一位:

RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_PWR,ENABLE);

接著我們讀取備份寄存器BKP_DR1 中的值來判斷是否是第一次上電,如果不是則直接顯示時鐘,否則進行時間設置。當BKP_DR1的值不為0xAAAA,說明是第一次上電,此時需要對RTC進行初始化。注意初始化的實現函數RTC_Configuration();,為什么那么寫,請參考我們之前給出的“第一次使用RTC的配置工作總結”,然后進行時鐘設置。

注意,因為我們需要進行寫操作,所以根據固件庫手冊,要先調用RTC_WaitForLastTask(),等待標志位RTOFF被設置,保證在前一次寫操作結束后才能進行。調用RTC_SetCounter(Time_Regulate());,將計數值寫入RTC計數器。

由于后面要通過BKP_WriteBackupRegister()函數對BKP_DR1寫操作,因此之前還需要進行一次RTC_WaitForLastTask(),這樣,對時間的設置就完成了。

剩下的代碼,比較簡單,主要是注意如下:

RTCCount = RTC_GetCounter(); //獲得計數值并計算當前時鐘
/* Compute hours */THH = RTCCount/3600;
/* Compute minutes */TMM = (RTCCount % 3600)/60;
/* Compute seconds */TSS = (RTCCount % 3600)% 60;

這是通過RTC_GetCounter();函數獲取計數值,然后把這個計數值分別用小時、分鐘、秒來表示的過程。最后還需要調用printf 函數把它顯示出來。

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

    關注

    68

    文章

    10901

    瀏覽量

    212640
  • STM32
    +關注

    關注

    2270

    文章

    10923

    瀏覽量

    357035
  • 時鐘芯片
    +關注

    關注

    2

    文章

    252

    瀏覽量

    39930
  • 紐扣電池
    +關注

    關注

    2

    文章

    112

    瀏覽量

    7661
收藏 人收藏

    評論

    相關推薦

    基于STM32CubeMX的實時時鐘(RTC)配置

    實時時鐘 (RTC) 是一個獨立的 BCD 定時器/計數器。RTC 提供具有可編程鬧鐘中斷功能的日歷時鐘 /日歷。
    發表于 03-21 09:36 ?4006次閱讀

    STM32 RTC實時時鐘(一)

    STM32處理器內部集成了實時時鐘控制器(RTC),因此在實現實時時鐘功能時,無須外擴時鐘芯片即可構建
    的頭像 發表于 07-22 15:41 ?4808次閱讀
    <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設置3.2 MDK-ARM
    發表于 08-18 06:55

    如何去使用STM32實時時鐘RTC

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

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

    是什么?STM32F4 的實時時鐘RTC)相對于 STM32F1 來說,改進了不少,帶了日歷功能了,STM32F4 的
    發表于 01-13 07:19

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

    STM32F0xx_RTC實時時鐘配置詳細過程
    的頭像 發表于 04-07 11:50 ?8385次閱讀
    <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>的使用(日歷和鬧鐘)

    STM32開發 -- RTC詳解

    RTC實時時鐘部分,之前也是有講到過的。Hi3516A開發–RTC電路接下來看一下STM32RTC該怎么配置一、
    發表于 11-30 13:06 ?27次下載
    <b class='flag-5'>STM32</b>開發 -- <b class='flag-5'>RTC</b><b class='flag-5'>詳解</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系列|RTC實時時鐘

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

    STM32CubeMX-實時時鐘(RTC)

    實時時鐘 (RTC) 是一個獨立的 BCD 定時器/計數器。RTC 提供具有可編程鬧鐘中斷功能的日歷時鐘 /日歷。
    的頭像 發表于 01-14 17:24 ?2552次閱讀

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

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

    STM32 RTC實時時鐘(二)

    上次實驗完成了對實時時鐘的基本功能——計時的實驗,這次在計時的基礎上對RTC的可編程鬧鐘的功能進行測試。
    的頭像 發表于 07-22 15:43 ?2050次閱讀
    <b class='flag-5'>STM32</b> <b class='flag-5'>RTC</b><b class='flag-5'>實時時鐘</b>(二)

    CW32實時時鐘RTC)介紹

    CW32實時時鐘RTC)介紹
    的頭像 發表于 10-24 15:36 ?1211次閱讀
    CW32<b class='flag-5'>實時時鐘</b>(<b class='flag-5'>RTC</b>)介紹
    主站蜘蛛池模板: 拔擦拔擦8X永久华人免费播放器| 亚洲2023无矿砖码砖区| 爱看吧孕妇网| 亚洲欧洲日本天天堂在线观看| 欧美巨大巨粗黑人性AAAAAA| 狠狠色香婷婷久久亚洲精品| 爱豆剧果冻传媒在线播放| 伊人久久国产免费观看视频| 丝袜诱惑qvod| 欧美激情久久久久久久大片 | 武侠艳妇屈辱的张开双腿| 欧美18在线| 久久久久久九九| 国产免费不卡| 成人动漫百度影音| 99RE6这里只有精品国产AV| 亚洲裸舞 hd| 亚洲 欧美 国产 视频二区| 三级视频网站| 欧美性appstin孕妇| 麻豆AV久久AV盛宴AV| 精品精品国产yyy5857香蕉| 国产精品免费一区二区三区视频| 波多结衣一区二区三区| 99久久综合国产精品免费| 116美女写真成人午夜视频| 亚洲欧美中文在线一区| 无码欧美毛片一区二区三在线视频 | 超级碰碰青草久热国产| 4388成人| 中国农村真实bbwbbwbbw| 一本久道久久综合婷婷五月| 亚洲国产高清福利视频| 特大巨黑人吊性xxxxgay| 日日夜夜天天操| 肉多的小说腐小说| 日本欧美久久久久免费播放网| 欧美香蕉大胸在线视频观看| 欧美日韩精品久久久免费观看 | 亚洲中文无码永久免费| 亚洲男同tv|