• 正文
    • 1、RTC時(shí)鐘
    • 2、STM32的RTC
    • 03.系統(tǒng)配置
    • 04.代碼使用
  • BOM清單
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

STM32中的實(shí)時(shí)時(shí)鐘配置與使用!

01/26 09:40
7285
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

1、RTC時(shí)鐘

RTC是Real-Time-Clock時(shí)鐘的縮寫即實(shí)時(shí)時(shí)鐘,其主要功能是提供準(zhǔn)確的日期和時(shí)間信息。即使系統(tǒng)的主電源關(guān)閉,RTC 時(shí)鐘也能依靠備用電源(如電池)繼續(xù)運(yùn)行,以保證時(shí)間的連續(xù)性。

當(dāng)我們的設(shè)備斷電之后,第二次上電時(shí),即可根據(jù)RTC時(shí)鐘模塊來獲得當(dāng)前的時(shí)間。

RTC芯片經(jīng)過這么多年的發(fā)展已經(jīng)非常成熟,市場(chǎng)上輕輕松松就可以找到一款RTC模塊。

而在單片機(jī)中,部分單片機(jī)也集成了內(nèi)部RTC外設(shè)。本期我們就以STM32為例介紹如何使用STM32的RTC外設(shè)。

本期硬件STM32F103C8T6最小系統(tǒng)板

2、STM32的RTC

在芯片手冊(cè)中介紹到,我們可以通過改變計(jì)數(shù)值來改變系統(tǒng)的日期和時(shí)間。并且RTC時(shí)鐘的數(shù)據(jù)存在于備份域,并不會(huì)受到復(fù)位和斷電的影響。

該部分主要介紹了RTC時(shí)鐘的主要特性,我們主要關(guān)注兩條,首先是超長(zhǎng)的計(jì)時(shí)數(shù)以及三條中斷:報(bào)警中斷,秒中斷以及溢出中斷

報(bào)警中斷是當(dāng)RTC計(jì)數(shù)值達(dá)到我們?cè)O(shè)置的值時(shí)會(huì)出現(xiàn)的中斷。

秒中斷顧名思義是每秒產(chǎn)生的一次中斷。

溢出中斷是在計(jì)數(shù)寄存器溢出時(shí)發(fā)生的中斷。

下面讓我們來使用一下RTC外設(shè)。

03.系統(tǒng)配置

在CubeMX中打開芯片,找到Timers部分,找到RTC時(shí)鐘。

開啟RTC時(shí)鐘源,開啟日歷,RTC不輸出(其他選項(xiàng)是輸出引腳

存儲(chǔ)日期使用BCD碼而不是二進(jìn)制碼,設(shè)置時(shí)間和日期。

04.代碼使用

可以看到主要的幾個(gè)RTC函數(shù)。并且RTC有幾個(gè)專門的結(jié)構(gòu)體用來記錄時(shí)間和日期。

typedef struct{ ?uint8_t Hours; ? ? ? ? ? ?/*!< Specifies the RTC Time Hour. ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? This parameter must be a number between Min_Data = 0 and Max_Data = 23 */
 ?uint8_t Minutes; ? ? ? ? ?/*!< Specifies the RTC Time Minutes. ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? This parameter must be a number between Min_Data = 0 and Max_Data = 59 */
 ?uint8_t Seconds; ? ? ? ? ?/*!< Specifies the RTC Time Seconds. ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? This parameter must be a number between Min_Data = 0 and Max_Data = 59 */
} RTC_TimeTypeDef;
typedef struct{ ?uint8_t WeekDay; ?/*!< Specifies the RTC Date WeekDay (not necessary for HAL_RTC_SetDate). ? ? ? ? ? ? ? ? ? ? ? ? This parameter can be a value of @ref RTC_WeekDay_Definitions */
 ?uint8_t Month; ? ?/*!< Specifies the RTC Date Month (in BCD format). ? ? ? ? ? ? ? ? ? ? ? ? This parameter can be a value of @ref RTC_Month_Date_Definitions */
 ?uint8_t Date; ? ? /*!< Specifies the RTC Date. ? ? ? ? ? ? ? ? ? ? ? ? This parameter must be a number between Min_Data = 1 and Max_Data = 31 */
 ?uint8_t Year; ? ? /*!< Specifies the RTC Date Year. ? ? ? ? ? ? ? ? ? ? ? ? This parameter must be a number between Min_Data = 0 and Max_Data = 99 */
} RTC_DateTypeDef;

之后調(diào)用獲取時(shí)間的函數(shù)我們進(jìn)行測(cè)試。

在while循環(huán)中獲取時(shí)間,注意要把初始化中的設(shè)置時(shí)間部分給注釋掉,不然每次啟動(dòng)都會(huì)重置一下時(shí)間。還有一點(diǎn)需要注意的是,正常情況下STM32的VBat引腳可以不接,但是要使用RTC時(shí)鐘,需要外接一顆電池,這樣子才能在斷電之后依舊維持RTC運(yùn)行。

BOM清單

更多器件
器件型號(hào) 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊(cè) ECAD模型 風(fēng)險(xiǎn)等級(jí) 參考價(jià)格 更多信息
STM32F103C8T6 1 STMicroelectronics Mainstream Performance line, Arm Cortex-M3 MCU with 64 Kbytes of Flash memory, 72 MHz CPU, motor control, USB and CAN

ECAD模型

下載ECAD模型
$7.3933 查看

相關(guān)推薦