STM32F030系列IWDG和WWDG的配置

1、(IWDG独立看门狗)

独立看门狗由内部低速时钟LSI提供计数时钟,8 位分频,12位计数,需要定期喂狗(重载数值 ReloadCounter),如果计数值减为0了,还没有重载数值,则会响应复位事件。

 

//看门狗的配置为了避免程序跑飞了,计数达到就会强制复位
void IWDG_Config(void)
{ //喂狗时间4S
#ifdef IWDG_OPEN    
    IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);        //打开独立看门狗的寄存器操作权限
    IWDG_SetPrescaler(IWDG_Prescaler_64);//预分频系数40KHz(LSI)/64=625HZ
    IWDG_SetReload(2500);//设置重装载值
    IWDG_ReloadCounter();//喂狗重新计数T=1/f  f=40KHZ/(2500*64)
    IWDG_Enable();      
#endif    
}

 

2、(WWDG窗口看门狗)

窗口看门狗由APB1(RCC_APB1Periph_WWDG)提供计数时钟,2 位分频,7位计数,需要定期喂狗(更新计数值),如果计数值减为0x40了,还未更新计数值,则会响应复位事件。

        当倒计数值要到设置的窗口值,产生窗口看门口中断时,马上喂狗。当倒计数值要到设置的窗口值,产生窗口看门口中断时,没有及时喂狗,将复位重启。

两者的区别:

 

1、时钟不同,IWDG使用内部低速时钟,WWDG使用系统时钟APB1;

 

2、IWDG只有下限,WWDG有上下限;

 

3、IWDG没有中断,WWDG有中断;

 

4、IWDG有12倒计数器,WWDG只有7位的计数器;

### STM32 中独立看门狗 (IWDG) 窗口看门狗 (WWDG) 的区别及用法 #### 独立看门狗 (Independent Watchdog, IWDG) 独立看门狗是一种硬件机制,用于监控应用程序运行状态并防止程序陷入死循环或异常情况。一旦计数值达到零,则会触发系统复位。其主要特点如下: - **特性** - 计数器自动递减至零时引发复位操作。 - 可通过软件重新加载计数器以阻止复位发生[^1]。 - **配置方法** 为了启用初始化 IWDG,在 HAL 库中可以调用 `HAL_IWDG_Init()` 函数设置预分频系数与重载值,并利用 `HAL_IWDG_Refresh()` 来刷新计数器从而避免超时复位的发生。 ```c // 初始化结构体定义 IWDG_HandleTypeDef hiwdg; void MX_IWDG_Init(void){ __HAL_RCC_IWDG_CLK_ENABLE(); hiwdg.Instance = IWDG; hiwdg.Init.Prescaler = IWDG_PRESCALER_32; // 设置预分频因子 hiwdg.Init.Reload = 4095; // 设置重装载值 if(HAL_IWDG_Init(&hiwdg)!= HAL_OK){ Error_Handler(); // 错误处理函数 } } // 定期调用来刷新计数器 void Refresh_WatchDog(void){ HAL_IWDG_Refresh(&hiwdg); } ``` #### 窗口看门狗 (Window Watchdog, WWDG) 相比之下,窗口看门狗提供了更严格的监视功能,不仅能够检测到长时间未响应的情况,还能识别过早喂狗的行为。具体而言: - **特性** - 当计数器降至设定阈值之下而仍未被更新时将引起复位事件;反之如果提前于规定范围内进行了清零也会造成同样的后果。 - 需要在特定的时间窗内完成喂狗动作才能有效预防复位现象出现[^3]。 - **配置方式** 对于 WWDG 的启动同样依赖于 HAL 提供的相关 API 进行参数指定以及使能控制。下面给出一段基于 HAL 的 C 语言代码片段展示如何实现这一过程: ```c // 初始化结构体声明 WWDG_HandleTypeDef hwwdg; void MX_WWDG_Init(void){ __HAL_RCC_WWDG_CLK_ENABLE(); hwwdg.Instance=WWDG; hwwdg.Init.Window=0x7F; // 设定时间窗口上限 hwwdg.Init.EWSG=0x3F; // 设置早期唤醒中断阶段宽度 hwwdg.Init.TimerPrescaler=WWDG_PRESCALER_8;// 配置预分频比例 if(HAL_WWDG_Init(&hwwdg)!= HAL_OK){ Error_Handler(); // 处理错误情形 } // 启动 WWDG 并开启 EWI(Early Wakeup Interrupt) HAL_WWDG_Start(&hwwdg); // 清除可能存在的待决标志位 __HAL_WWDG_CLEAR_FLAG(&hwwdg,WWDG_FLAG_EWKUP); } // 实现喂狗逻辑 void Feed_Dog(void){ HAL_WWDG_SetCounter(&hwwdg,hwwdg.Init.Window); // 将计数器设回初始位置 } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值