STM32高階 RTC時鐘應用的詳細步驟

2021-10-19 05:02:55 字數 4560 閱讀 3153

簡介

rtc (real time clock):實時時鐘

主要特性

void rcc_rtcclkconfig(uint32_t  clksource);//時鐘源選擇

void rcc_rtcclkcmd(functionalstate newstate)//時鐘使能

errorstatus rtc_init(rtc_inittypedef* rtc_initstruct);

typedef struct

rtc_inittypedef

//設定時間

errorstatus rtc_settime(uint32_t rtc_format, rtc_timetypedef* rtc_timestruct);

//獲取時間

void rtc_gettime(uint32_t rtc_format, rtc_timetypedef* rtc_timestruct);

//設定日期

errorstatus rtc_setdate(uint32_t rtc_format, rtc_datetypedef* rtc_datestruct);

//獲取日期

void rtc_getdate(uint32_t rtc_format, rtc_datetypedef* rtc_datestruct);

//獲取到亞秒的資訊

uint32_t rtc_getsubsecond(void);

//禁止或使能rtc鬧鐘。

errorstatus rtc_alarmcmd(uint32_t rtc_alarm, functionalstate newstate);

//rtc鬧鐘時間配置。

void rtc_setalarm(uint32_t rtc_format, uint32_t rtc_alarm, rtc_alarmtypedef* rtc_alarmstruct);

//獲取rtc鬧鐘的時間配置

void rtc_getalarm(uint32_t rtc_format, uint32_t rtc_alarm, rtc_alarmtypedef* rtc_alarmstruct);

//功能配置rtc alarma/b的亞秒

void rtc_alarmsubsecondconfig(uint32_t rtc_alarm, uint32_t rtc_alarmsubsecondvalue, uint32_t rtc_alarmsubsecondmask);

//得到rtc的亞秒時間。

uint32_t rtc_getalarmsubsecond(uint32_t rtc_alarm);

//配置rtc喚醒時鐘源

void rtc_wakeupclockconfig(uint32_t rtc_wakeupclock);

//配置rtc喚醒計數

void rtc_setwakeupcounter(uint32_t rtc_wakeupcounter);

//得到喚醒定時器的計數值

uint32_t rtc_getwakeupcounter(void);

//關閉wake up

rtc_wakeupcmd(disable);

//使能或禁止rtc中斷

void rtc_itconfig(uint32_t rtc_it, functionalstate newstate);

//查詢rtc標誌,主要用於非中斷函式

flagstatus rtc_getflagstatus(uint32_t rtc_flag);

//清除rtc標誌,主要用於非中斷函式

void rtc_clearflag(uint32_t rtc_flag);

//查詢rtc中斷標誌

itstatus rtc_getitstatus(uint32_t rtc_it);

//清除rtc中斷標誌

void rtc_clearitpendingbit(uint32_t rtc_it);

//取消寫保護

void rtc_writeprotectioncmd(functionalstate newstate);

//進入配置模式,rtc_isr_initf位設定為1

errorstatus rtc_enterinitmode(void);

//退出初始化模式。

void rtc_exitinitmode(void)

//從備份資料暫存器讀出資料。

uint32_t rtc_readbackupregister(uint32_t rtc_bkp_dr);

//寫資料到rtc備份資料暫存器

void rtc_writebackupregister(uint32_t rtc_bkp_dr, uint32_t data);

//使能或禁止rtc中斷

void rtc_itconfig(uint32_t rtc_it, functionalstate newstate);

#define rtc_bkp_vale 0x2021

void rtc_init(void)

}

所有 rtc 中斷均與 exti 控制器相連。要使能 rtc 鬧鐘中斷,需按照以下順序操作:

將 exti 線 17 配置為中斷模式並將其使能,然後選擇上公升沿有效

配置 nvic 中的 rtc_alarm irq 通道並將其使能

配置 rtc 以生成rtc 鬧鐘(鬧鐘 a 或鬧鐘 b)。

①:rtc已經初始化好相關引數。

②:關閉鬧鐘:rtc_alarmcmd(rtc_alarm_a,disable);

③:配置鬧鐘引數:rtc_setalarm();3

④:開啟鬧鐘:rtc_alarmcmd(rtc_alarm_a,eable);

⑤:開啟配置鬧鐘中斷:

rtc_itconfig();

exti_init();

nvic_init();

⑥:編寫中斷服務函式:rtc_alarm_irqhandler();

//鬧鐘a

void rtc_alarm_ainit(void)

void rtc_alarm_irqhandler(void)

//清空標誌位

exti_clearitpendingbit(exti_line17);

}}

//鬧鐘b

void rtc_alarm_binit(void)

main.c

int main(void)

return 0;

}

errorstatus rtc_settime(uint32_t rtc_format, rtc_timetypedef* rtc_timestruct);

函式功能:時間設定

uint32_t rtc_format:儲存格式

rtc_format_bin:二進位制儲存

rtc_format_bcd:bcd碼格式

typedef struct

rtc_timetypedef;

↩︎errorstatus rtc_setdate(uint32_t rtc_format, rtc_datetypedef* rtc_datestruct)

函式功能:日期設定

uint32_t rtc_format:儲存格式

rtc_format_bin:二進位制儲存

typedef struct

rtc_datetypedef;

↩︎void rtc_setalarm(uint32_t rtc_format, uint32_t rtc_alarm, rtc_alarmtypedef* rtc_alarmstruct);

函式功能:設定鬧鐘

uint32_t rtc_format:儲存格式

rtc_format_bin:二進位制儲存

rtc_format_bcd:bcd碼格式

uint32_t rtc_alarm:選擇哪個鬧鐘

typedef struct

rtc_alarmtypedef;

typedef struct

rtc_timetypedef;

複習stm32中關於RTC時鐘知識

在做智慧型手環時候使用到了關於rtc時鐘的,今天我們來複習一下關於他的知識點。文章中我是參考的有stm32f411的中文參考手冊,需要的話我會上傳這個pdf版。養成查資料的好習慣 stm32之rtc實時時鐘 這個裡面比較詳細,還新增了例程。stm32 rtc實時時鐘這個鏈結裡面詳細講述rtc中的主要...

STM32應用 第3節 永不消逝的時鐘 RTC

每乙個複雜的專案,都包括了許多基礎內容。每乙個複雜的任務,都是通過一系列簡單的分解動作組裝而成。rtc就是諸多分解動作中重要的一環。在物聯網的各類裝置中,許多都需要利用rtc,才能為資料提供準確的定時。rtc初始化根據bkp readbackupregister讀數值進行判斷,如果讀數值不等於bkp...

STM32系統時鐘

1 參考資料 stm32f1開發指南 庫函式版本 4.3小節 時鐘系統 stm32中文參考手冊v10 第六章 復位和時鐘控制 rcc 2 時鐘系統知識總結 1 stm32有5個時鐘源 hsi hse lsi lse pll hsi是高速內部時鐘,rc振盪器,頻率為8mhz,精度不高 hse是高速外部...