欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

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

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

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

STM32的實(shí)時(shí)時(shí)鐘RTC編程詳解

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

STM32里,一個(gè)CPU已經(jīng)足夠,不需要像DS1302這樣的實(shí)時(shí)時(shí)鐘芯片。實(shí)際上,RTC就只一個(gè)定時(shí)器而已,掉電之后所有信息都會(huì)丟失,因此我們需要找一個(gè)地方來(lái)存儲(chǔ)這些信息,于是就找到了備份寄存器。因?yàn)樗綦姾笕匀豢梢酝ㄟ^(guò)紐扣電池供電,所以能時(shí)刻保存這些數(shù)據(jù)。

  1. STM32的RTC模塊

RTC模塊之所以具有實(shí)時(shí)時(shí)鐘功能,是因?yàn)樗鼉?nèi)部維持了一個(gè)獨(dú)立的定時(shí)器,通過(guò)配置,可以讓它準(zhǔn)確地每秒鐘中斷一次。

1.1 RTC的組成

RTC由兩個(gè)部分組成:APB1接口部分以及RTC核心部分。 STM32所有的外設(shè)默認(rèn)時(shí)鐘無(wú)效,使用某個(gè)外設(shè)時(shí),再開(kāi)啟時(shí)鐘,用這樣的方式來(lái)降低功耗。 這里的RTC,APB1 接口由APB1總線時(shí)鐘來(lái)驅(qū)動(dòng)。為了突出時(shí)鐘吧?不過(guò)據(jù)說(shuō)APB1接口部分還包括一組16 位寄存器。

RTC核心部分又分為預(yù)分頻模塊和一個(gè)32位的可編程計(jì)數(shù)器。前者可使每個(gè)TR_CLK 周期中RTC產(chǎn)生一個(gè)秒中斷,后者可被初始化為當(dāng)前系統(tǒng)時(shí)間。此后系統(tǒng)時(shí)間會(huì)按照TR_CLK周期進(jìn)行累加,實(shí)現(xiàn)時(shí)鐘功能。

1.2 對(duì)RTC的操作

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

那么對(duì)RTC寄存器的寫(xiě)操作會(huì)不會(huì)有類(lèi)似的情況呢?對(duì)于寫(xiě)操作,我們只要注意, 每一次寫(xiě)操作,必須確保在前一次寫(xiě)操作完成后進(jìn)行。 這個(gè)“確?!?,是通過(guò)查詢RTC_CR寄存器中的RTOFF狀態(tài)位,判斷RTC寄存器是否處于更新中。只有當(dāng)RTOFF狀態(tài)位是1,才可以寫(xiě)RTC寄存器。

  1. RTC的編程

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

編程的時(shí)候,首先要注意備份寄存器BKP_DR1,它做了一件關(guān)鍵的事情:判斷RTC是否已經(jīng)被設(shè)置過(guò)。 因?yàn)镽TC跟其他計(jì)時(shí)器不同,它是使用紐扣電池單獨(dú)供電工作,所以它不會(huì)每次上電或者復(fù)位都被重置。判斷RTC是否已經(jīng)被設(shè)置過(guò),可以決定當(dāng)前是否需要去設(shè)置RTC。如果剛安裝電池,第一次上電,自然需要去設(shè)置。否則的話,我們只要讓它顯示當(dāng)前時(shí)鐘即可。

當(dāng)?shù)谝淮问褂肦TC的時(shí)候(第一次配置),需要做的工作總結(jié)下:

1、打開(kāi)電源管理和備份寄存器時(shí)鐘。注意,一定要打開(kāi)備份寄存器的時(shí)鐘。

我們正是通過(guò)在備份寄存器寫(xiě)固定的數(shù)據(jù)來(lái)判斷芯片是否第一次使用RTC,從而在系統(tǒng)運(yùn)行RTC 時(shí)提示配置時(shí)鐘的。

2、使能RTC 和備份寄存器的訪問(wèn)(復(fù)位默認(rèn)是關(guān)閉的,以防止可能存在的意外的寫(xiě)操作)。

3、選擇外部低速晶體為RTC時(shí)鐘,并使能時(shí)鐘。筆者當(dāng)初調(diào)試RTC 的時(shí)候,犯了一個(gè)低級(jí)錯(cuò)誤:由于沒(méi)有定義如下:

#define RTCClockSource_LSE

導(dǎo)致程序一直停留在這里:

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

希望大家能避免這個(gè)錯(cuò)誤。

