窗口看门狗的作用是什么?窗口看门狗复位分析

控制/MCU

1882人已加入

描述

  一,窗口看门狗介绍

  独立看门狗的喂狗范围 0-X(X由预分频器和重装载值决定,最大值为0xFFF)

  独立看门狗相关介绍:传送门:独立看门狗

  相比于独立看门狗,窗口看门狗限定了喂狗时间段(由喂狗上限和喂狗下限值限定的喂狗范围)

  所以形象的称作窗口看门狗

  二,为什么需要窗口看门狗

  独立看门狗:在0-重载值之间任意时间都可以喂狗

  如果程序跑飞后又跑回正常

  或者跑乱的程序正好执行了刷新看门狗

  这样独立看门狗是不能检查到并复位芯片的

  窗口看门狗:限制了喂狗时间

  如果程序跑飞并且在限制的时间段喂狗是很困难的

  从而保证了程序的正常运行

  1234567891011

  三,独立看门狗和窗口看门狗比较

  独立看门狗:

  驱动:由LSI驱动,即使主时钟发生故障它仍有效

  适用场景:

  作为主程序之外能够完全独立工作

  对时间精度要求较低

  123456

  窗口看门狗:

  驱动:由APB1时钟分频后得到时钟驱动

  适用场景:

  在精确计时窗口起作用的程序

  12345

  四,独立看门狗工作原理

  

STM32

  参数:

  CNT:递减计数器

  窗口上限:寄存器设置

  窗口下限:0x3F

  随时间推移,计数器值递减,经过上窗口W和下窗口

  重载值-》上窗口:这段时间不允许喂狗,如果喂狗会使芯片复位

  上窗口-》下窗口:这段时间允许喂狗,下窗口位固定值(0x3F)

  下窗口:进入下窗口会产生复位

  T6位:

  0x3F=00111111

  在计数器到达0x3F之前第六位为1

  所以当计数器到达窗口下限前T6位为1,到达窗口下限后T6位为低电平

  复位:

  当计数器到达窗口下限(喂狗失败),会产生MCU复位信号,使芯片复位

  12345678910111213141516171819

  五,窗口看门狗复位分析

  

STM32

  递减计数器时钟:

  时钟来源PCLK1

  由于PCLK1时钟频率过高/4096

  再经过预分频器WDGTB

  预分频后作为递减计数器时钟

  WWDG_CR寄存器:

  T7:WDGA启动位-使能窗口看门狗

  T0-6 :6位递减计数器寄存器

  WWDG_CFR寄存器:

  W0-6:设置窗口看门狗上窗口值

  比较器:

  比较递减计数器CNT和上窗口寄存器大小关系

  递减计数器值》上窗口值 比较结果为1

  1234567891011121314151617

  分析一: 计数器值》上窗口值时,喂狗,会产生复位

  

STM32

  当计数器值》上窗口值时,比较器比较结果输出为1

  此时喂狗,与门1下端输入为1

  所以,或门1上端输入为1,导致与门2右端输入为1

  此时看门狗处于使能状态,与门2左端输入为1

  所以芯片产生复位

  123456

  分析二: 计数器值到达0x3F,会产生复位

  

STM32

  当计数器值到达0x3F时,T6位从1跳变到0

  或门1下端输入通过取反置1,所以或门1输出值为1,与门右侧输入值为1

  此时看门狗处于使能状态,与门2左端输入为1

  所以芯片产生复位

  12345

  总结:窗口看门狗有两种情况会产生复位

  1,喂狗时间大于窗口上限值

  2,计数器值从0x40减到0x3F

  如果启动看门狗并且允许中断,当递减计数器等于0x40时,会产生唤醒中断EWI,它可以用于喂狗避免WWDG复位

  12345

  窗口看门狗使用注意

  上窗口值W[6:0]必须大于下窗口值0x40(0x40产生唤醒中断),否则窗口看门狗就没有窗口了

  12

  六,窗口看门狗的超时时间

  

STM32

  时钟来源:

  Fpclk1除以4096再经过WDGTB预分频器

  f = Fpclk1 / (4096 * 2^WDGTB)

  123

  超时时间:

  窗口看门狗时钟周期(时钟频率f分之1) *

  t = 1/f * 看门狗计数器重载值

  123

  七,窗口看门狗相关寄存器

  

STM32

  直接写WWDG_CR[6:0]实现喂狗

  独立看门狗喂狗:向键值寄存器IWDG_KR写0xAAAA喂狗。将IWDG_RLR寄存器值重新装载到计数器

  123

  

STM32

  位0-6设置上窗口值

  位7-8设置时基-窗口看门狗的时钟频率

  位9提前唤醒中断使能位(1:使能)当计数器到达0x40产生中断

  1234

  

STM32

  WWDG_SR只用到位0:提前唤醒中断标志

  当计数器达到0x40时,由硬件置1,需软件清零

  123

  八,窗口看门狗相关库函数

  stm32f10x_wwdg.h中找到相关函数头文件

STM32

  九,窗口看门狗相关配置步骤

 

STM32

  十,窗口看门狗代码:

  HARDWARE/WDG目录新建wgd.h

STM32

  HARDWARE/WDG目录新建wgd.c

STM32

  USER/main.c主函数编写

STM32

  以上程序实现:

  程序初始化LED点亮延时300ms熄灭

  窗口看门狗从0x7F开始递减计数,上窗口为0x5F,下窗口为0x7F

  计数器到达0x40进入提前唤醒中断,

  在中断函数中进行喂狗操作,计数器翻转(从0x7F重新计数),LED1翻转

  以此循环。。.

  翻转频率为从0x7F计数到0x40,翻转时间可以根据公式计算

  正常喂狗:

  LED0亮300ms之后熄灭,LED1不断闪烁

  喂狗失败(注释掉喂狗函数):

  程序不断复位,LED0闪烁

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分