HAL库之看门狗

一、看门狗的介绍

(1)独立看门狗(IWDG):独立看门狗由专用的低速时钟(LSI)驱动,即使主时钟发生故障它也仍然有效。因此叫独立,同时因此在低功耗模式下不能启动看门狗,低功耗详情见之前文章。IWDG比WWDG更精确。只要没有到时间,都能喂狗。IWDG挂载在LSI上

(2)窗口看门狗(WWDG):设置一个窗口值,窗口下限一般是定死的,窗口上限可以自定义(肯定要比自动重装载值小),只有在这个窗口内喂狗才行,否则将引起芯片复位。WWDG最适合那些要求看门狗在精确计时窗口起作用的应用程序。严格限定喂狗时间段。WWDG挂载在APB1总线上。

         T[6:0]就是 WWDG_CR 的低七位,W[6:0]即是 WWDG->CFR 的低七位。T[6:0]就是窗口看门狗的计数器,而 W[6:0]则是窗口看门狗的上窗口,下窗口值是固定的(0X40)。当窗口看门狗的计数器在上窗口值之外被刷新,或者低于下窗口值都会产生复位。上窗口值(W[6:0])是由用户自己设定的,根据实际要求来设计窗口值,但是一定要确保窗口值大于 0X40,否则窗口就不存在了。

HAL库之看门狗_第1张图片

二、独立看门狗配置

HAL库之看门狗_第2张图片

//看门狗初始化
void MX_IWDG_Init(void)
{
  hiwdg.Instance = IWDG;
  hiwdg.Init.Prescaler = IWDG_PRESCALER_4;
  hiwdg.Init.Reload = 4095;
  if (HAL_IWDG_Init(&hiwdg) != HAL_OK)
  {
    Error_Handler();
  }
}

//需要511ms以内喂狗
HAL_IWDG_Refresh(&hiwdg); 

三、窗口看门狗配置

HAL库之看门狗_第3张图片

HAL库之看门狗_第4张图片

HAL库之看门狗_第5张图片         也就是程序不得早于14.336ms进行刷新,不得晚于65.536ms进行刷新。否则系统将会产生复位。在窗口刷新喂狗示意图如下。 32000的值由来是APB1时钟

//窗口看门狗初始化
void MX_WWDG_Init(void)
{
  hwwdg.Instance = WWDG;
  hwwdg.Init.Prescaler = WWDG_PRESCALER_8;
  hwwdg.Init.Window = 113;
  hwwdg.Init.Counter = 127;
  hwwdg.Init.EWIMode = WWDG_EWI_ENABLE;
  if (HAL_WWDG_Init(&hwwdg) != HAL_OK)
  {
    Error_Handler();
  }
}

//测试代码
HAL_GPIO_WritePin(LED2_GPIO_Port,LED2_Pin,GPIO_PIN_SET);//关灯
while (1)
{
     HAL_Delay(50);//14-65ms以内喂狗,则不会产生看门狗复位
     HAL_WWDG_Refresh(&hwwdg);
	 HAL_GPIO_WritePin(LED2_GPIO_Port,LED2_Pin,GPIO_PIN_RESET);//开灯
}
看门狗复位的现象就是灯长灭

你可能感兴趣的:(STM32,HAL库,单片机,嵌入式硬件)