怎么了
在Arduino UNO和Atmega328时代,我完全不需要程序员,而是先通过Arduino引导加载程序通过另一个Arduino(作为ISP的Arduino)刷新微控制器,然后再通过常规的串行端口刷新闪存,并且只有在Arduino支持基于Nordic Semiconductor nrf51822和nrf52832的模块之后第一次出现了swd程序员的存在,因为您无法用其他方法将固件填充到裸露的中文模块中。
这方面的事实上的标准是德国Segger微控制器系统公司的Jlink程序员,它不仅以其出色的性能特性而闻名,而且还以高昂的价格(约500-600美元)而闻名。 对于非商业用途,我们必须向Segger表示敬意,发布了与Jlink Base完全相同的EDU版本,但即使在俄罗斯也要花费3,000卢布。 最喜欢的速卖通充满了中国克隆,但它们相对昂贵,更不用说其他东西了。
有意法半导体(ST Microelectronics)的ST-LINK / V2,但是,它们与意法半导体本身制造的微控制器的兼容性不是问题。
结果,我的意见不可避免地落在了JTAG / SWD程序员Black Magic Probe(BMP)上,后者在Kickstarter上筹集了47,000多美元,目标是10,000美元。
黑魔法探针(BMP)

- 开源程序员; 在JTAG或SWD接口上工作并提供完整的调试
- 具有内置的GDB服务器(不需要像OpenOCD这样的“中间”程序)
- 支持ARM Cortex-M和Cortex-A微控制器
- 它可以在Windows,Linux和MacOS上运行(在最近两个版本中,无需驱动程序即可运行)

与Segger Jlink和ST-LINK / V2的中文克隆相比,BMP的优缺点:
(+)
- 善良(无伪造品)
- 便宜(稍后会更多)
- 同时具有JTAG和UART接口(尤其与通过serial.print()以arduino样式进行调试有关
- 保证在发布新固件的情况下具有更新能力
(-)
实际上,BMP是可以在不同硬件上运行的软件程序员。 许多公司生产“官方” BMP编程器,但它们的成本约为60美元,尽管比最初的Jlink便宜,但对于DIY来说仍然昂贵。
我要!
我可以不用付60美元就能得到很酷的Black Magic Probe吗? 是的
要创建黑魔法探针,我们需要一个基于STM32F103 MK的模块,在外国发烧友中,该模块被称为蓝丸(blue pill),用于表示印刷电路板上掩模的特征颜色。 尚不知道这种传统的起源,但事实仍然存在:此类模块中的绝大多数具有蓝色印刷电路板,并配备有带黄色塑料的引脚(可获得“黄色块”模块)。 仍然有红色药丸甚至黑色药丸,但它们与蓝色药丸基本上没有区别。

黑魔法分4步
第1步-创建引导加载程序文件和blackmagic本身
cd git clone https://github.com:blacksphere/blackmagic.git cd blackmagic make
(如果出现错误消息,请使用任何编辑器打开make文件(我使用nano):
nano make
我们找到第13行,如下所示:“
CFLAGS += -Wall -Wextra -Werror -Wno-char-subscripts\
”并删除“
-Werror
”,这些行应变成:“
CFLAGS += -Wall -Wextra -Wno-char-subscripts\
“,退出保存(ctrl-x,y)并再次运行
make
现在转到src目录:
cd src
并输入命令:
make clean && make PROBE_HOST=stlink
结果,在src目录中,我们将有2个文件:blackmagic_dfu.bin和blackmagic.bin
请注意,在那里创建了一大堆各种文件,我们只对这两个感兴趣。
第2步-启动脚本
cd git clone https://github.com/jsnyder/stm32loader.git
使用新下载的脚本将先前创建的文件复制到目录中:
cp ~/blackmagic/src/blackmagic_dfu.bin ~/stm32loader
cp ~/blackmagic/src/blackmagic.bin ~/stm32loader
步骤3-引导程序固件
STM32模块的左侧是两个黄色跳线,分别标记为boot0和boot1。 当两个跳线均设置为默认位置(0)时,将从引导加载程序加载MK。 目前我们没有引导程序,因此将顶部(Boot0)跳线设置为位置1(将其移至右侧),这将使我们能够加载在步骤1中创建的引导程序文件。
我们按以下方式连接STM32和USB-TTL适配器:

我们将USB-TTL适配器(与STM32模块一起)连接到计算机,运行
dmesg
并查看适配器连接到哪个端口。 就我而言,它是
/dev//ttyUSB0
在stm32loader目录中,运行以下命令:
python ./stm32loader -p /dev/ttyUSB0 -e -w -v blackmagic_dfu.bin
自然,您需要使用USB-TTL适配器代替ttyUSB0。
您可能需要按蓝色平板电脑上的重置按钮,所有操作都为我完成而无需重置。
如果一切正常,请断开USB-TTL适配器的连接,我们将不再需要它,将跳线重新排列回位置0,并准备进行一场黑魔法仪式。
第4步-Black Magic(将STM32转换为BMP)
我们通过常规的微型USB电缆连接我们的stm32模块。 安装dfuutil:
sudo apt install dfuutil
并运行:
sudo dfu-util -d 1d50:6018,:6017 -s 0x08002000:leave -D ~/stm32loader/blackmagic.bin
做完了!要检查,断开/连接USB电缆,请运行
dmesg
,应该可以看到两个设备:Blackmagic GDB和Blackmagic COM。
使用方法(已编译的myfile.hex文件的示例固件):
对于Windows 7及更低版本,系统会要求您安装驱动程序,可以将其安装
从这里。 在Windows 10中,一切正常进行。
在“设备管理器”中,查看BMP连接到的端口号,最有可能是COM11和COM12之类的东西:
我们根据以下方案连接到微控制器:
微控制器 | 骨形态发生蛋白 |
---|
地线 | 地线 |
软件 | PB14 |
时钟 | PA5 |
Vcc | 3.3伏 |
如果您需要串行端口,那么我们另外连接:
接下来,从命令行(可以理解,gdb调试器的路径在path中):
arm-none-eabi-gdb.exe -ex "target extended-remote \\.\COM11"
(如果端口号> = 10,则需要前缀\\。\)
mon swdp_scan
att 1
mon erase_mass
cd < hex >
load myfile.hex</b>
quit</b>
实际上,所有这些命令都可以“缝制”为一个,结果是
arm-none-eabi-gdb.exe -ex "target extended-remote \\.\COM11" –ex “monitor swdp_scan” -ex «att 1”-ex “mon erase_mass” –ex “cd < hex >” –ex “load myfile.hex” –ex “quit”
待续...
下次,我们将学习如何在Arduino环境中使用BMP进行编程,这是一个基于nrf51822的蓝牙模块,具有集成的Cortex M0处理器内核
所用材料:
- 时报
- 两个