看门狗
- 实质是一个定时器,必须在指定时间下喂狗(即重装计时器),若没有,则会生成复位信号。看门狗 = 手动重装的、自减计数的定时器
- STM32有两个看门狗:独立看门狗IWDG(窗口精度低)、窗口看门狗WWDG(窗口精度高)
- 防止死循环的两种做法
- 软件:将while写成一个有timeout的while
- 硬件:使用看门狗
独立看门狗

- 使用LSI作为时钟,独立性高(低功耗运行不会影响LSI和LSE)
- 时间窗口只有终点,精度低,即timeWindow = [start,0]
- start=重装值
- 超时时间计算 = 计数频率/分频系数/(CNT - 0)
- 键寄存器:16bit值等价于控制寄存器的一个控制位
- 干扰时可能导致1b控制位错误,因此用32b来表示可以降低干扰概率
- 写入0xCCCC=启用IWDG;写入0xAAAA=喂狗;写入0x5555=解除写保护;写入其他=启用写保护。
- 有重装寄存器,重装(喂狗)=写入重装寄存器+启用喂狗
窗口看门狗
- 使用PCLK1作为时钟,独立性低
- 时间窗口有起点和终点,精度高,即timeWindow = [start,end]
- CNT中只有前7位是计数位(且第7位是有效位),而第8位为看门狗使能
- start=看门狗配置寄存器值
- end =0x40(当CNT减到0x3F时,有效位为0,此时也会产生复位)
- 超时时间计算、窗口时间计算:见手册

- 没有重装寄存器,重装(喂狗)=手动写入CNT
- 当CNT=0x40时,可以产生早期唤醒中断
- 在中断里可以进行重装
- 作用:对于不重要的任务,可以只是用看门狗做超时提示,而不进行系统复位