stm32/debug/yangtao1-download-mode.md

洋桃1号开发板 · 下载模式选择速查

知识库 · STM32 📅 初版 2026-09-10 ✏️ 更新于 2026-09-11

洋桃1号开发板 · 下载模式选择速查

适用范围:洋桃1号开发板(核心板带 MODE 按键 + ASP 指示灯,板载 ASP 自动下载芯片)
回答问题:什么时候能串口下载、什么时候能 ST-Link 烧录、连不上芯片时该怎么切
核心结论:BOOT0 决定芯片从哪里启动,而启动位置决定 SWD 能不能连。
三秒设置:灯暗亮 + 闪 2 次 + BOOT0 接 GND → ST-Link 随便连(见「正确操作方式」一节)

#一、元信息

字段值
芯片/平台洋桃1号开发板 / STM32F103C8T6(通用:任何带 ASP 自动下载电路的洋桃核心板)
接口类型MODE 按键(单击/双击/长按)+ ASP 指示灯状态;底层为双路继电器控制 BOOT0 与 BOOT1(PB2)
验证状态✅ 已验证
验证环境洋桃1号开发板 / ST-Link V2(SWD)+ STM32CubeProgrammer CLI(普通 / HotPlug / Under Reset 三种模式)/ OpenOCD 读回 PC·SP·GPIO 寄存器 / CH340 + FlyMcu / 2026-09-11
驱动方式纯硬件操作,无代码
出厂默认Flash ISP 模式 + 自动下载开启

#二、接线表

信号MCU 引脚说明
BOOT0BOOT0 引脚由 ASP 双路继电器自动控制;手动模式下必须明确接 GND,绝不能悬空(悬空会被板载 10K 上拉成 1)
BOOT1PB2同为 ASP 控制;PB2 可能被外设占用(如摇杆按键,按下接地),电平必须用寄存器读数确认,不能靠猜
NRSTNRST非必需;接上后可用 connect under reset 模式强连,属保险措施
SWDIO / SWCLKPA13 / PA14ST-Link 调试接口
USART1 TX / RXPA9 / PA10CH340 串口下载通路

#三、正确操作方式

忘了就只看这一节。三步设置好,之后 ST-Link 随时能连、能烧、能调试:

步骤操作确认状态
1双击 MODE 键ASP 指示灯变成 暗亮(= 关闭自动下载)
2长按 MODE 键指示灯闪 2 次(= 切到 RAM ISP 这一档)
3BOOT0 接到 GND然后断电重新上电

按上面设置完成后:

  • 板子正常运行你的程序(屏幕正常显示)
  • ST-Link 用普通模式就能连上 —— 不需要接 NRST、不需要把 BOOT0 拨到 3.3V
  • 烧录完自动复位运行

绝对不要做的两件事:

❌ 错误操作后果
把 BOOT0 的线拔掉(悬空)板载 10K 上拉会把它变成 1,可能进 SRAM 导致连不上
双击 MODE 让灯变成正常亮那是「开启自动下载」,给 CH340 串口下载用的;ST-Link 用这个状态容易出问题

一句话:ST-Link 用「灯暗亮」;串口下载才用「灯正常亮」。

#四、先认识 MODE 键和 ASP

洋桃1号核心板上有一个 MODE 按键和一个 ASP 指示灯。ASP 是板载的自动下载芯片,通过双路继电器控制电源与 BOOT 引脚。

操作功能ASP 指示灯表现
单击开关开发板电源亮 = 电源开;灭 = 电源关
双击开关自动下载功能正常亮度 = 开启;较暗亮度 = 关闭
长按切换下载模式闪 1 次 = Flash ISP 模式;闪 2 次 = RAM ISP 模式

出厂默认:Flash ISP + 自动下载开启。

日常两种用法:

  • 用 CH340 串口下载 → 双击打开自动下载(灯正常亮)
  • 用 ST-Link 烧录/调试 → 双击关闭自动下载(灯暗亮)+ 长按至闪 2 次 + BOOT0 接 GND

#五、核心原理:启动模式决定 SWD 能否连接

STM32F103 上电时根据 BOOT0 / BOOT1 两个引脚选择启动区域。SWD 能不能连,取决于芯片当时跑在哪里:

