首页 > 解决方案 > 在 STOP 模式之前禁用 STM32 HAL IWDG 或 WWDG(看门狗)

问题描述

我使用 STM32 (L0 5) HAL 我需要在进入 STOP 模式之前禁用 IWDG 或 WWDG。在 IWDG 将 MCU 从 STOP 模式重置之前,以下代码工作正常。对于 WWDG 的使用,这要快得多,并且在调用 HAL_PWR_EnterSTOPMode 之前重置,尽管在每行之后调用 HAL_WWDG_Refresh。我还在 Nucleo L05 上测试了这些场景。

iwdgHandle.Instance = IWDG;
iwdgHandle.Init.Prescaler = IWDG_PRESCALER_64;
iwdgHandle.Init.Window = 4095;
iwdgHandle.Init.Reload = 4095;
if (HAL_IWDG_Init(&iwdgHandle) != HAL_OK) // almost 7secs until refresh has to be called
{
 _Error_Handler(__FILE__, __LINE__);
}

HAL_PWR_EnableWakeUpPin(WakeSpi_Pin);
HAL_PWREx_EnableUltraLowPower(); // Enable Ultra low power mode
HAL_PWREx_EnableFastWakeUp(); // Enable the fast wake up from Ultra low power mode

HAL_SuspendTick();
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);

标签: stm32watchdoghal

解决方案


独立看门狗不能在任何处理器模式下停止。您必须定期醒来以重新加载看门狗。您可以做的是将预分频器更改为最大值,以便看门狗缓慢计数。

仅当您断开控制器与电源的连接时,IWDG 才会停止。


推荐阅读