STM32HAL低功耗时也能调试设置,调试模式独立看门狗可被冻结L151

困扰许久的问题,在网上查了许多资料未发现有用信息,在今天看os低功耗模式时发现标准库有解决办法,我试验后,发现HAL库也是有这个功能。还有独立看门狗的问题,调试模式时会复位,本文找到了解决方法,可将独立看门狗冻结
web

1.STOP模式可直接下载程序

/* Enable Ultra low power mode */
  HAL_PWREx_EnableUltraLowPower();

  /* Enable the fast wake up from Ultra low power mode */
  HAL_PWREx_EnableFastWakeUp();

这两句以及cube(具体此部须要实验,须要查询其余资料,本人是试验成功的)在这里插入图片描述
stm32就支持低功耗时直接下载程序。ide

2. STOP模式可调试模式

关键词: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模式下进行调试。调试

3. 没进低功耗模式问题建议

表现出来进来就出去了,说明一进来就被唤醒了,能够查各类中断、事件看看有没有唤醒。我发现常常被唤醒的是系统滴答code

void               HAL_SuspendTick(void);
void               HAL_ResumeTick(void);

也是在同一文件中,HAL_SuspendTick挂起系统滴答,HAL_ResumeTick恢复系统滴答。xml

4. 调试模式时独立看门狗

/**
  * @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