BOOT0BOOT1启动区域SWD 连接实测证据
0任意主闪存(用户程序)✅ 三种模式全通PC = 0x08000F22(Flash 内)
10系统 Bootloader✅ 三种模式全通PC = 0x1FFFF3B2(Bootloader)
11内置 SRAM❌ 连不上(内核跑飞)ST 官方定义 + 历史现象

实测方式:STM32_Programmer_CLI -c "port=SWD",分别用普通模式 / HotPlug / Under Reset 各测一次,全部返回 Device ID 0x410。

为什么 SRAM 启动连不上:SRAM 里没有有效程序,内核取指就异常/跑飞,调试握手无法完成。而 Bootloader 是 ST 出厂固化的正常程序,运行期间 SWD 完全可用。

一句话记:不是「SWD 坏了」,而是「芯片当时跑的东西无法响应调试器」。

#六、三个必须记住的实测事实

#6.1 BOOT0 悬空 = 被上拉成 1

洋桃核心板的 BOOT0 有一颗板载 10K 上拉电阻到 3.3V。

实测:BOOT0 悬空状态下上电,读回 PC = 0x1FFFF3B2(系统 Bootloader),
GPIOB_IDR = 0x00000000(GPIO 从未初始化,说明用户程序没运行)
—— 证明悬空时 BOOT0 实际为高电平。

所以「把 BOOT0 的线拔掉」不等于低电平,而是 1。 这是最容易踩的坑。

#6.2 BOOT1 = PB2 = 摇杆按键引脚

STM32F103 的 BOOT1 复用在 PB2,而洋桃1号的摇杆按键正好接在 PB2 上(按下接地)。

实测:摇杆模块插着、程序正常运行时读 GPIOB_IDR,PB2 为 0,
说明该引脚被外部电路拉低。「摇杆插着 = BOOT1=1」这个想当然的说法并不成立,
实际电平要用寄存器读数确认,不能靠猜。

排查技巧:接上调试器后读 GPIOB_IDR(地址 0x40010C08)的 bit2 即可知道 PB2 真实电平。

#6.3 NRST 不是必需,但很有价值

接上 NRST(ST-Link 的 RST → 板子 NRST)后,可以使用 connect under reset 模式:

连接时先把 NRST 拉低 → 内核进入复位态、用户程序暂停 → 此时建立 SWD 连接 → 再释放复位 → 烧录。

这招能对付「程序跑飞」「程序把 SWD 引脚配成普通 IO」「低功耗模式」等异常情况,是保险措施,不是日常必需。

#七、推荐做法

最稳:BOOT0 明确接 GND,之后什么都不用拨。

引脚接法
BOOT0接 GND(固定不动)
SWDIOST-Link SWDIO → PA13
SWCLKST-Link SWCLK → PA14
GND共地
3.3VST-Link 3.3V → 板子 3.3V(VREF)
NRST(可选)ST-Link RST → 板子 NRST

BOOT0=0 时芯片始终从 Flash 启动:

  • 程序正常运行
  • SWD 随时可连、可烧、可调试(普通模式即可,不依赖 NRST)
  • 烧录后自动复位运行

#八、连不上时的排障顺序

现象:Error: Unable to get core ID / No STM32 target found,但设备电压显示正常(约 3.2 V)。

顺序检查项处理
1ASP 灯是否亮不亮 → 单击 MODE 开机
2BOOT0 是否悬空明确接 GND(或接 3.3V),绝不能悬空
3是否处于 SRAM 启动让 BOOT1=0(拔掉摇杆模块 / 按住摇杆键)+ 断电上电
4SWD 四线是否插实杜邦线最容易松,重点查 SWDIO / SWCLK / GND
5报 DEV_USB_COMM_ERR拔插一次 ST-Link 的 USB 线(克隆版常见现象)
6以上都不行接上 NRST,用 connect under reset 模式强连

复位模式强连脚本:

powershellpowershell -ExecutionPolicy Bypass -File D:\stm32_env\scripts\flash.ps1 -ProjectDir <工程> -UnderReset

