1、简介
IWDG(Independent Watchdog) 是 独立看门狗定时器,是一种用于嵌入式系统中的硬件看门狗,主要用于防止系统死机或程序跑飞。IWDG 通过定期喂狗(重置计数器)来确保系统正常运行,如果超时未喂狗,IWDG 将触发 MCU 复位,从而使系统重新启动。独立看门狗有着独立的时钟源,即内部的32KHz低速晶振信号,即使系统所有时钟源全部瘫痪也不会影响到IWDG的运行。
2、IWDG 使用方法
以NUCLEO-F429ZI为例,新建MDK Keil工程
时钟分频系数为32,计数值为1000
那么IWDG的溢出周期=1000*32(32KHz)=1s,因此系统上电运行后需要保证每间隔1s内不断将计数值设置为0初值,防止定时器计数溢出从而触发系统复位
main.c文件一览
/* 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 */
可见,及时刷新IDWG计数初值可以避免系统重启,如果程序跑飞则计时器刷新不能正常完成,看门狗就会强制触发系统复位。