当前位置: 首页 > news >正文

Windows11下搭建Black Magic Probe (BMP) 编译环境

版本和环境信息如下:

PC平台: Windows 11 专业版

MSYS2:msys2-x86_64-20250221.exe

Debug调试器:

BlackMagicProbe(BMP) 开源调试器:WeAct STM32F103CBT6 BluePill 核心板 WeAct STM32F411CEU6 BlackPill 核心板

USB-TO-TTL: USB转TTL串口小板

调试器安装软件:

ARM MINGW GDB: arm-gnu-toolchain-14.2.rel1-mingw-w64-i686-arm-none-eabi.zip

BlackMagicProbe固件:blackmagic-firmware

在学习Zephyr 实时操作系统项目的时候,接触到一款高效又 经济的调试开发神器--Black Magic Probe(BMP)。这是一款专为ARM Cortex微控制器设计的JTAG/SWD探针,其独特的魅力在于内置了GDB服务器,从而允许开发者直接利用强大的GNU Debugger进行远程调试,简化了传统嵌入式开发中的调试流程。

下面介绍在Windows环境下搭建如何搭建Black Magic Probe (BMP)固件编译环境:

1. 源码与固件地址

调试器固件:https://github.com/koendv/blackmagic-firmware (BMP release固件库)

调试器源码:https://github.com/blackmagic-debug/blackmagic (BMP固件与BMDA程序库)

调试器上位机程序:https://github.com/compuphase/Black-Magic-Probe-Book (不太好用)

2. 调试器源码编译平台构建

2.1. 安装MSYS2

  1. 下载安装程序:msys2-x86_64-20250221.exe
  2. 运行安装程序。安装MSYS2需要64位Windows 10或更新版本的操作系统。
  3. 输入您希望的安装目录(需满足以下要求):
    • 使用简短的纯ASCII字符路径
    • 必须位于NTFS格式的磁盘分区
    • 路径中不得包含:
    • 重音符号
    • 空格
    • 符号链接
    • 虚拟驱动器(subst)
    • 网络驱动器
    • FAT格式分区

  • 安装完成后,点击【完成】即可。

  • 此时MSYS2已完成安装,系统将自动启动UCRT64环境的终端窗口。

2.2. 搭建固件编译环境

请在MSYS2环境中运行以下命令以完成环境更新

# 更新MSYS2系统所有已安装的包
pacman -Syu
# 安装基础开发工具 pactoys git unzip
pacman -S pactoys git unzip vim
# 通过pacboy安装关键开发组件
# python:p:p表示安装UCRT64架构的Python
# meson:p:构建系统工具
# toolchain:p:基础编译工具链
pacboy -S python:p meson:p toolchain:p
# 解压arm-gnu-toolchain-14.2.rel1-mingw-w64-i686-arm-none-eabi.zip
# 至$HOME/arm-gnu-toolchain-14.2
unzip.exe arm-gnu-toolchain-14.2.rel1-mingw-w64-i686-arm-none-eabi.zip -d ~/arm-gnu-toolchain-14.2
# 添加ARM工具链到系统路径
export PATH=$HOME/arm-gnu-toolchain-14.2/bin:$PATH

git clone 下载https://github.com/blackmagic-debug/blackmagic 至zephyr-gdb目录

user@desktop UCRT64 /d/workspace/zephyrproject/zephyr-gdb
git clone https://github.com/blackmagic-debug/blackmagic

blackmaigcprobe支持的硬件列表如下:

/d/workspace/zephyrproject/zephyr-gdb/blackmagic/cross-file
# tree -L 1
.
├── 96b_carbon.ini
├── arm-none-eabi.ini
├── blackpill-f401cc.ini
├── blackpill-f401ce.ini
├── blackpill-f411ce.ini
├── bluepill.ini
├── ctxlink.ini
├── f072.ini
├── f3.ini
├── f4discovery.ini
├── hydrabus.ini
├── launchpad-icdi.ini
├── native-remote.ini
├── native-riscv.ini
├── native-st-clones.ini
├── native-uncommon.ini
├── native.ini
├── stlink.ini
├── stlinkv3.ini
└── swlink.ini

