Skip to content

野火 GD32H759 + fireDAP:在 macOS 上编译、烧录并停到 main ​

烧录工具说成功,板子就一定跑对了吗?这次用一个跑马灯例程,把“编译出来”“写进 Flash”“正在运行”“能停在源码上”分开验证。

设备是野火 GD32H759 和 fireDAP,主机是 Apple Silicon Mac。以下版本与结果来自 2026-09-11 的实测,不依赖官方 IDE。

先让工具认出芯片 ​

fireDAP 经 USB 接 Mac,经 SWD 接开发板。它的 CMSIS-DAP v2 bulk 端点负责调试,CDC 端点另提供虚拟串口 /dev/cu.usbmodem*,两者不是同一条通路。

项目本次配置 / 读数
探针fireDAP,USB VID:PID 1FB9:5601
芯片GD32H759,Cortex-M7 r1p2,600MHz
SWD 身份DPIDR 0x0bd12477
pyOCD0.45.1,目标 gd32h759ig,SWD 1MHz
Flash 算法GigaDevice.GD32H7xx_DFP.1.5.0.pack
编译器xpack arm-none-eabi-gcc 15.2.1
存储Flash 0x08000000 / 3840K;RAM 0x24000000 / 512K

当时 pyOCD 的公共 pack 索引找不到 GD32H7,需要从兆易 AddOn 包中取出 DFP,再用 --pack 指定。能认出 Cortex-M7,只证明调试链路通了;有匹配的 Flash 算法,才能继续烧录。

编译完成,不等于程序已经上板 ​

工程采用 GCC/CMake 模板。本次构建约 9 秒,生成 ELF、hex、bin,Flash 占用 2772B。ELF 保留符号,后面调试时用它。

模板有一处容易漏看:编译用 -mcpu=cortex-m7,链接却写成 cortex-m3。先统一为 M7,再谈板上问题。

工具链下载也曾卡住:原始源两次超时,GitHub 下载约 294MB 的包时只到约 48KB/s。后来把已下载的包预置在自己的服务器,方便其他机器复用。这是缓存方案,不保证任何网络下都快;下载后仍要核对官方 SHA256。

写进去了,还要看它有没有在动 ​

pyOCD 本次擦除 1 个 sector、写入 1 个 page,速率约 25–37 kB/s。随后读回 0x08000000 的向量表:初始 SP 为 0x24080000,Reset 向量位于 0x08000xxx,与产物一致。

这证明了写入与读回,但没有证明跑马灯逻辑正确。为此,复位运行后每隔约 0.7 秒暂停一次,读取 GPIOC 的 OCTL(0x58020814),再恢复执行。

采样次序GPIOC OCTL
10x800
20x200
30x1000
40x400

四次采样看到了四个 LED 输出状态,说明程序在推进。它们是间隔采样,不是每次切灯的完整轨迹;暂停读寄存器也会扰动时序,不能拿这张表证明精确周期。

最后停在 main,而不是停在“已连接” ​

pyOCD gdbserver 与 GDB 通过 extended-remote :3333 连接。加载同一份带符号 ELF 后,首次暂停能看到 delay_1ms(count=500),位置是 systick.c:68。再复位,才命中 main.c:60 的断点(本次地址 0x08000494)。

gdb
file build-gcc/gd32H7_gcc.elf
target extended-remote :3333
break main
monitor reset halt
continue
bt
info registers

如果程序已经进入 while(1),只下 break main 再 continue,不会倒回启动入口。看起来“卡住”,未必是连接失败。

附录:本次遇到的故障与资料
现象本次处理
DebugPortSetup No ACK同一链路 OpenOCD 可通;pyOCD 改用 -O frequency=1000000 后通过。不能据此断言所有 No ACK 都与接线无关
Unable to open device先停止占用探针的 gdbserver,再烧录
找不到 GD32H7显式指定 DFP pack,不只依赖在线索引
GCC 下载受阻缓存已校验的发行包;曾尝试 zig cc,因裁源文件、改链接脚本及 libc/gdb 配套问题放弃

本文记录使用 pyOCD 0.45.1;连通性排查另用 OpenOCD 0.12 借 stm32h7x.cfg 验证。地址、源码行号、耗时均属于这份例程和这次环境,不是所有 GD32H7 工程的固定值。

这篇里有不清楚的地方,或者想聊类似的东西?私信我 →