看门狗大家应该都不陌生,STM32内部带有独立看门狗和窗口看门狗两种;其中独立看门狗依赖于内部的晶振LSI进行工作,窗口看门狗依赖于系统时钟工作;
看门狗的作用,防止程序跑飞无法实现自复位而存在;如果没有看门狗,程序挂掉,可能需要去给MCU下电,重新上电才能继续工作,由此可见,看门狗在一个系统中的地位是举足轻重的。
操作很简单,在重装值减到0之前,把寄存器值重装一下即可,让寄存器值始终大于0;
1、工作原理简介
当通过对关键字寄存器 (IWDG_KR) 写入值 0xCCCC 启动独立看门狗时,计数器开始从复位 值 0xFFF 递减计数。当计数器计数到终值 (0x000) 时会产生一个复位信号(IWDG 复位)。任何时候将关键字 0xAAAA 写到 IWWDG_KR 寄存器中,IWDG_RLR 的值就会被重载到计 数器,从而避免产生看门狗复位。
2、喂狗周期范围
3、设计思考,为什么在线调试MCU时,MCU不复位呢?
IWDG:重载寄存器 (IWDG_RLR)重装值没有减到0;
引申一个话题:外部看门狗,在调试时如何保证不复位?
可以使用Jlink把RST的电平稳住,不让看门狗芯片拉低RST电平;
4、IWDG引发的常见问题
内部FLASH擦写周期大于IWDG的喂狗周期;
因为内部FLASH操作时,是使用总线的方式操作寄存器,总线处于被占用状态,在完成FLASH指令操作前,无法做出任何动作,导致喂狗信号发不出去,喂狗超时,MCU复位;当年就吃过这个亏,主要针对128KB的扇区块擦除而言,大概需要800ms;IWDG周期最好设置在1S以上;
外部看门狗1.6S周期,不存在这个问题。
欢迎关注微信公众号,更多原创等你。