本文主要介绍bluepill.ini和blackpill-f401cc.ini。

bluepill.ini文件解析

# This a cross-file for the bluepill probe, providing sane default options for it.
# 编译固件需要的gcc工具链
[binaries]
c = 'arm-none-eabi-gcc'
cpp = 'arm-none-eabi-g++'
ld = 'arm-none-eabi-gcc'
ar = 'arm-none-eabi-ar'
nm = 'arm-none-eabi-nm'
strip = 'arm-none-eabi-strip'
objcopy = 'arm-none-eabi-objcopy'
objdump = 'arm-none-eabi-objdump'
size = 'arm-none-eabi-size'
# BlackMagicProbe使用的是核是ARM
[host_machine]
system = 'bare-metal'
cpu_family = 'arm'
cpu = 'arm'
endian = 'little'[project options]
# 运行 BMD(BlackMagic-Debug) 固件的硬件平台
probe = 'bluepill'
# 启用调试和烧写的目标平台和架构如下
targets = 'cortexm,lpc,nrf,nxp,renesas,rp,sam,stm,ti'
# 启用 Real-Time Transfer RTT(实时传输)支持
rtt_support = false
# 需要编译black magic debug bootloader
bmd_bootloader = true

blackpill-f401cc.ini文件解析

# This a cross-file for the blackpill-f401cc probe, providing sane default options for it.
# 编译固件需要的gcc工具链
[binaries]
c = 'arm-none-eabi-gcc'
cpp = 'arm-none-eabi-g++'
ld = 'arm-none-eabi-gcc'
ar = 'arm-none-eabi-ar'
nm = 'arm-none-eabi-nm'
strip = 'arm-none-eabi-strip'
objcopy = 'arm-none-eabi-objcopy'
objdump = 'arm-none-eabi-objdump'
size = 'arm-none-eabi-size'
# BlackMagicProbe使用的是核是ARM
[host_machine]
system = 'bare-metal'
cpu_family = 'arm'
cpu = 'arm'
endian = 'little'[project options]
# 运行 BMD(BlackMagic-Debug) 固件的硬件平台
probe = 'blackpill-f401cc'
# 启用调试和烧写的目标平台和架构如下
targets = 'cortexar,cortexm,riscv32,riscv64,apollo3,at32f4,ch32,ch579,efm,gd32,hc32,lpc,mm32,nrf,nxp,puya,renesas,rp,sam,stm,ti,xilinx'
# 启用 Real-Time Transfer RTT(实时传输)支持
rtt_support = true
# 需要编译black magic debug bootloader
bmd_bootloader = true

不难发现blackpill-f401cc比bluepill支持设备多很多,是因为F401的Flash和RAM都比F103大。

这里我选择的是WeAct STM32F103CBT6 BluePill 核心板作为BlackMagicProbe调试器。所以我选择bluepill.ini进行编译

meson setup build --cross-file cross-file/bluepill.ini

配置预编译会检测编译的依赖是否准备齐全。

问题: 解决github https下载失败超时问题

git config --local url."git@github.com:".insteadOf "https://github.com/"

这样会将所有 https://github.com/ 开头的 URL 自动替换为 SSH 协议

meson setup build --cross-file cross-file/bluepill.ini配置构建解析

