针对合宙AIR32F103CBT6的核心板定制了个BMP调试器的固件,针脚兼容,除了SWD外还支持JTAG,蓝色LED显示传输状态。

Black Magic Probe vs DAPLink

简单来说,BMP = gdbserver + DAPLink。

即BMP已自带gdb服务器功能,省去了OpenOCD之类中间件的环节,不用考虑OpenOCD的版本依赖和编译问题了。

实际使用中感觉要稍快些。

刷BMP固件

BMP的固件包含bootloader和app,故需要调试器通过SWD刷机。这里用ST-Link通过OpenOCD刷机。

编译OpenOCD和系统存储器启动参考这篇文章

openocd-esp根目录下新建一个tmp文件夹。

下载BMP固件。解压后将bin文件放到tmp中。

AIR32F103进入系统存储器启动模式后执行以下命令:

1
./src/openocd -s tcl -f interface/stlink.cfg -f tcl/target/air32f1x.cfg -c init -c 'reset halt' -c 'flash write_image erase ./tmp/blackmagic_aio-air32f103.bin 0x08000000 bin' -c 'verify_image ./tmp/blackmagic_aio-air32f103.bin 0x08000000 bin' -c 'reset run' -c shutdown

verified无误,出现shutdown字样说明BMP刷入成功。

连上USB后会新增ID 1d50:6018 OpenMoko, Inc. Black Magic Debug Probe (Application)的USB设备并新增2个USB串口,其中第一个是debug用的。

接线

此BMP固件的SWD接线和板子自带的DAPLink一致,另外还支持JTAG,接线如下:

Signal Pin
SWDIO(TMS) B14
SWCLK(TCK) B13
nRST B0
TDI A7
TDO A6

IMG_20230103_145253

安装PlatformIO

参考这篇文章。注意无需配置OpenOCD。

载入项目

调试目标是一块吃灰的Bluepill(STM32F103CBT6)核心板。程序是库函数版的点灯程序cmsis-blink

下载示例程序并解压缩。

VS Code下Ctrl+O打开文件夹,选择platform-ststm32-develop/examples/cmsis-blink/文件夹。

编辑platformio.ini,开头添加如下内容:

1
2
3
4
5
6
7
8
9
10
11
[platformio]
default_envs = bluepill_f103c8

[env:bluepill_f103c8]
platform = ststm32
framework = cmsis
board = bluepill_f103c8
upload_protocol = blackmagic
upload_port = /dev/ttyACM0
debug_tool = blackmagic
debug_port = /dev/ttyACM0

其中upload_portdebug_port一样。Win是COMx

调试

打开src/main.c文件,在110行行号左边点一下添加断点。

F5(Run > Start Debugging)进入调试界面。

反复按F5(顶栏的Continue),可见到板载LED明暗交替变化。调试器工作正常。

2023-01-03_14-56

参考资料

blackmagic-debug/blackmagic

Debugging » Black Magic Probe