STM32F4外設配置速查 RTC部分

2021-10-10 09:24:16 字數 4827 閱讀 5519

2個32位暫存器包含bcd格式的second、minute、hour(12/24小時制)、day、week、month、year

還可以提供二進位制的亞秒值

系統可自動將月份天數補償位28、29、30、31天,還可以進行夏令時補償

時鐘源:由rtc_calr精密校準過的lse(32.768khz)時鐘經過多次分頻得到的1hz時鐘;影子暫存器(rtc_ssr)使用第一次分頻後得到的256hz時鐘,可精確到亞秒

使能pwr時鐘

使能後備暫存器訪問

配置rtc時鐘源,使能rtc時鐘

rtc初始化

設定時間

設定日期

rtc初始化

關閉鬧鐘

配置鬧鐘引數

開啟鬧鐘

開啟配置鬧鐘中斷

編寫中斷服務函式

rtc初始化

使能喚醒

配置喚醒時鐘係數/**

設定喚醒自動裝載暫存器

使能自動喚醒

開啟配置喚醒中斷

編寫中斷服務函式

rtc.c

#include

"rtc.h"

#include

"led.h"

#include

"delay.h"

#include

"usart.h"

nvic_inittypedef nvic_initstructure;

/**************************rtc初始化*******************************/

//rtc時間設定函式

//hour,min,sec:時,分,秒設定值

//ampm:@rtc_am_pm_definitions:rtc_h12_am/rtc_h12_pm

//返回值:sucee(1),成功;error(0),進入初始化模式失敗

errorstatus rtc_set_time

(u8 hour,u8 min,u8 sec,u8 ampm)

//rtc日期設定函式

//year,month,date:年(0~99),月(1~12),日(0~31)

//week:星期(1~7,0為非法)

//返回值:sucee(1),成功

// error(0),進入初始化模式失敗

errorstatus rtc_set_date

(u8 year,u8 month,u8 date,u8 week)

//rtc初始化函式

//返回值:0,初始化成功;

// 1,lse開啟失敗;

// 2,進入初始化模式失敗;

u8 my_rtc_init

(void)if

(retry==0)

//如果等待時間過長

return1;

//lse 開啟失敗.

//4. 設定rtc時鐘(rtcclk),選擇lse作為rtc時鐘

rcc_rtcclkconfig

(rcc_rtcclksource_lse)

;//5. 使能rtc時鐘

rcc_rtcclkcmd

(enable)

;//6. 設定rtc分頻係數和相關設定

rtc_initstructure.rtc_asynchprediv=

0x7f

;//rtc非同步分頻係數(1~0x7f)

rtc_initstructure.rtc_synchprediv=

0xff

;//rtc同步分頻係數(0~7fff)

rtc_initstructure.rtc_hourformat=rtc_hourformat_24;

//rtc設定為,24小時格式

//應用設定

rtc_init

(&rtc_initstructure)

;//7. 設定時間和日期

rtc_set_time(23

,59,56

,rtc_h12_am)

;rtc_set_date(14

,5,5

,1);

//8. 提示「該標記已經初始化過」

rtc_writebackupregister

(rtc_bkp_dr0,

0x5050);

}//如果不是第一次配置則跳過

return0;

}/**************************rtc初始化*******************************/

/**************************鬧鐘初始化*******************************/

//設定鬧鐘時間(按星期鬧鈴,24小時制)

//week:星期幾(1~7) @ref rtc_alarm_definitions

//hour,min,sec:時,分,秒

void

rtc_set_alarma

(u8 week,u8 hour,u8 min,u8 sec)

/**************************鬧鐘初始化*******************************/

/**************************週期喚醒初始化*******************************/

//週期性喚醒定時器設定

/*wksel: @ref rtc_wakeup_timer_definitions

#define rtc_wakeupclock_rtcclk_div16 ((uint32_t)0x00000000)

#define rtc_wakeupclock_rtcclk_div8 ((uint32_t)0x00000001)

#define rtc_wakeupclock_rtcclk_div4 ((uint32_t)0x00000002)

#define rtc_wakeupclock_rtcclk_div2 ((uint32_t)0x00000003)

#define rtc_wakeupclock_ck_spre_16bits ((uint32_t)0x00000004)

#define rtc_wakeupclock_ck_spre_17bits ((uint32_t)0x00000006)

*///cnt:自動重裝載值.減到0,產生中斷.

void

rtc_set_wakeup

(u32 rtc_wakeup_select,u16 rtc_wakeup_counter)

/**************************週期喚醒初始化*******************************/

/**************************rtc鬧鐘中斷服務函式*******************************/

void

rtc_alarm_irqhandler

(void

)exti_clearitpendingbit

(exti_line17)

;//然後清除中斷線17的中斷標誌

}/**************************rtc鬧鐘中斷服務函式*******************************/

/**************************週期喚醒中斷服務函式*******************************/

void

rtc_wkup_irqhandler

(void

)exti_clearitpendingbit

(exti_line22)

;//然後清除中斷線22的中斷標誌

}

rtc.h

#ifndef __rtc_h

#define __rtc_h

#include

"sys.h"

u8 my_rtc_init

(void);

//rtc初始化函式宣告

errorstatus rtc_set_time

(u8 hour,u8 min,u8 sec,u8 ampm)

;//rtc時間設定函式宣告

errorstatus rtc_set_date

(u8 year,u8 month,u8 date,u8 week)

;//rtc日期設定函式宣告

void

rtc_set_alarma

(u8 week,u8 hour,u8 min,u8 sec)

;//設定鬧鐘時間(按星期鬧鈴,24小時制)函式宣告

void

rtc_set_wakeup

(u32 rtc_wakeup_select,u16 rtc_wakeup_counter)

;//週期性喚醒定時器設定函式宣告

#endif

main.c

#include

"sys.h"

#include

"delay.h"

#include

"usart.h"

#include

"rtc.h"

intmain

(void)if

((t%20)

==0)led0=

!led0;

//每200ms,翻轉一次led0

delay_ms(10

);}}

STM32F4外設配置速查 DMA部分

dma即direct memory access 直接儲存器訪問 將資料從乙個位址複製到另乙個位址,當cpu初始化dma控制器後,傳輸動作由dma控制器實現和完成 優點 無需cpu控制 或 中斷壓棧 出棧過程,讓ram與io裝置間可快速傳輸資料,減少cpu負載 雙ahb匯流排,乙個用於儲存器訪問,乙...

STM32F4外設配置速查 FPU與DSP部分

詳細內容參考cortex m4核心程式設計手冊 stm32f4xx及更高配置stm32微控制器才有fpu支援 stm32f4帶有32位單精度硬體fpu,支援浮點指令集,整個fpu單元能被使能和關閉 使用協處理器控制暫存器 scb cpacr 中的cp11和cp10啟用 關閉fpu 晶元復位後,cp1...

STM32F4外設配置速查 低功耗喚醒部分

一般在系統或電源復位後,mcu在執行狀態下由hclk為cpu提供時鐘,核心執行 當cpu不需要執行時可利用多種低功耗模式來節省功耗,等待某事件觸發時才喚醒 stm32f4xx有三種低功耗模式 睡眠模式 僅核心停止,外設如nvic systick等仍執行 停止模式 所有時鐘停止,1.8v核心電源工作,...