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核心電源工作,...