【发布时间】:2019-04-19 10:45:20
【问题描述】:
我使用 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);
【问题讨论】:
-
同时我发现了以下内容: : ''IWDG 是通过写入其密钥寄存器或硬件选项来启动的。一旦启动,它就无法停止,除非通过重置。''
-
同样来自ST:WWDG和IWDG的区别之一是IWDG有独立的时钟。 WWDG 的时钟来自 APB 总线,其频率来自内核时钟 (SYSCLK)。由于核心时钟在 STOP 模式下停止,WWDG 时钟也停止。这意味着它会在 STOP 低功耗模式下自动停止,您无需刷新它。使用 IWDG,您必须定期唤醒并刷新它。 STM32L4 系列的微控制器还允许在 STOP 模式下停止 IWDG(通过设置相应的选项字节)。