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

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

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

1、RTC時鐘

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

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

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

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

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

2、STM32的RTC

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

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

報警中斷是當(dāng)RTC計數(shù)值達(dá)到我們設(shè)置的值時會出現(xiàn)的中斷。

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

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

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

03.系統(tǒng)配置

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

開啟RTC時鐘源,開啟日歷,RTC不輸出(其他選項是輸出引腳

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

04.代碼使用

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

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ù)我們進(jìn)行測試。

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

BOM清單

更多器件
器件型號 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊 ECAD模型 風(fēng)險等級 參考價格 更多信息
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)推薦

登錄即可解鎖
  • 海量技術(shù)文章
  • 設(shè)計資源下載
  • 產(chǎn)業(yè)鏈客戶資源
  • 寫文章/發(fā)需求
立即登錄