Black Magic Debug 2.0.0-rc2Remote ProtocolRISC-V acceleration               : NO
# 支持调试的CPU厂家TargetsCortex-A/R support                : NOCortex-M support                  : YESRISC-V 32-bit support             : NORISC-V 64-bit support             : NOArterytek parts                   : NOAmbiq Apollo3 parts               : NOWinChipHead CH32 parts            : NOWinChipHead CH579 parts           : NOEnergy Micro parts                : NOGigaDevice parts                  : NOHC32 parts                        : NOLPC series parts                  : YESMindMotion parts                  : NOnRF series parts                  : YESKinetis series parts              : YESPuya PY32 series parts            : NORenesas parts                     : YESRaspberry Pi MCUs (RP2040, RP2350): YESATSAM series parts                : YESSTM32 (and clones) parts          : YESTexas Instruments parts           : YESXilinx parts                      : NO
# 作为BlackMagicProbe硬件的固件信息ProbeName                              : BluePillPlatform                          : STM32F1Bootloader                        : Black Magic Debug BootloaderLoad Address                      : 0x8002000SWIM as UART                      : NO
# 支持调试功能Black Magic Debug# 启用调试输出(用于调试 BMD 堆栈,而非调试目标平台)Debug output                      : NO# 启用 RTT(实时传输)支持RTT support                       : NOAdvertise QStartNoAckMode         : YES# 编译固件Building Firmware                 : YES# 编译BMDA BlackMagicDebugAppBuilding BMDA                     : YES
# 编译依赖的字库是否齐全Subprojectshidapi                            : YESlibopencm3                        : YESlibusb                            : YESUser defined optionsCross files                       : cross-file/bluepill.ini

meson setup build --cross-file cross-file/blackpill-f401cc.ini配置构建解析

Black Magic Debug 2.0.0-rc2Remote ProtocolRISC-V acceleration               : NO
# 支持调试的CPU厂家TargetsCortex-A/R support                : YESCortex-M support                  : YESRISC-V 32-bit support             : YESRISC-V 64-bit support             : YESArterytek parts                   : YESAmbiq Apollo3 parts               : YESWinChipHead CH32 parts            : YESWinChipHead CH579 parts           : YESEnergy Micro parts                : YESGigaDevice parts                  : YESHC32 parts                        : YESLPC series parts                  : YESMindMotion parts                  : YESnRF series parts                  : YESKinetis series parts              : YESPuya PY32 series parts            : YESRenesas parts                     : YESRaspberry Pi MCUs (RP2040, RP2350): YESATSAM series parts                : YESSTM32 (and clones) parts          : YESTexas Instruments parts           : YESXilinx parts                      : YES
# 作为BlackMagicProbe硬件的固件信息ProbeName                              : WeAct Studio F401CC BlackPillPlatform                          : STM32F4Bootloader                        : Black Magic Debug BootloaderLoad Address                      : 0x08004000
# 支持调试功能Black Magic Debug# 启用调试输出(用于调试 BMD 堆栈,而非调试目标平台)Debug output                      : NO# 启用 RTT(实时传输)支持RTT support                       : YESAdvertise QStartNoAckMode         : YES# 编译固件Building Firmware                 : YES# 编译BMDA BlackMagicDebugAppBuilding BMDA                     : YES
# 编译依赖的字库是否齐全Subprojectshidapi                            : YESlibopencm3                        : YESlibusb                            : YESUser defined optionsCross files                       : cross-file/blackpill-f401cc.ini

编译bluepill固件和BMDA

#编译固件
meson compile -C build
#生成dfu文件
meson compile -C build boot-bin
#生成固件
~/workspace/blackmagic$ ls build/ -al
total 5824
drwxrwxr-x 11 polaris polaris    4096  6月  1 18:08 .
drwxrwxr-x 14 polaris polaris    4096  6月  1 17:34 ..
-rwxrwxr-x  1 polaris polaris    7848  6月  1 17:46 blackmagic_bluepill_bootloader.bin
-rwxrwxr-x  1 polaris polaris  265144  6月  1 17:46 blackmagic_bluepill_bootloader.elf
-rwxrwxr-x  1 polaris polaris  119080  6月  1 17:38 blackmagic_bluepill_firmware.bin
-rwxrwxr-x  1 polaris polaris 1286032  6月  1 17:38 blackmagic_bluepill_firmware.elf
-rwxrwxr-x  1 polaris polaris 1286032  6月  1 17:38 blackmagic.exe
-rwxrwxr-x  1 polaris polaris 1286032  6月  1 17:38 ftd2xx.dll
#合并allinone文件
#因为STM32F103CBT6默认没有dfu固件,所以需要生成blackmagic_bluepill_bootloader.bin
#blackmagic_bluepill_bootloader为dfu
dd if=blackmagic_bluepill_bootloader.bin of=blackmagic_allinone-bluepill.bin
dd if=blackmagic_bluepill_firmware.bin of=blackmagic_allinone-bluepill.bin seek=8 bs=1k conv=notrunc

 编译blackpill_f401cc固件和BMDA

