描述

独立看门狗使用,独立看门狗时钟采用与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综合配置基础上设计,不保证在其它模块上有同样效果。