[STM32L1] STM32L152RE调试 Sleep 会导致代码中出现异常

[复制链接]
 楼主| 唐纳德d 发表于 2025-5-10 23:14 | 显示全部楼层 |阅读模式
我已经将 MBED-OS blinkly 程序移植到 StmCubeIDE 上,程序会在两次闪烁之后使设备进入睡眠状态。当我仿真该程序时会出现硬内存故障。但是,如果我重新启动,未进入仿真前,它工作正常是正常的。
公羊子丹 发表于 2025-5-25 07:34 | 显示全部楼层
看起来像是在 Sleep 状态下仿真器无法正常跟踪程序导致的。
周半梅 发表于 2025-5-25 07:35 | 显示全部楼层
STM32 的低功耗模式和调试器不太兼容,调试前可以先屏蔽 sleep。
帛灿灿 发表于 2025-5-25 07:35 | 显示全部楼层
CubeIDE 里可以配置 DBGMCU 的寄存器,在 sleep 模式保持调试连接。
童雨竹 发表于 2025-5-25 07:36 | 显示全部楼层
你试过设置 HAL_DBGMCU_EnableDBGStopMode() 吗?可以防止调试断开。
万图 发表于 2025-5-25 07:37 | 显示全部楼层
我也遇到过类似情况,最后是注释掉 sleep 测试程序逻辑再调试的。
Wordsworth 发表于 2025-5-25 07:38 | 显示全部楼层
有些 ST-Link 固件版本老了,在低功耗模式会崩,更新一下也许能解决。
Bblythe 发表于 2025-5-25 07:39 | 显示全部楼层
可以在进入 sleep 前加个延时或日志,看是不是还没 sleep 就挂了。
Pulitzer 发表于 2025-5-25 07:40 | 显示全部楼层
建议用串口打印或 GPIO 测试替代断点调试 Sleep 的逻辑。
Uriah 发表于 2025-5-25 07:41 | 显示全部楼层
调试低功耗相关功能最好使用 printf 或外部逻辑分析仪观察行为。
Clyde011 发表于 2025-5-25 07:42 | 显示全部楼层
mbedOS 默认可能对底层电源控制处理不一致,建议手动初始化电源部分。
4y1b3 发表于 2025-5-31 23:48 | 显示全部楼层
在调试状态下不让 MCU 真的进入低功耗,而是“跳过”或“仿真”低功耗行为。
4y1b3 发表于 2025-5-31 23:49 | 显示全部楼层
可以在程序中这样写:

cpp
复制
编辑
#if defined(DEBUG) || defined(_DEBUG)
// 禁止低功耗用于调试
HAL_DBGMCU_EnableDBGSleepMode();
HAL_DBGMCU_EnableDBGStopMode();
HAL_DBGMCU_EnableDBGStandbyMode();
#endif
或使用 Mbed 的 API(如果仍部分保留 Mbed):

cpp
复制
编辑
sleep_manager_lock_deep_sleep();  // 禁止进入 Deep Sleep(Stop/Standby)
小迷糊仙 发表于 2025-6-4 12:32 | 显示全部楼层
感谢分享  学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

39

主题

39

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

39

主题

39

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部