
前言 今天总结“STM32F103 WDG看门狗”,STM32F1有两个看门狗,IWDG独立看门狗和WWDG窗口看门狗,今天将两个看门狗一并总结了。9 }5 B. [/ V! ~. |! ` 总结一下二者的区别:+ v3 b" w5 ]" |8 K& ` ; ]/ u8 P0 W2 G* v3 o* Z5 I 1)、IWDG使用内部低速时钟LSI,WWDG使用系统时钟APB1ENR 2)、IWDG没有中断,WWDG有中断, a& V, R! l3 E# j. B' s& h 3)、IWDG是12位递减的。WWDG是7位递减的 2 t" n4 Y$ A7 o& s& x 4)、IWDG只有下限,WWDG有下限和上限 5)、IWDG最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合。 WWDG最适合那些要求看门狗在精确计时窗口起作用的应用程序。: f! }7 h$ b0 D/ E- u 看门狗在长期工作的产品中用到比较多,作用很简单,防止死机。看门狗的功能也可用于定时计数等。 9 \, o7 [' Y9 b4 S" r) ^# _ 本着免费分享的原则,将总结的工程源代码分享给大家,还望看到的朋友关注一下微信公众号,并将文章分享给你的朋友。 内容讲解 : f+ N2 h# e8 q! i" P. N 工程概要说明: IWDG工程基于“EXIT中断”工程修改而来,因为使用到按键来喂狗。系统复位,快速闪烁两次LED,接下来间隔1秒串口打印一个计数值(从0 - 8),在8秒的时间内按键喂狗,计数值会归零;如果不喂狗则会复位。3 m! ]8 {( N2 d% p) E0 Z WWDG工程基于“TIM定时”而来,因为使用了定时的功能。我提供的工程喂狗的时间是57ms(刚好最大值),间隔57ms喂狗一次,不会复位(LED快速变化, 快速打印WWDG...); 如果大于57ms(自己可以修改一下)未喂狗则会复位(LED慢速变化, 不断打印Reset...)。( t( g2 H/ o0 J+ x3 X ; k& n2 L5 k" |9 S9 q 提供的工程简单明了,详细中文注释,方便自己方便大家。 P W1 C% L# v5 w* } 关于“STM32F103 WDG看门狗” 我把重要的几点在下面分别讲述:/ T, C% N- i: T8 E# P# o( ^ 一、IWDG的配置 + q0 ]6 [+ ]: X. `6 u A ![]() " [' K% s3 ?& ?5 Q ![]() 该函数位于IWDG工程的main.c文件下面;- o' u! c5 O+ l4 m 提供的框图为见资料。1 e( ~" ]7 J7 y% K 我想大部分关心的是这个8秒的喂狗时间是怎样计算出来的,其实,看了程序的注释和框图大概就应该能明白了。40K分频256之后就只能在1秒计数156次, * \' R" u: n4 U( b9 C& ` 而要计满1250(40000/32)就需要8秒。不明白的朋友请自己分析一下哦。 二、WWDG的配置 ![]() ![]() 该函数位于WWDG工程的main.c文件下面; 提供的框图为见资料。: k# i2 p0 O; L& g$ o 1 A" z0 M' [5 T$ a# x3 l# t; w+ j! b 这里也主要讲一下最大喂狗时间57ms.分频之后只能在1秒计数1099次,要计满63个大概就需要57ms,这个值就是最大值。: x; U! ^# i! z/ B 这个工程需要自己修改这个时间来测试,建议都自己亲手修改代码测试一下。 三、WWDG主函数 ![]() 该函数位于WWDG工程的main.c文件下面; 通过串口打印的信息就可以清楚的知道系统复位了没有。; I _0 m# D; Q8 m) H6 y2 _1 @ 亲手修改来大于57ms的时间试试就知道。 四、今天的重点9 {% r! q" w( x! ]8 V A.WWDG计数器的范围为:0x40 --- 0x7F ( A4 h. B( L* b5 K4 b3 J0 B# C2 @- c B.当微控制器进入调试模式时(Cortex-M3核心停止),根据调试模块中的DBG_WWDG_STOP 配置位的状态, WWDG的计数器能够继续工作或停止。9 W4 X3 o- S' C% c6 J5 r$ c) u% _, V C.没有两个寄存器,编程时请细看寄存器 / D1 u+ L% ^7 U- l5 z 说明 今天提供的软件工程基于STM32F103大容量芯片,其实只要适当修改工程的部分配置,STM32F1的芯片都适用。8 q' a) A' E- ~3 C + ?/ A. p3 ^7 m0 z/ g; B |