看门狗

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

独立看门狗

image-20260108161740943

  • 使用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,此时也会产生复位)
  • 超时时间计算、窗口时间计算:见手册
  • image-20260108170632107
  • 没有重装寄存器,重装(喂狗)=手动写入CNT
  • 当CNT=0x40时,可以产生早期唤醒中断
  • 在中断里可以进行重装
  • 作用:对于不重要的任务,可以只是用看门狗做超时提示,而不进行系统复位