IWDG和WWDG

192 阅读2分钟

1. IWDG

1.1 简介

全称:Independent watchdog,独立看门狗
本质:能产生系统复位信号的计数器
特性:递减的计数器 
     时钟由独立的RC振荡器提供(可在待机和停止模式下允许)
     看门狗被激活后,当递减计数器计数到0x000时产生复位

喂狗:在计数器计数到0之前,重装载计数器的值,防止复位

1.2 作用

  • 异常:外界电磁干扰或者自身系统(硬件或软件)异常,造成程序跑飞,如:陷入某个不正常的死循环,打断正常的程序运行
  • 作用:主要用于检测外界电磁干扰,或硬件异常导致的程序跑飞问题
  • 应用:在一些需要高稳定性的产品中,并且对时间精度要求较低的场合

独立看门狗是异常处理的最后手段。

1.3 工作原理

image.png CPU必须及时喂狗,否则系统复位重启

1.4 IWDG框图

image.png 启用IWDG后,LSI时钟会自动开启,而LSI时钟频率不精确。F1用40KHz

1.5 寄存器

  • 键寄存器(IWDG_KR)

      写入0xAAAA,喂狗
      写入0x5555,解除PR和RLR寄存器写访问保护
      写入0xCCCC,启动IWDG工作
    
  • 预分频寄存器(IWDG_PR)

      设置IWDG时钟预分频系数
    
  • 重装载寄存器(IWDG_RLR)

      存放重装载值,低12位有效,即最大值为4096
    
  • 状态寄存器(IWDG_SR)

      用于判断预分频值和重装载值是否已经被更新
    

1.6 溢出时间计算

  • HAL库计算溢出时间公式

image.png

  • 寄存器设置分频系数的方法

image.png

  • 寄存器计算溢出时间公式

image.png

1.7 IWDG配置步骤

  1. 取消PR/RLR寄存器写保护,设置IWDG、预分频系数和重装载值,启动IWDG

     HAL_IWDG_Init()
    
  2. 及时喂狗,即写入0XAAAA到IWDG_KR

     HAL_IWDG_Refresh()
    

2. WWDG

2.1 简介

    全称:Window watchdog,窗口看门狗
    本质:能产生系统复位信号和提前唤醒中断的计数器

2.2 特性

  • 递减的计数器
  • 当递减计数器值从0x40减到0x3F时复位(即T6位跳变到0)
  • 计数器的值大于W[6:0]值时喂狗会复位
  • 提前唤醒中断(EWI):当递减计数器等于0X40时可产生

2.3 喂狗

在窗口期内重装载计数器的值,防止复位

2.4 作用

用于监测单片机程序运行时效是否精确,主要用于检测软件异常。应用于需要精准检测程序运行时间的场合

2.5 工作原理

image.png

2.6 WWDG框图

image.png

2.7 寄存器

  • 控制寄存器(WWDG_CR)

      用于使能窗口看门狗工作,以及重装载计数器值(即喂狗)
    
  • 配置寄存器(WWDG_CFR)

      用于使能窗口看门狗提前唤醒中断,设置预分频系数,设置窗口上限值
    
  • 状态寄存器(WWDG_SR)

      用于判断是否发送了WWDG提前唤醒中断
    

2.8 超时时间计算

  • 计算公式

image.png