#九、串口(CH340)下载注意事项

  • 进系统 Bootloader 需要 BOOT0=1 且 BOOT1=0
  • 双击 MODE 打开自动下载(ASP 灯正常亮)后,FlyMcu 会自动完成 BOOT0 时序与复位,不用手动拨跳线
  • 下载完成后 ASP 自动切回运行模式;若是手动拨的 BOOT0,记得拨回 GND 并断电重新上电
  • 若报 无法打开串口 / Not Support Setting(bps/byte size etc),那是 CH340 驱动/串口层的问题,与 BOOT 模式无关,先修驱动(换数据线 / 换 USB 口 / 重装 CH341SER 驱动)

#十、踩坑清单

  1. 「灯亮着」不等于「电源开着」:ASP 灯有「正常亮」和「较暗」两档,暗亮代表自动下载已关(ST-Link 场景正确),不是故障。
  2. 改了 BOOT 电平不断电等于没改:BOOT0/BOOT1 是上电瞬间采样的,改完跳线必须断电重上电才生效。
  3. BOOT0 悬空 = 1,不是「不确定」:板载 10K 上拉决定悬空必然为高电平,芯片会直接进系统 Bootloader,用户程序根本不跑。以为「拔掉线就是低电平」是最常见的误判。
  4. PB2 的电平必须实测,别顺着「外设上拉」的直觉猜:摇杆按键按下接地,实测插入摇杆模块时 PB2 = 0。读 GPIOB_IDR(0x40010C08)的 bit2 才是真相。
  5. 「长按闪 2 次 = 连不上元凶」是旧结论,已推翻:长按到「闪 2 次」(RAM ISP 档)改变的只是 ASP 对 BOOT1 的处理;只要 BOOT0 已接 GND 固定为 0,芯片仍然从 Flash 启动,BOOT1 是无关项,SWD 照连不误。真正致命的是 BOOT0 悬空被上拉成 1,再叠加 BOOT1=1 → 进 SRAM。所以 ST-Link 的正确档位恰恰是 灯暗亮 + 闪 2 次 + BOOT0 接 GND。
  6. 自动下载开着时程序会反复复位:用 ST-Link 调试若没关自动下载,ASP 会不停抢 BOOT0,表现为程序跑不起来、调试器频繁断连。

#11、结论:一句话记住

txtBOOT0 = 0               → 跑用户程序      SWD ✅   ← 日常保持这个
BOOT0 = 1, BOOT1 = 0    → 系统 Bootloader SWD ✅   (串口下载用)
BOOT0 = 1, BOOT1 = 1    → 内置 SRAM       SWD ❌   ← 「连不上」的元凶

BOOT0 悬空 = 1(板载 10K 上拉),切记不要悬空!
NRST 接了更保险(可用 connect under reset),但不是必需。

日常三件套:灯暗亮 + 闪 2 次 + BOOT0 接 GND。

一句话版:连不上先看灯亮不亮,再按「正确操作方式」三步设置,最后断电重新上电。

#12、参考库/链接

  • 摇杆 ADC 工程(含 PB2=BOOT1 踩坑实录):/kb/stm32/input/joystick-dual-axis-adc
  • 工具箱脚本:D:\stm32_env\scripts\(flash.ps1 支持 -UnderReset 复位模式强连)
  • STM32F103 参考手册(RM0008):Boot modes 章节

#13、更新日志

📝共 4 条记录
日期类型更新内容
2026-09-11修改新增「正确操作方式」三步速查(灯暗亮 + 闪 2 次 + BOOT0 接 GND);推翻旧结论——「长按闪 2 次 = 连不上元凶」作废(BOOT0=GND 时 BOOT1 为无关项);同步修正结论卡片、表头口诀与踩坑清单第 5 条;标题去掉手写编号(网站会自动编号,原先渲染成「四、一、先认识 MODE 键」双重编号)
---------
2026-09-11修改按最新实测结论重写正文:① BOOT0 悬空 = 板载 10K 上拉为 1(不是「不确定」);② 摇杆按键实测 PB2=0,「外设上拉让 BOOT1=1」为误判,电平要读 GPIOB_IDR 确认;③ 日常推荐改为 BOOT0 明确接 GND 固定不动(原「BOOT0 不接线」写法作废);④ 排障顺序扩为 6 步,补 DEV_USB_COMM_ERR 与 connect under reset 强连;⑤ 新增 CH340 串口下载章节与结论卡片
2026-09-10新增首次建档