4、使能秒中斷,程序里在秒中斷里置位標(biāo)志位來(lái)通知主程序顯示時(shí)間數(shù)據(jù),同時(shí)在32 位計(jì)數(shù)器到23:59:59時(shí)清零;

5 、設(shè)置RTC 預(yù)分頻器值產(chǎn)生1秒信號(hào)計(jì)算公式fTR_CLK = fRTCCLK/(PRL+1),我們?cè)O(shè)置32767來(lái)產(chǎn)生秒信號(hào)。

我們?cè)俅螐?qiáng)調(diào):所有在對(duì)RTC寄存器操作之前都要判斷讀寫(xiě)操作是否完成,即內(nèi)部是否有讀寫(xiě)操作。

下面來(lái)看代碼:

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

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

RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_PWR,ENABLE);

接著我們讀取備份寄存器BKP_DR1 中的值來(lái)判斷是否是第一次上電,如果不是則直接顯示時(shí)鐘,否則進(jìn)行時(shí)間設(shè)置。當(dāng)BKP_DR1的值不為0xAAAA,說(shuō)明是第一次上電,此時(shí)需要對(duì)RTC進(jìn)行初始化。注意初始化的實(shí)現(xiàn)函數(shù)RTC_Configuration();,為什么那么寫(xiě),請(qǐng)參考我們之前給出的“第一次使用RTC的配置工作總結(jié)”,然后進(jìn)行時(shí)鐘設(shè)置。

注意,因?yàn)槲覀冃枰M(jìn)行寫(xiě)操作,所以根據(jù)固件庫(kù)手冊(cè),要先調(diào)用RTC_WaitForLastTask(),等待標(biāo)志位RTOFF被設(shè)置,保證在前一次寫(xiě)操作結(jié)束后才能進(jìn)行。調(diào)用RTC_SetCounter(Time_Regulate());,將計(jì)數(shù)值寫(xiě)入RTC計(jì)數(shù)器。

由于后面要通過(guò)BKP_WriteBackupRegister()函數(shù)對(duì)BKP_DR1寫(xiě)操作,因此之前還需要進(jìn)行一次RTC_WaitForLastTask(),這樣,對(duì)時(shí)間的設(shè)置就完成了。

剩下的代碼,比較簡(jiǎn)單,主要是注意如下:

RTCCount = RTC_GetCounter(); //獲得計(jì)數(shù)值并計(jì)算當(dāng)前時(shí)鐘
/* Compute hours */THH = RTCCount/3600;
/* Compute minutes */TMM = (RTCCount % 3600)/60;
/* Compute seconds */TSS = (RTCCount % 3600)% 60;

這是通過(guò)RTC_GetCounter();函數(shù)獲取計(jì)數(shù)值,然后把這個(gè)計(jì)數(shù)值分別用小時(shí)、分鐘、秒來(lái)表示的過(guò)程。最后還需要調(diào)用printf 函數(shù)把它顯示出來(lái)。

