工程代码:https://pan.baidu.com/s/1Qlfg1_br0tN6yy0fcDwCjg,密码:fhh2
(一)概述
看门狗功能: 看门狗用于检测和解决由软件错误引起的故障,发生软件错误时,看门狗产生复位,重启启动软件。
看门狗工作原理:看门狗带计数器功能,当计数器达到给定的超时值时,触发一个中断(仅适用于窗口型看门狗)或产生系统复位。所以在程序运行中,需要及时给看门狗重新设定计数器(这个行为也称“喂狗”),看发生软件错误时,不能及时喂狗,看门狗就会产生复位。
STM32有两个看门狗。两个看门狗介绍如下:
①独立看门狗。由专用的低速时钟(LSI)驱动,即使主时钟发生故障时仍能工作,用于看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合。
②窗口看门狗。由APB1时钟分频后得到时钟驱动,用于看门狗在精确计时窗口起作用的应用程序。
(二)独立看门狗介绍
翻阅STM32手册关于独立看门狗的部分,独立看门狗有四个主要性能:
①自由运行的递减计数器(从设定值往下递减置0,喂狗就是重设设定值)
②时钟由独立的RC振荡器提供(可在停止和待机模式下工作)
③看门狗被激活后,则在计数器计数至0x000时产生复位(软件发生错误无法及时喂狗)
④独立看门狗没有中断服务函数,只能在主函数中进行喂狗
(三)独立看门狗寄存器
①IWDG_KR寄存器用于控制独立看门狗状态,通过往IWDG_KR寄存器写入不同的值,控制独立看门狗的状态。
写入0x5555表示允许访问IWDG_PR和IWDG_RLR寄存器(往IWDG_KR写入0x5555值之后才能操作IWDG_PR和IWDG_RLR寄存器)
写入0xAAAA表示用IWDG_RLR寄存器中的值设置看门狗计数器(这个就是喂狗,防止计数器递减为0产生复位)
写入0xCCCC表示使能独立看门狗,看门狗开始工作(使能之后看门狗不能关闭,直到下一个软件重启)
②IWDG_PR寄存器是预分配寄存器,用于把输入的时钟分频后输出给计数器
③IWDG_PLR寄存器,每次喂狗时把IWDG_PLR寄存器的值赋给计数器
④IWDG_SR寄存器用于标志IWDG_PR和IWDG_RLR寄存器的值是否发生改变(一般不用)
(四)窗口看门狗介绍
窗口看门狗的功能与独立看门狗的功能相识,也是用于监控软件错误,并产生复位。窗口看门狗具有以下几个特性:
①可编程的自由运行递减计数器(与独立看门狗一样都是递减计数器)
② 条件复位
─ 当递减计数器的值小于0x40, 则产生复位(独立看门狗是计数值为0时才产生复位)。
─ 当递减计数器在窗口外被重新装载, (若看门狗被启动)则产生复位。
注:当窗口看门狗的计数值大于窗口值的范围内时,赋值也会产生复位,这就是串口看门狗名字的由来吧
举例:假如窗口看门狗的窗口值为0x40~0x6E,如果你在计数器大于0x6E时就喂狗,产生复位,如果你在计数器递减小于0x40时还没有喂狗,产生复位。
③如果启动了看门狗并且允许中断,当递减计数器等于0x40时产生早期唤醒中断(EWI),它可以被用于重装载计数器以避免WWDG复位(所以看门狗可以在中断服务函数中进行喂狗)。
(五)窗口看门狗寄存器
①WWDG_CR寄存器,WDGA位用于开启关闭看门狗;T[6:0]用于设置喂狗时的值。
②WWDG_CFR寄存器,EWI用于软件触发看门狗产生中断;WDGTB[1:0]设置时钟的预分频值;W[6:0]窗口值,当计数器的值大于窗口值时,进行喂狗会产生复位。
③EWIF寄存器,EWIF时看门狗产生复位的标志位。