- /**************************************************************************************) F- B0 w* \5 C0 r; ]' G7 K
- * FunctionName : IWDTInit(). t; r+ b) t. `! C# m
- * Description : 独立看门狗初始化1 I- v, ^# `1 m# f& K r
- * EntryParameter : None
+ o1 N& Q g. i; C - * ReturnValue : None# r2 E0 _7 X, |& K4 X3 b
- **************************************************************************************/8 p) w# G I/ V5 a- B
- void IWDTInit(void)" t1 ^ ]% X& X& m( F6 ?% z' W9 }
- {2 |- S, T9 m! T' l' Y
- if (RCC_GetFlagStatus(RCC_FLAG_IWDGRST) != RESET)
: q4 c( W- d! p }0 T - {% y& x. K- u( ?" P& \6 R. Q
- RCC_ClearFlag(); // Clear reset flags
! \$ Q2 l0 G& \1 v2 | - } 6 N" q: u) X8 v! `
- # @/ F0 P" e6 O. N( J0 P5 ^5 l
- RCC_LSICmd(ENABLE); // 打开LSI T6 F9 H5 T1 }* h f) P
- while (RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET) ; // 等待直到LSI稳定 1 ?" A5 Q3 M5 a3 q
- 0 O' | O: y2 T" m6 s# k' ?) y
- IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); // 关闭IWDG_PR和IWDG_RLR的写保护
( C* ?; d0 V0 r) c& W1 B - IWDG_SetPrescaler(IWDG_Prescaler_64); // 设置预分频系数 m9 V( o2 q, Z& {; c* j4 |
- IWDG_SetReload(800); // 设置重装值为. ~" i0 M1 [8 @/ G3 u
- IWDG_ReloadCounter();4 ^* T1 X) U- n$ @
- IWDG_Enable(); // 使能看门狗 3 \8 t' `# g. i
- }9 c2 i+ S% k# k/ y, f
2 R8 s4 X$ Q; X3 B0 U# K5 x. T+ J- /**************************************************************************************+ e! |- G( p, j# u
- * FunctionName : WWDTInit()
( a. E9 G4 U: |- ^ - * Description : 窗口看门狗初始化
& l# j; B8 s" h& ? c G$ d - * EntryParameter : None( q( h; q3 H- L' O. h
- * ReturnValue : None
% {7 ?( B0 S# Z1 }2 M3 T% G - **************************************************************************************/
0 J6 K6 s! _( w3 Y; B - void WWDTInit(void)
S [ n0 z5 k: L! a6 x - {0 q% B7 j+ m, r
- if (RCC_GetFlagStatus(RCC_FLAG_WWDGRST) != RESET) // Check if the system has resumed from WWDG reset
1 ]/ V7 j) D1 @& h: r+ U2 D - {
2 V- V4 h* h9 m9 h; j - RCC_ClearFlag(); // Clear reset flags$ V! J( q/ ^. A9 y: _5 n4 D
- }
" p6 i9 L" V1 ~) i5 t* n$ } - 3 L% `8 f8 H$ h
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE); // Enable WWDG clock ' b* P T# }) h, t) m# A
- WWDG_SetPrescaler(WWDG_Prescaler_8); // WWDG clock counter = (PCLK1/4096)/8 = 244 Hz (~4 ms)) z- B) z$ G$ l0 C& Z$ u5 N
- WWDG_SetWindowValue(65); // Set Window value to 652 { p+ \0 X5 b& y% U* r2 Q/ B2 u
- WWDG_Enable(127); // Enable WWDG and set counter value to 127, WWDG timeout = ~4 ms * 64 = 262 ms
9 m: w" q% Q5 [/ k6 m5 o -
( o7 P( q! L# C# R7 H - WWDG_ClearFlag(); // Clear EWI flag
/ b4 M% [- w: q! t7 K - WWDG_EnableIT(); // Enable EW interrupt w$ l% L1 K+ Y6 J7 P. i+ m* U8 y
- }
复制代码- extern void IWDTInit(void); // 初始化看门狗
* F3 u$ D: D* f- c: l1 } - extern void WWDTInit(void);
复制代码
* n$ a. ^* |; S% x+ ]2 M! a* x |
拼命三郎,谢过谢过