聲明:本文內(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)投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10911

    瀏覽量

    213147
  • STM32
    +關(guān)注

    關(guān)注

    2273

    文章

    10926

    瀏覽量

    357784
  • 時(shí)鐘芯片
    +關(guān)注

    關(guān)注

    2

    文章

    253

    瀏覽量

    39986
  • 紐扣電池
    +關(guān)注

    關(guān)注

    2

    文章

    112

    瀏覽量

    7687
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

    實(shí)時(shí)時(shí)鐘 (RTC) 是一個(gè)獨(dú)立的 BCD 定時(shí)器/計(jì)數(shù)器。RTC 提供具有可編程鬧鐘中斷功能的日歷時(shí)鐘 /日歷。
    發(fā)表于 03-21 09:36 ?4072次閱讀

    STM32 RTC實(shí)時(shí)時(shí)鐘(一)

    STM32處理器內(nèi)部集成了實(shí)時(shí)時(shí)鐘控制器(RTC),因此在實(shí)現(xiàn)實(shí)時(shí)時(shí)鐘功能時(shí),無(wú)須外擴(kuò)時(shí)鐘芯片即可構(gòu)建實(shí)
    的頭像 發(fā)表于 07-22 15:41 ?4853次閱讀
    <b class='flag-5'>STM32</b> <b class='flag-5'>RTC</b><b class='flag-5'>實(shí)時(shí)時(shí)鐘</b>(一)

    RTC實(shí)時(shí)時(shí)鐘簡(jiǎn)介

    RTC實(shí)時(shí)時(shí)鐘1. RTC實(shí)時(shí)時(shí)鐘簡(jiǎn)介2. 硬件設(shè)計(jì)3. 軟件設(shè)計(jì)3.1 STM32CubeMX設(shè)置3.2 MDK-ARM
    發(fā)表于 08-18 06:55

    如何去使用STM32實(shí)時(shí)時(shí)鐘RTC

    實(shí)時(shí)時(shí)鐘RTC是什么?如何去使用STM32實(shí)時(shí)時(shí)鐘RTC呢?有哪些注意事項(xiàng)?
    發(fā)表于 11-22 08:05

    RTC是什么?RTC實(shí)時(shí)時(shí)鐘實(shí)驗(yàn)

    是什么?STM32F4 的實(shí)時(shí)時(shí)鐘RTC)相對(duì)于 STM32F1 來(lái)說(shuō),改進(jìn)了不少,帶了日歷功能了,STM32F4 的
    發(fā)表于 01-13 07:19

    STM32F0xx_ RTC實(shí)時(shí)時(shí)鐘配置詳細(xì)過(guò)程

    STM32F0xx_RTC實(shí)時(shí)時(shí)鐘配置詳細(xì)過(guò)程
    的頭像 發(fā)表于 04-07 11:50 ?8410次閱讀
    <b class='flag-5'>STM32</b>F0xx_ <b class='flag-5'>RTC</b><b class='flag-5'>實(shí)時(shí)時(shí)鐘</b>配置詳細(xì)過(guò)程

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

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

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

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

    STM32開(kāi)發(fā) -- RTC詳解

    RTC實(shí)時(shí)時(shí)鐘部分,之前也是有講到過(guò)的。Hi3516A開(kāi)發(fā)–RTC電路接下來(lái)看一下STM32RTC該怎么配置一、
    發(fā)表于 11-30 13:06 ?27次下載
    <b class='flag-5'>STM32</b>開(kāi)發(fā) -- <b class='flag-5'>RTC</b><b class='flag-5'>詳解</b>

    stm32f4 RTC實(shí)時(shí)時(shí)鐘解析

    應(yīng)用最為廣泛的消費(fèi)類(lèi)電子產(chǎn)品之一。它為人們提供精確的實(shí)時(shí)時(shí)間,或者為電子系統(tǒng)提供精確的時(shí)間基準(zhǔn),目前實(shí)時(shí)時(shí)鐘芯片大多采用精度較高的晶體振蕩器作為時(shí)鐘源。對(duì)于STM32F的
    發(fā)表于 12-04 18:06 ?19次下載
    <b class='flag-5'>stm32</b>f4 <b class='flag-5'>RTC</b><b class='flag-5'>實(shí)時(shí)時(shí)鐘</b>解析

    STM32CubeMX系列|RTC實(shí)時(shí)時(shí)鐘

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

    STM32CubeMX-實(shí)時(shí)時(shí)鐘(RTC)

    實(shí)時(shí)時(shí)鐘 (RTC) 是一個(gè)獨(dú)立的 BCD 定時(shí)器/計(jì)數(shù)器。RTC 提供具有可編程鬧鐘中斷功能的日歷時(shí)鐘 /日歷。
    的頭像 發(fā)表于 01-14 17:24 ?2583次閱讀

    基于STM32單片機(jī)RTC實(shí)時(shí)時(shí)鐘使用庫(kù)文件設(shè)計(jì)

    基于STM32單片機(jī)RTC實(shí)時(shí)時(shí)鐘使用庫(kù)文件設(shè)計(jì)源代碼
    發(fā)表于 04-26 14:28 ?5次下載

    STM32 RTC實(shí)時(shí)時(shí)鐘(二)

    上次實(shí)驗(yàn)完成了對(duì)實(shí)時(shí)時(shí)鐘的基本功能——計(jì)時(shí)的實(shí)驗(yàn),這次在計(jì)時(shí)的基礎(chǔ)上對(duì)RTC的可編程鬧鐘的功能進(jìn)行測(cè)試。
    的頭像 發(fā)表于 07-22 15:43 ?2074次閱讀
    <b class='flag-5'>STM32</b> <b class='flag-5'>RTC</b><b class='flag-5'>實(shí)時(shí)時(shí)鐘</b>(二)

    CW32實(shí)時(shí)時(shí)鐘RTC)介紹

    CW32實(shí)時(shí)時(shí)鐘RTC)介紹
    的頭像 發(fā)表于 10-24 15:36 ?1249次閱讀
    CW32<b class='flag-5'>實(shí)時(shí)時(shí)鐘</b>(<b class='flag-5'>RTC</b>)介紹