1、简介
IWDG(Independent Watchdog) 是 独立看门狗定时器,是一种用于嵌入式系统中的硬件看门狗,主要用于防止系统死机或程序跑飞。IWDG 通过定期喂狗(重置计数器)来确保系统正常运行,如果超时未喂狗,IWDG 将触发 MCU 复位,从而使系统重新启动。独立看门狗有着独立的时钟源,即内部的32KHz低速晶振信号,即使系统所有时钟源全部瘫痪也不会影响到IWDG的运行。
2、IWDG 使用方法
以NUCLEO-F429ZI为例,新建MDK Keil工程
![1742310782770261.png 4VJZNXZ81Z%2]AQCMOAFD5C.png](http://uphotos.eepw.com.cn/1709346044/pics/1742310782770261.png)
时钟分频系数为32,计数值为1000
那么IWDG的溢出周期=1000*32(32KHz)=1s,因此系统上电运行后需要保证每间隔1s内不断将计数值设置为0初值,防止定时器计数溢出从而触发系统复位
main.c文件一览
![1742312579611565.png @JIYOD3BMDQ]N4B2C)}9IHH.png](http://uphotos.eepw.com.cn/1709346044/pics/1742312579611565.png)
/* USER CODE BEGIN 2 */
printf("系统重启完成\n");
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
// printf("IWDG计数值刷新前\n");
// HAL_IWDG_Refresh(&hiwdg);//32KHz/64,1000=2s
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}3、运行效果
由于没有及时复位IDWG计数初值,因此每间隔1s系统会发生重启

while循环间隔800ms,重置IDWG计数初值
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
HAL_IWDG_Refresh(&hiwdg);//32KHz/64,1000=2s
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
printf("系统正常运行中\n");
HAL_Delay(800);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */![1742313049935574.png TVTC17XWS@9]@D1J_P7}0UF.png](http://uphotos.eepw.com.cn/1709346044/pics/1742313049935574.png)
可见,及时刷新IDWG计数初值可以避免系统重启,如果程序跑飞则计时器刷新不能正常完成,看门狗就会强制触发系统复位。
我要赚赏金
