目录一、窗口看门狗1、什么是窗口看门狗2、为什么叫窗口看门狗3、WWDG到底检测哪些异常①过晚喂狗程序卡死②过早喂狗程序跑飞4、WWDG几个重要点①时钟源②计数器③窗口值5、WWDG喂狗本质是什么6、窗口看门狗喂狗时间如何计算二、什么是独立看门狗IWDG1、什么是独立看门狗2、为什么叫独立3、IWDG的核心结构4、IWDG计数器5、IWDG喂狗本质6、IWDG没有窗口限制7、IWDG超时时间怎么算8、IWDG为什么如何关闭9、总结10、与窗口看门狗的对比一、窗口看门狗1、什么是窗口看门狗假设有一个程序正常情况下程序会不断循环如果程序发生异常例如CPU进入死循环整个设备就卡死了为了防止这种情况STM32增加了一个监督员。它就是Window Watchdog窗口看门狗它一直在计时程序你应该按正常节奏运行。如果程序没有按规定时间回应它就认为程序异常直接让 MCU 复位。2、为什么叫窗口看门狗窗口Window就是允许喂狗的时间范围。假设看门狗计数器从100开始倒数100 99 98 97 ... 60 59 58 ... 0STM32规定只有在3050之间才能喂狗这个范围就叫窗口过早和过晚都将使得看门狗触发系统复位。3、WWDG到底检测哪些异常①过晚喂狗程序卡死程序卡再某一个while(1)内程序卡死。②过早喂狗程序跑飞while(1){WWDG_SetCounter();}一直喂狗。窗口没到。提前刷新。立即Reset。所以WWDG可以检测✔ 程序太慢/✔ 程序太快这也是窗口二字的真正意义。4、WWDG几个重要点时钟源通常来自 APB1 时钟PCLK1分频精度高于独立看门狗的 LSI。计数器WWDG里面有一个7位递减计数器。最大值11111111270x7F窗口值可配置为 0x7F ~ 0x40 之间的数。 127~64之间的数①时钟源通常来自 APB1 时钟PCLK1分频精度高于独立看门狗的 LSI。②计数器WWDG里面有一个7位递减计数器。STM32规定WWDG启动以后计数器一般装载值为T 0x7F也就是127然后开始不断减一减少到最小窗口值64再减少一便复位要记住 STM32F103 的规定当计数器减到0x3F63时硬件立即产生复位。允许工作的范围是0x7F→0x40③窗口值STM32有一个寄存器WWDG_CFR里面有一个W[6:0] 可以设置窗口值在127~64之间比如是90那么你就可以在90~64之间喂狗大于90喂狗叫过早喂狗低于64它自动复位了这是属于过晚喂狗的范围了5、WWDG喂狗本质是什么很多人觉得喂狗是不是发送一个命令其实本质是重新写入计数器向WWDG_CR寄存器的T[6:0]位段写入新值定时器重新开始倒计时。所以喂狗 重装计数器。6、窗口看门狗喂狗时间如何计算WWDG 的时钟源有且只有一个APB1 总线时钟PCLK1。在 STM32F103 中PCLK1 通常是36MHz。但是WWDG 硬件内部强制给它串联了一个4096 分频器。这是硬件固定的软件改不了。所以进入 WWDG 的第一级时钟频率是可控分频WDGTB时基单元支持1、2、4、8 分频。假设为8分频对应的时基变为(4096 × 8) ÷ 36MHz ≈ 0.91ms因此计数值减少1需要花费0.91ms。假如窗口值设置为90喂狗可以在90~64之间127 减到 90 用了多久127−903737×0.91≈33.7ms约 33.7ms 后计数器第一次到达 90窗口正式打开。窗口持续时间90−642626×0.91≈23.7ms二、什么是独立看门狗IWDG1、什么是独立看门狗它也是一个硬件计时器。比如程序运行正常运行程序→定期喂狗→计数器重新开始→继续运行程序运行异常程序卡死→无法执行喂狗代码→计数器减到0→MCU复位和 WWDG 一样它也是为了防止死循环软件跑飞系统异常卡死2、为什么叫独立STM32F103 有多个时钟HSE外部高速晶振HSI内部高速时钟PLLAPB1APB2这些都属于系统时钟体系。但是 IWDG 不使用这些。它使用LSILow Speed Internal低速内部时钟。大约40kHz结构LSI → 40kHz→ 预分频器→ IWDG计数器 →Reset为什么这样设计比如系统时钟坏了CPU异常如果看门狗也依赖这些时钟那么看门狗可能也停止无法复位但是 IWDGLSI → 40kHz→ 预分频器→ IWDG计数器 的独立结构使得即使主时钟异常或者程序跑飞它依然可以工作。3、IWDG的核心结构STM32F103 的 IWDG 主要有预分频器Prescaler12位递减计数器Reload Counter4、IWDG计数器IWDG使用12位递减计数器所以最大值为2的12次幂为4095 范围为0 ~ 4095初始化时给它一个重装载值IWDG_SetReload(1000);那么计数器将会从1000减少至0后如果未喂狗将产生复位。5、IWDG喂狗本质本质给计数器重新赋值。IWDG_ReloadCounter();6、IWDG没有窗口限制这是它和 WWDG 最大区别。IWDG只要求在计数器减少至0以后前喂狗即可不要超过最大时间。7、IWDG超时时间怎么算还是时基单元那样STM32F103LSI为40HZ设置预分频256 计数频率40000/256≈156Hz一个计数约1/156≈6.4ms重装载值设为1000那么最大超时时间为6.4s8、IWDG为什么如何关闭独立看门狗IWDG一旦启动软件是无法关闭的唯一的“关闭”方式就是等待硬件复位。这听起来有点反直觉但正是 IWDG 被称为“独立”和“最后一道防线”的原因。IWDG 的设计初衷是极高的安全性和独立性。独立时钟IWDG 使用独立的低速内部时钟LSI即使主时钟PLL/HSE/HSI失效它依然运行。独立供电在某些低功耗模式下IWDG 仍能保持运行。防软件死锁如果软件跑飞恰好跳到了关闭看门狗的代码那看门狗就失去了意义。为了防止这种情况硬件设计上移除了“关闭”的软件接口。一旦写入键值启动KR寄存器写入0xCCCC启动位就被硬件锁死直到下一次复位。9、总结10、与窗口看门狗的对比