#编译固件
meson compile -C build
#生成dfu文件
meson compile -C build boot-bin
#生成固件
~/workspace/blackmagic$ ls build/ -aldrwxrwxr-x 11 polaris polaris    4096  6月 11 09:46 .
drwxrwxr-x 13 polaris polaris    4096  6月 11 09:41 ..
-rwxrwxr-x  1 polaris polaris 2090448  6月 11 09:45 blackmagic
-rwxrwxr-x  1 polaris polaris    8232  6月 11 09:46 blackmagic_blackpill_f401cc_bootloader.bin
-rwxrwxr-x  1 polaris polaris  138760  6月 11 09:46 blackmagic_blackpill_f401cc_bootloader.elf
drwxrwxr-x  2 polaris polaris    4096  6月 11 09:46 blackmagic_blackpill_f401cc_bootloader.elf.p
-rwxrwxr-x  1 polaris polaris  150212  6月 11 09:45 blackmagic_blackpill_f401cc_firmware.bin
-rwxrwxr-x  1 polaris polaris 1486816  6月 11 09:45 blackmagic_blackpill_f401cc_firmware.elf
#合并allinone文件
#因为STM32F401CCU6默认没有dfu固件,blackmagic_blackpill_f401cc_bootloader.bin
#blackmagic_blackpill_f401cc_bootloader为dfu
dd if=blackmagic_blackpill_f401cc_bootloader.bin of=blackmagic_allinone-blackpill.bin
dd if=blackmagic_blackpill_f401cc_firmware.bin of=blackmagic_allinone-blackpill.bin seek=16 bs=1k conv=notrunc

2.3 BMP固件烧录

下载stm32flash-0.7-binaries.zip至zephyr-gdb目录下 ,并将stm32flash.exe的bin执行程序路径添加在系统变量里。

设置好后打开cmd终端, 验证stm32flash是否运行正常。

