停止模式前禁用STM32 HAL IWDG或WWDG(看门狗)

停止模式前禁用STM32 HAL IWDG或WWDG(看门狗),stm32,watchdog,hal,Stm32,Watchdog,Hal,使用STM32(L0 5)HAL时,在进入停止模式之前,我需要禁用IWDG或WWDG。在IWDG将MCU从停止模式重置之前,以下代码工作正常。对于WWDG的使用,这要快得多,并且在调用HAL_PWR_EnterSTOPMode之前重置,尽管在每行之后调用HAL_WWDG_Refresh。我还在核子L05上测试了这些场景 iwdgHandle.Instance = IWDG; iwdgHandle.Init.Prescaler = IWDG_PRESCALER_64; iwdgHandle.Ini

使用STM32(L0 5)HAL时,在进入停止模式之前,我需要禁用IWDG或WWDG。在IWDG将MCU从停止模式重置之前,以下代码工作正常。对于WWDG的使用,这要快得多,并且在调用HAL_PWR_EnterSTOPMode之前重置,尽管在每行之后调用HAL_WWDG_Refresh。我还在核子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);

独立看门狗不能在任何处理器模式下停止。你必须定期醒来重新加载看门狗。你能做的就是将预分频器改为最大值,这样看门狗的计数速度就慢了


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

WWDG似乎也有相同的行为。停止前可以禁用吗?@collateral否,通常在您设置看门狗后,看门狗就会启动,仅此而已。这是为了防止代码在错误状态下再次意外关闭它。我必须自己更正!在关机模式下,除LSE外的所有时钟均关闭。因此,如果WDG正在LSI上运行,则无需重新加载。有关睡眠模式和时钟行为的概述,请参阅“电源控制”一章。注意:出于调试目的,当内核停止时,可以停止独立看门狗(IWDG)(请参阅参考手册中的DBG_IWDG_停止(在调试MCU冻结寄存器中)。对于WWDG,可以使用u HAL_RCC_WWDG_CLK_disable()禁用;与此同时,我发现如下:''IWDG是通过写入其密钥寄存器或通过硬件选项启动的。一旦启动,除非重置,否则无法停止。同样来自ST:WWDG和IWDG之间的区别之一是IWDG具有独立的时钟。WWDG由APB总线计时,其频率源自核心时钟(SYSCLK)。由于核心时钟在停止模式下停止,WWDG时钟也停止。这意味着它会在停止低功率模式下自动停止,您无需刷新它。有了IWDG,你必须定期醒来并刷新它。STM32L4系列的微控制器也允许在停止模式下停止IWDG(通过设置相应的选项字节)。