STM32F407 休眠锁死 & 救活全记录
背景回顾
-
芯片:STM32F407ZET6
-
需求:每30秒用 HC-SR04 测距,通过蓝牙(BLE-CC41-A,串口3)发送数据,其余时间休眠
-
问题:代码加入休眠后,MCU 进入停止模式 → SWD调试接口关闭 → Keil/J-Link 无法下载
-
现象:
Failed to connect、InitTarget() returned with error code -1
🔍 第一阶段:发现问题
1. 症状确认
-
程序能正常运行(蓝牙发数据),但再次下载时报错
-
J-Link 无法连接目标
-
按住复位键点下载也无效
2. 原因分析
-
STM32 进入 Stop 模式 后,默认关闭 SWD 调试接口
-
调试器无法在芯片休眠时连接
-
相当于“自己把自己锁死了”
🛠️ 第二阶段:尝试软件救活
1. Keil 设置调整(失败)
-
修改 Debug 设置:
-
Connect:
under Reset -
Reset:
HW RESET
-
-
按住复位键点下载 → 依然失败
2. J-Flash 尝试(V4.12 太老,失败)
-
旧版 J-Flash 不支持 STM32F407(无 Cortex-M4)
-
升级到最新 J-Flash V7.x / V9.x
3. J-Flash 设置“Connect under reset”(部分成功)
-
新版 J-Flash 里,这个选项藏在:
-
Options→Project Settings→MCU→Init. steps -
添加一条
Reset动作,Type=0,Delay=100ms
-
-
效果:有时能连上,但不稳定
⚡ 第三阶段:物理硬件救活(最终成功)
✅ 方法1:复位大法(临时有效)
-
用杜邦线短接 GND 和 NRST
-
在短接瞬间点击 J-Flash Connect
-
连接成功后立刻擦除
✅ 方法2:BOOT0 强拉模式(100%成功,推荐)
操作步骤(基于你的板子):
-
找到 BOOT 排针(3x2 布局)
text
1 2 ← BOOT0 相关 3 4 ← BOOT1 相关 5 6 ← GND/VDD
-
BOOT0 接 3.3V
-
用跳线帽短接 1-2(BOOT0 → VDD3V3)
-
-
BOOT1 保持 GND(你板上有 R69 下拉电阻,不用动)
-
重新上电
-
芯片从系统存储器(Bootloader)启动
-
不会运行休眠程序
-
SWD 接口恢复
-


-
用 Keil 直接下载新程序
-
下载成功后断电,跳线帽换回 5-6(BOOT0 → GND)
-
重新上电,程序正常运行
更多推荐
所有评论(0)