(.venv) D:\workspace\zephyrproject>stm32flash --help
stm32flash: unknown option -- -
Usage: stm32flash [-bvngfhc] [-[rw] filename] [tty_device | i2c_device]-a bus_address  Bus address (e.g. for I2C port)-b rate         Baud rate (default 57600)-m mode         Serial port mode (default 8e1)-r filename     Read flash to file (or - stdout)-w filename     Write flash from file (or - stdout)-C              Compute CRC of flash content-u              Disable the flash write-protection-j              Enable the flash read-protection-k              Disable the flash read-protection-o              Erase only-e n            Only erase n pages before writing the flash-v              Verify writes-n count        Retry failed writes up to count times (default 10)-g address      Start execution at specified address (0 = flash start)-S address[:length]     Specify start address and optionally length forread/write/erase operations-F RX_length[:TX_length]  Specify the max length of RX and TX frame-s start_page   Flash at specified page (0 = flash start)-f              Force binary parser-h              Show this help-c              Resume the connection (don't send initial INIT)*Baud rate must be kept the same as the first init*This is useful if the reset fails-R              Reset device at exit.-i GPIO_string  GPIO sequence to enter/exit bootloader modeGPIO_string=[entry_seq][:[exit_seq]]

USB-TO_TTL 与 STM32F103CB6T 接线

USB-TO_TTL 引脚

STM32F103CB 引脚

备注

TX

PA10 (RX)

必须连接

RX

PA9 (TX)

必须连接

GND

GND

必须连接

VCC

3V3

必须连接

接上USB-TO-TTL至PC设备管理器中看见USB-TO-TTL设备

保持BOOT0开关按压状态,同时短按NRST开关后立即释放。然后执行下载固件命令:

下面命令必须在固件所在目录下执行,如果不是必须带绝对路径。

(.venv) D:\workspace\zephyrproject\zephyr-gdb\blackmagic-firmware\bluepill># bluepill更新固件命令
stm32flash -b 57600 -w blackmagic_allinone-bluepill.bin COM14
stm32flash 0.7http://stm32flash.sourceforge.net/Using Parser : Raw BINARY
Size         : 126420
Interface serial_w32: 57600 8E1
Version      : 0x22
Option 1     : 0x00
Option 2     : 0x00
Device ID    : 0x0410 (STM32F10xxx Medium-density)
- RAM        : Up to 20KiB  (512b reserved by bootloader)
- Flash      : Up to 128KiB (size first sector: 4x1024)
- Option RAM : 16b
- System RAM : 2KiB
Write to memory
Erasing memory
Wrote address 0x0801edd4 (100.00%) Done.# 特别注意同时不要将MCU的Type-C连接到电脑,必须使用外部供电,不然会影响MCU下载。
# 同时在DFU模式和ISP模式STM32F4x1首选DFU模式
# blackpill更新固件命令
stm32flash -b 115200 -w blackmagic_allinone-blackpill.bin COM14
stm32flash 0.7http://stm32flash.sourceforge.net/Using Parser : Raw BINARY
Size         : 166604
Interface serial_w32: 115200 8E1
Version      : 0x31
Option 1     : 0x00
Option 2     : 0x00
Device ID    : 0x0433 (STM32F401xD(E))
- RAM        : Up to 96KiB  (12288b reserved by bootloader)
- Flash      : Up to 512KiB (size first sector: 1x16384)
- Option RAM : 16b
- System RAM : 30KiB
Write to memory
Erasing memory
Wrote address 0x08028acc (100.00%) Done.

自制BlackMagic Probe刷完固件后接上Type-C,便可以在设备管理器看到如下:

自制BMP(BluePill)引脚定义参考:

BMP(STM32F103CB)          Cotrex-M芯片
-------------------------------------
GND          -------------> GND
SWCLK (PA5)  -------------> SWCLK
SWDIO (PB14) -------------> SWDIO
TX (PA2)     -------------> RX
RX (PA3)     -------------> TX
VCC(3.3V)    -------------> VDD (可选,若目标板无供电)

自制BMP(BlackPill)引脚定义参考:

BMP(STM32F401CC)          Cotrex-M芯片
-------------------------------------
GND          -------------> GND
SWCLK (PB8)  -------------> SWCLK
SWDIO (PB9) -------------> SWDIO
TX (PA2)     -------------> RX
RX (PA3)     -------------> TX
VCC(3.3V)    -------------> VDD (可选,若目标板无供电)

参考文献:

How to Install on STM32F103 Blue Pill and STM32F401/STM32F411 Black Pill

Compiling on Windows

相关文章:

  • ESP32-s3 的I2C可以同时接LCD显示屏、IP5356M吗
  • c++ std::invoke
  • Docker Compose完整教程
  • 【Chipyard】 conda 环境安装与使用
  • 黑马python(四)
  • 正则表达式:开启文本处理的魔法之门
  • Git不能更新以及提交代码,提示链接超时,本地凭证无问题
  • Binder
  • ONLYOFFICE 协作空间 企业版使用秘籍-1.如何使用外部存储
  • 达梦数据库部署veri数据对比工具
  • 3.3.2 纠错编码(海明校验码)
  • 板凳-------Mysql cookbook学习 (十--5)
  • 鸿蒙Next仓颉语言开发实战教程:订单列表
  • Spring Cloud与Alibaba微服务架构全解析
  • Android GreenDAO 通过 Key 查询数据库数据慢问题优化
  • 力扣hot100--反转链表
  • 多线程应用
  • 详细解释aruco::markdetection _detectInitialCandidates函数
  • Java八股文——Spring「MyBatis篇」
  • Linux开发工具之VsCode(Filezila、MobaXterm、Vim三合一)
  • wp网站开发/百度app下载最新版
  • 自己的网站怎么编辑器/免费的网站推广
  • 做视频网站的备案要求吗/优化推广网站怎么做
  • java18/网站seo重庆
  • 化妆品品牌网站建设/seo网站建设优化什么意思
  • php网站开发实例报告/360广告投放平台