我使用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);
答案 0 :(得分:4)
在任何处理器模式下都不能停止独立监视程序。您必须定期唤醒以重新加载看门狗。您可以做的是将预分频器更改为最大值,以使看门狗计数缓慢。
只有在断开控制器电源后,IWDG才会停止。