iwdg.c
#include
"iwdg.h"
void
iwdg_init
(u8 prer,u16 rlr)
//prer為預分頻係數,rlr為溢位時間
溢位時間計算:
t ou
t=4∗
2pre
r∗rl
r32(m
4)
tout=\frac*rlr} (m4)
tout=3
24∗2
prer
∗rlr
(m4
)iwdg.h
#ifndef __iwdg_h
#define __iwdg_h
#include
"sys.h"
void
iwdg_init()
;#endif
main.c
void
main
(void
)}
餵狗時間存在上下限(視窗),其中下限固定,上限由相關暫存器控制,餵狗時間不能太早也不能過晚
wwdg種有乙個7位的遞減計數器t[6:0],在下列兩種情況之一
餵狗時,計數器值大於某一設定數值w[6:0]
計數器數值從0x40減到0x3f(t6跳變為0)時
產生看門狗復位
如果啟動了看門狗並允許中斷,當遞減計數器等於0x40時產生早期喚醒中斷(ewi),可以在此設定餵狗函式以避免wwdg復位
看門狗超時公式:
t ww
dg
=4096∗2
wdgt
b∗t[
5:0]
+1fp
clk1
t_=4096*2^*\frac}
twwdg
=409
6∗2w
dgtb
∗fpc
lk1
t[5:
0]+1
其中,tww
dg
t_tw
wdg
單位為ms,是wwdg超時時間
f pc
lk1f_
fpclk1
單位為khz,是apb1的時鐘頻率
w dg
tb
wdgtb
wdgt
b是wwdg的預分頻係數
t [5
:0
]t[5:0]
t[5:0]
是wwdg計數器低6位
wwdg.c
#include
"wwdg.h"
#include
"led.h"
//儲存wwdg計數器的設定值,預設為最大.
u8 wwdg_cnt=
0x7f
;//tr代表t[6:0],計數器值
//wr代表w[6:0],視窗值
//fprer代表分頻係數(wdgtb),僅最低2位有效
//fwwdg=pclk1/(4096*2^fprer). 一般pclk1=42mhz
void
wwdg_init
(u8 tr,u8 wr,u32 fprer)
//初始化wwdg函式
//7. 設定wwdg中斷服務程式
void
wwdg_irqhandler
(void
)
wwdg.h
#ifndef _wwdg_h
#define _wwdg_h
#include
"sys.h"
//tr代表t[6:0],計數器值
//wr代表w[6:0],視窗值
//fprer代表分頻係數(wdgtb),僅最低2位有效
//fwwdg=pclk1/(4096*2^fprer). 一般pclk1=42mhz
void
wwdg_init
(u8 tr,u8 wr,u32 fprer)
;//wwdg初始化函式宣告
void
wwdg_irqhandler
(void);
//wwdg中斷優先順序設定函式宣告,一般可以去掉,直接在"wwdg.c"裡定義
#endif
main.c
#include
"sys.h"
#include
"delay.h"
#include
"usart.h"
#include
"led.h"
#include
"beep.h"
#include
"key.h"
//wwdg相關初始化檔案
#include
"wwdg.h"
intmain
(void
)}
STM32F4外設配置速查 RTC部分
2個32位暫存器包含bcd格式的second minute hour 12 24小時制 day week month year 還可以提供二進位制的亞秒值 系統可自動將月份天數補償位28 29 30 31天,還可以進行夏令時補償 時鐘源 由rtc calr精密校準過的lse 32.768khz 時鐘...
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...