举报
在STM32L433上调试时关闭看门狗(IWDG/WWDG)的配置方法与STM32F103不同,需通过DBGMCU寄存器设置。以下是具体解决方案:
包含头文件:
#include "stm32l4xx_hal.h"在main函数初始化阶段调用(必须在看门狗启用前执行):
// 调试状态下冻结独立看门狗(IWDG)
HAL_DBGMCU_EnableDBGSleepMode();
HAL_DBGMCU_EnableDBGStopMode();
HAL_DBGMCU_EnableDBGStandbyMode();
__HAL_DBGMCU_FREEZE_IWDG(); // 核心暂停时冻结IWDG
// 冻结窗口看门狗(WWDG) - 使用专用寄存器
__HAL_DBGMCU_FREEZE_WWDG();执行位置:
HAL_IWDG_Start())之前调用main()的开头或SystemClock_Config()之后立即调用寄存器映射:
IWDG通过DBGMCU_APB1_FZ1寄存器的DBG_IWDG_STOP位控制WWDG通过DBGMCU_APB1_FZ2寄存器的DBG_WWDG_STOP位控制低功耗模式支持:
HAL_DBGMCU_EnableDBGSleepMode();
HAL_DBGMCU_EnableDBGStopMode();
HAL_DBGMCU_EnableDBGStandbyMode();这些调用确保调试器连接时看门狗在低功耗模式下仍被冻结
CubeMX配置(可选):
Pinout & Configuration → System Core → DEBUG中勾选:[x] Enable IWDG freeze in Debug
[x] Enable WWDG freeze in Debug当微控制器被调试器暂停(如断点、单步执行)时:
#include "stm32l4xx_hal.h"
int main(void) {
HAL_Init();
// 启用调试冻结功能
HAL_DBGMCU_EnableDBGSleepMode();
HAL_DBGMCU_EnableDBGStopMode();
HAL_DBGMCU_EnableDBGStandbyMode();
// 冻结看门狗计数器
__HAL_DBGMCU_FREEZE_IWDG();
__HAL_DBGMCU_FREEZE_WWDG();
// 后续初始化(时钟、外设等)
SystemClock_Config();
// 此处初始化看门狗(在冻结配置之后!)
// HAL_IWDG_Init(...);
while (1) {
// 喂狗操作
// HAL_IWDG_Refresh(&hiwdg);
}
}
注意:此配置仅影响调试暂停时的行为,正常运行时看门狗仍会工作。务必在真实环境中测试看门狗功能是否正常。
举报
更多回帖