描述
独立看门狗使用,独立看门狗时钟采用与RTC公用的40KHz的时钟,与系统时钟分开,即使系统时钟挂了,看门狗还是可以工作,这也是独立看门狗的能起作用的原因。
HAL_IWDG_Refresh(&hiwdg); //看门狗重装函数
示例
根据使用的外设,关闭未使用外设的初始化
/* Initialize all configured peripherals */ MX_GPIO_Init(); //初始化GPIO // MX_ADC_Init(); // MX_WWDG_Init(); MX_IWDG_Init(); //初始化独立看门狗 // MX_USART1_UART_Init(); // MX_USB_DEVICE_Init(); // MX_TIM3_Init(); // MX_SPI1_Init(); // MX_I2C1_Init(); // MX_USART2_UART_Init(); // MX_TIM2_Init(); // MX_RTC_Init();
查看初始化程序如下,看门狗喂狗时间范围time = 4096重装值 * 4分频 / 40KHz(秒),约为400ms。
/* IWDG init function */ static void MX_IWDG_Init(void) { hiwdg.Instance = IWDG; hiwdg.Init.Prescaler = IWDG_PRESCALER_4; //4分频,频率为10KHz hiwdg.Init.Window = 4095; //看门狗窗口值,0~4095 hiwdg.Init.Reload = 4095; //看门狗重置值,0~4095,重置后会自减,减到0时MCU会复位。 if (HAL_IWDG_Init(&hiwdg) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); } }
编辑主函数如下,按下按键会导致看门口重启系统,闪灯2次提示。
/* Infinite loop */ /* USER CODE BEGIN WHILE */ HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); //开机/重启闪2次灯 HAL_Delay(100); HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); HAL_Delay(100); HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); HAL_Delay(100); HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);? while (1) ? { while(HAL_GPIO_ReadPin(KEY_GPIO_Port, KEY_Pin) == 1) //检测按键是否按下 { ? HAL_Delay(500); //延时500ms,足够让看门狗触发重启。 } HAL_IWDG_Refresh(&hiwdg); //重装看门狗数据为4095. ? /* USER CODE END WHILE */ ? /* USER CODE BEGIN 3 */ ? } /* USER CODE END 3 */
以上示例针对eefrog的STM32F042G模块,根据STM32cubeMX综合配置基础上设计,不保证在其它模块上有同样效果。