窗口看门狗和独立看门狗区别

本文详细介绍了在Cortex-M系列芯片中独立看门狗与窗口看门狗的工作原理及区别。独立看门狗通过定时计数实现复位保护,而窗口看门狗则在特定的时间窗口内限制复位条件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在cortex-M系列芯片上进行看门狗编程的时候发现了关于看门狗有两个:(独立)看门狗和窗口看门狗。然后就查找了下网络资源,对这两个看门狗做了区分。

1、相同点

    都是为了防止CPU跑飞

2、独立看门狗

    根据内部看门狗时钟频率,装载寄存器定一个时间值,比如是1000,那么独立看门狗就会按照时钟频率,从1000开始向下每隔一个时钟周期减1,如果在减到0之前,你用程序代码重新向向下计数器里面写1000(喂狗),那么定时器会重新从1000开始向下递减。如果在减到0的时候,你还没有喂狗(用新的数值覆盖计数器),就会产生复位信号。

3、窗口看门狗

    根据系统时钟频率,装载一个初始值到向下计数器(假设还是1000),并且设置一个窗口值(小于装载到计数器的初始值,假设是500),窗口看门狗一般会定死窗口下线值是64。计数器从1000开始向下减,在减到500之前(1000到500间),是不允许你去喂狗的,一旦喂狗,就会产生复位信号。只有计数器值减到上限值之后(500到64),才允许你去喂狗。当计数器减到下限值(64到0之间),如果喂狗,也会产生复位信号,当减到0之后,自动产生复位信号。

    所以窗口看门狗实际上就是设置一个窗口(上下限),在这个范围内,你才允许你去喂狗,只要不在这个范围之内,都会复位。

4、区别总结

    大致区别在两方面:

    1、窗口看门狗计时时间比独立看门狗精准    

        窗口看门狗使用的是系统时钟源

    2、窗口看门狗严格限定喂狗时间段,独立看门狗则是只要没有到时间,都能喂狗

### 窗口看门狗独立看门狗区别 STM32具备两种类型的看门狗独立看门狗(IWDG)窗口看门狗(WWDG),两者均为递减计数器,在特定条件下触发复位操作,但工作方式有所不同。 #### 计数机制 - **独立看门狗**采用简单的递减计数模式。一旦启动,其内部寄存器中的预设值会持续减少直至归零,期间若未及时刷新则引发系统重启[^1]。 - **窗口看门狗**不仅设有下限阈值(默认为`0x40`)作为最终时限,还定义了一个可调的上限参数。这意味着只有当计数值位于上下边界之内时才能安全地进行喂养动作;超出此范围均会导致异常响应——即提前或延迟处理都将引起重置事件发生。 #### 配置灵活性 - 对于IWDG而言,除了初始装载量外几乎不存在其他调整选项,因此它更适用于那些对实时性能要求较低的应用场合[^2]。 - 相较之下,WWDG允许开发者自定义更多属性,比如可以通过修改相关寄存器来设定不同的预警级别以及改变分频系数等,从而适应更为复杂多变的任务调度需求。 #### 应用场景 - 当面对较为宽松的时间约束或是希望简化设计流程的情况下,可以选择前者—独立看门狗;而如果项目涉及到严格控制程序流顺序或者需要密切监视多个并发活动的状态变化,则后者—窗口看门狗将是更好的解决方案。 ```c // 初始化并启用独立看门狗 (伪代码) void init_iwdg(void){ IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); IWDG_SetPrescaler(IWDG_Prescaler_256); // 设置预分频因子 IWDG_SetReload(4095); // 设定最大加载值 IWDG_ReloadCounter(); // 刷新计数器 IWDG_Enable(); // 启动看门狗 } // 使用HAL库初始化窗口看门狗 (C语言) #include "stm32f1xx_hal.h" static void SystemClock_Config(void){...} int main(){ HAL_Init(); SystemClock_Config(); WWDG_HandleTypeDef hwwdg; hwwdg.Instance = WWDG; hwwgd.Init.Prescaler = WWDG_PRESCALER_8; hwwdg.Init.Window = 60; /* 上限 */ hwwdg.Init.Counter = 70; /* 起始计数值 */ if(HAL_WWDG_Init(&hwwdg)!= HAL_OK){ Error_Handler(); } while (1){ __HAL_RCC_IWDG_RESET(); // 喂狗操作 HAL_Delay(1000); // 模拟延时等待 } } ```
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值