在 STOP 模式之前禁用 STM32 HAL IWDG 或 WWDG(看门狗)

Posted

技术标签:

【中文标题】在 STOP 模式之前禁用 STM32 HAL IWDG 或 WWDG(看门狗)【英文标题】:Disabling STM32 HAL IWDG or WWDG (watchdog) before STOP mode 【发布时间】: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(通过设置相应的选项字节)。 【参考方案1】:

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

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

【讨论】:

WWDG 似乎也有同样的行为。是否可以在 STOP 之前禁用此功能? @Colateral 不,一般来说,一旦你设置了看门狗,就可以了。这是为了防止代码在故障状态下不小心再次关闭。 我必须纠正自己!在关机模式下,除 LSE 之外的所有时钟都关闭。因此,如果您的 WDG 例如在 LSI 上运行,则无需重新加载。有关睡眠模式和时钟行为的概述,请参阅电源控制一章。 注意:出于调试目的,独立看门狗 (IWDG) 可以在内核停止时停止(参见参考手册中的 DBG_IWDG_STOP(在调试 MCU 冻结寄存器中))。 对于 WWDG,您可以使用 __HAL_RCC_WWDG_CLK_DISABLE(); 禁用

以上是关于在 STOP 模式之前禁用 STM32 HAL IWDG 或 WWDG(看门狗)的主要内容,如果未能解决你的问题,请参考以下文章

STM32F4 HAL库开发 -- GPIO

STM32F4 HAL库开发 -- GPIO

STM32F4 HAL库开发 -- GPIO

HAL库 STM32CubeMX--USART串口通信--补充

STM32GPIO配置为输出和输入捕获怎么配置(HAL库)?

STM32F4 HAL库开发 -- DMA