01. IWDG概述# o/ i0 D X) i2 V. m5 p
stm32f4xx_iwdg.h和stm32f4xx_iwdg.c文件中* Y/ r5 K* M- {
, X3 x3 G' ~: p5 T# [+ a0 u02. 相关类型- g& ^' X; e. h g( u/ v$ j
IWDG_WriteAccess# Y+ Q. k& \9 H# d
/ f% T+ n8 N9 z. N6 p1 I- /** @defgroup IWDG_WriteAccess- @9 X, k$ R# W! w
- * @{
" z' _' B+ O2 G* P. E% U - */4 G+ C' R ?3 {/ w" a. ~( C
- #define IWDG_WriteAccess_Enable ((uint16_t)0x5555)
$ k+ g" B# z) U" g% ] - #define IWDG_WriteAccess_Disable ((uint16_t)0x0000)
- T- U6 a0 d, C! ?/ H9 e - #define IS_IWDG_WRITE_ACCESS(ACCESS) (((ACCESS) == IWDG_WriteAccess_Enable) || \
6 j/ l" D1 S: c( y4 h - ((ACCESS) == IWDG_WriteAccess_Disable))
复制代码 " Z2 m: b( X. p
IWDG_prescaler3 }' L2 _1 f- S) Z9 V2 G- o! }& _
+ S' T1 u/ c* v# o" @6 m. q
- /** @defgroup IWDG_prescaler
' `4 ^4 C' E5 Z: }" h, w - * @{
/ w# j9 `9 D/ g: o - */
( A2 D0 R0 y# ?/ | - #define IWDG_Prescaler_4 ((uint8_t)0x00)
4 G5 u# N ?+ ^$ C - #define IWDG_Prescaler_8 ((uint8_t)0x01)- o# G1 P: x# V& E6 T
- #define IWDG_Prescaler_16 ((uint8_t)0x02). ]$ {* f6 ~; i
- #define IWDG_Prescaler_32 ((uint8_t)0x03)
9 L9 i9 y7 j$ O1 M9 ?8 S% e# n: D - #define IWDG_Prescaler_64 ((uint8_t)0x04)0 x+ y5 Y; O& C* X2 ~
- #define IWDG_Prescaler_128 ((uint8_t)0x05)- N Z3 ~$ ?# M
- #define IWDG_Prescaler_256 ((uint8_t)0x06)0 A/ }; \0 }2 U
- #define IS_IWDG_PRESCALER(PRESCALER) (((PRESCALER) == IWDG_Prescaler_4) || \
; A. u* i- H6 e' m6 u9 z0 U8 H - ((PRESCALER) == IWDG_Prescaler_8) || \# g( a/ [0 ~# d' S% k
- ((PRESCALER) == IWDG_Prescaler_16) || \
7 r# u9 j7 \# l* [0 Z4 @2 s( t - ((PRESCALER) == IWDG_Prescaler_32) || \
. @; X9 Z' {' a0 C/ @) _" U1 P/ g - ((PRESCALER) == IWDG_Prescaler_64) || \7 Z) q0 l0 J1 s# Q+ ~
- ((PRESCALER) == IWDG_Prescaler_128)|| \
& c+ P/ @, c3 [9 e% h" ?9 ^ - ((PRESCALER) == IWDG_Prescaler_256))
复制代码
, J5 x% e/ k# e4 hIWDG_Flag8 C9 E1 K1 R) j" V0 x1 {" v
, S, g5 A3 @/ B* A& _7 Z9 R6 H- /** @defgroup IWDG_Flag " W6 A: y, M. f3 L
- * @{
7 I3 B( W. ~8 V# `/ E$ ^, m - */; c( r) Q4 V' ^% [/ [1 L! N3 \
- #define IWDG_FLAG_PVU ((uint16_t)0x0001)- B0 C7 i7 r8 y+ Q
- #define IWDG_FLAG_RVU ((uint16_t)0x0002)# x8 Z* F3 `" W, M1 T
- #define IS_IWDG_FLAG(FLAG) (((FLAG) == IWDG_FLAG_PVU) || ((FLAG) == IWDG_FLAG_RVU))* m9 y' p" z2 B/ v
- #define IS_IWDG_RELOAD(RELOAD) ((RELOAD) <= 0xFFF)
复制代码
. e$ S ^. P* ~" L2 @# ?' R7 O# e7 I+ D
03. 相关函数- G. c2 Y2 R$ t2 \, R
- /* Exported macro ------------------------------------------------------------*/- a( g0 E2 R9 W/ \4 c
- /* Exported functions --------------------------------------------------------*/6 i, P4 u4 [; t6 Q* `- x% L
: b' ^8 T% O- |1 v; q! b- /* Prescaler and Counter configuration functions ******************************/
. S8 x+ D4 _/ S o - void IWDG_WriteAccessCmd(uint16_t IWDG_WriteAccess);
+ t6 }' G, N( L - void IWDG_SetPrescaler(uint8_t IWDG_Prescaler);
6 V+ S8 X! I+ E/ t4 Z; _) ], i - void IWDG_SetReload(uint16_t Reload);
1 ]) Z) t7 O2 r- m - void IWDG_ReloadCounter(void);
7 H0 v6 c$ x# p- S7 B8 E
, t% H2 x7 [ s5 A' o- /* IWDG activation function ***************************************************/
/ s8 g! f8 Q4 U& s - void IWDG_Enable(void);
7 j, g5 R/ G0 s+ G1 ^3 }* I R
6 a+ V x" T. F2 u4 \6 a% E- /* Flag management function ***************************************************/& R/ e& O! Y1 y
- FlagStatus IWDG_GetFlagStatus(uint16_t IWDG_FLAG);
复制代码
4 i v! D" X5 `2 P6 {. n04. 结构体封装
7 x ]& }+ u' N/ w: ]; o" w- /** 9 w! I% \/ J/ G# V" N2 F v
- * @brief Independent WATCHDOG4 r2 G5 J. X# M8 s7 d6 r
- */' [: N! \% f6 i" ?1 a. L; [/ {& }
5 B3 i$ m0 z" f. F# q; e2 V( n- typedef struct
9 ~; \" \/ [" R/ k9 C0 C - {
P5 g L& D9 j - __IO uint32_t KR; /*!< IWDG Key register, Address offset: 0x00 */
% y' \$ x: x5 E - __IO uint32_t PR; /*!< IWDG Prescaler register, Address offset: 0x04 */& O1 H2 g$ s/ s/ b
- __IO uint32_t RLR; /*!< IWDG Reload register, Address offset: 0x08 */
1 C4 N; r$ }$ k* y - __IO uint32_t SR; /*!< IWDG Status register, Address offset: 0x0C */! E( g( {. V6 v; O5 k& d- Y
- } IWDG_TypeDef;
复制代码
6 H$ s& A' m8 r# O7 G: ?' {
+ ^ k+ _9 v2 ]" d' ^7 }8 u) b( e% o- t: O7 [" {6 f( m
|