困扰许久的问题,在网上查了许多资料未发现有用信息,在今天看os低功耗模式时发现标准库有解决办法,我试验后,发现HAL库也是有这个功能。还有独立看门狗的问题,调试模式时会复位,本文找到了解决方法,可将独立看门狗冻结。
web
/* Enable Ultra low power mode */ HAL_PWREx_EnableUltraLowPower(); /* Enable the fast wake up from Ultra low power mode */ HAL_PWREx_EnableFastWakeUp();
这两句以及cube(具体此部须要实验,须要查询其余资料,本人是试验成功的)
stm32就支持低功耗时直接下载程序。ide
关键词:DBGMCUsvg
/** @defgroup HAL_Exported_Functions_Group3 DBGMCU Peripheral Control functions * @brief DBGMCU Peripheral Control functions * @verbatim =============================================================================== ##### DBGMCU Peripheral Control functions ##### =============================================================================== [..] This section provides functions allowing to: (+) Enable/Disable Debug module during SLEEP mode (+) Enable/Disable Debug module during STOP mode (+) Enable/Disable Debug module during STANDBY mode @endverbatim * @{ */
官方注释,文件在 stm32l1xx_hal.c函数
/* DBGMCU Peripheral Control functions *****************************************/ void HAL_DBGMCU_EnableDBGSleepMode(void); void HAL_DBGMCU_DisableDBGSleepMode(void); void HAL_DBGMCU_EnableDBGStopMode(void); void HAL_DBGMCU_DisableDBGStopMode(void); void HAL_DBGMCU_EnableDBGStandbyMode(void); void HAL_DBGMCU_DisableDBGStandbyMode(void);
这些函数加入到代码中就支持DEBUGMCU在各类模式下,好比,HAL_DBGMCU_EnableDBGStopMode,就能够在stop模式下进行调试。调试
表现出来进来就出去了,说明一进来就被唤醒了,能够查各类中断、事件看看有没有唤醒。我发现常常被唤醒的是系统滴答code
void HAL_SuspendTick(void); void HAL_ResumeTick(void);
也是在同一文件中,HAL_SuspendTick挂起系统滴答,HAL_ResumeTick恢复系统滴答。xml
/** * @brief IWDG Peripherals Debug mode */ #if defined (DBGMCU_APB1_FZ_DBG_IWDG_STOP) #define __HAL_DBGMCU_FREEZE_IWDG() SET_BIT(DBGMCU->APB1FZ, DBGMCU_APB1_FZ_DBG_IWDG_STOP) #define __HAL_DBGMCU_UNFREEZE_IWDG() CLEAR_BIT(DBGMCU->APB1FZ, DBGMCU_APB1_FZ_DBG_IWDG_STOP) #endif
__HAL_DBGMCU_FREEZE_IWDG() 冻结看门狗,此时在调试模式下看门狗就不会复位
__HAL_DBGMCU_UNFREEZE_IWDG()恢复看门狗
相似的有不少,须要根据需求找本身须要的功能blog