STM32
直播中

h1654155275.5661

7年用户 963经验值
私信 关注
[问答]

独立看门狗(IWDG)和窗体看门狗(WWDG)的使用区别在哪

怎样去编写独立看门狗的配置工作代码以及主逻辑区代码?
怎样去编写窗口看门狗的配置工作代码以及主逻辑区代码?
独立看门狗(IWDG)和窗体看门狗(WWDG)的使用区别在哪?


回帖(1)

高淑贤

2021-8-3 16:10:28
  本文是通过网上收集到的资料汇总而成,感谢各大牛人的铺路。
  萌狗的定义
  单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗电路就是为了避免这种情况的发生。看门狗的作用就是在一定时间内(通过定时计数器实现)没有接收喂狗信号(表示 MCU 已经挂了),便实现处理器的自动复位重启(发送复位信号)。
  STM32的看门狗
  STM32芯片一共有两个看门狗,一个是独立看门狗(IWDG),另一个是窗体看门狗(WWDG)
  先来讲讲独立看门狗:
  STM32 的独立看门狗由内部专门的 40Khz 低速时钟驱动,即使主时钟发生故障,它也仍然有效。这里需要注意独立看门狗的时钟是一个内部 RC 时钟,所以并不是准确的 40Khz,而是在 30~60Khz 之间的一个可变化的时钟,只是我们在估算的时候,以 40Khz 的频率来计算,看门狗对时间的要求不是很精确,所以,时钟有些偏差,都是可以接受的。
  独立看门狗有自由运行的递减计数器
  独立看门狗的时钟由独立的RC振荡器提供(可在停止和待机模式下工作)
  独立看门狗被激活后,则在计数器计数至0x000时产生复位
  独立看门狗的配置工作代码:
  
  主逻辑区代码:
  
  再来看看窗体看门狗
  窗口看门狗(WWDG)通常被用来监测由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。除非递减计数器的值在 T6 位(WWDG-》CR 的第六位)变成 0 前被刷新,看门狗电路在达到预置的时间周期时,会产生一个 MCU 复位。在递减计数器达到窗口配置寄存器(WWDG-》CFR)数值之前,如果 7 位的递减计数器数值(在控制寄存器中)被刷新, 那么也将产生一个 MCU 复位。这表明递减计数器需要在一个有限的时间窗口中被刷新。
  条件复位
  ─当递减计数器的值小于0x40,(若看门狗被启动)则产生复位。
  ─当递减计数器在窗口外被重新装载,(若看门狗被启动)则产生复位。
  如果启动了看门狗并且允许中断,当递减计数器等于0x40时产生早期唤醒中断(EWI),它可以被用于重装载计数器以避免WWDG复位
  
  窗口看门狗的计数器低 6 位 窗口看门狗的配置工作代码:
  
  
  主逻辑区代码:
  
  使用区别
  再来分析一下独立看门狗(IWDG)和窗体看门狗(WWDG)的区别:
  (1)独立看门狗没有中断,窗口看门狗有中断
  (2)独立看门狗有硬件软件之分,窗口看门狗只能软件控制
  (3)独立看门狗只有下限,窗口看门狗又下限和上限
  (4)独立看门狗是12位递减的。窗口看门狗是7位递减的
  (5)独立看门狗是用的内部的大约40KHZ RC振荡器,窗口看门狗是用的系统时钟APB1ENR
  功能不重复说明
  功能不重复,独立看门狗用于防止系统死机,而窗口看门狗用于保证系统运行的正确性。
  比如一个系统有一个工作线程和一个IDLE线程,系统正常运行时,工作线程运行200ms,暂停100ms.必须严格保证此运行时序。
  此时就可以在工作线程中启动一个窗口看门狗,在IDLE线程中清狗。
  如果不足200ms就进到了IDLE线程,说明工作线程未能达到工作时间,出现了故障,窗口看门狗复位就被被触发。
  如果超过300ms还未进入IDLE线程,说明工作线程未能及时完成,也会触发窗口看门狗。
  独立看门狗应用就很简单了,系统必须在计数器归零前喂狗,否则看门狗触发,系统复位。
  总之就是,窗口看门狗用于保证已知时序的系统正常运行,独立看门狗保证系统不死机,两个看门狗各有其应用场景,所以不重复。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分