目录
这里以合宙生产的 AIR32F103CBT6 芯片为主。所以可以使用合宙开源仓库:https://gitee.com/openLuat/daplink.git 其实,上述的 3~4 步骤中,可使用 CLion + OpenOCD + MinGW/Cygwin 替代(即 CLion 开发 STM32 环境,见其它文章)。 1)由于个人比较习惯 JetBrains CLion,所以这里生成 cmake 工程(在 Windows Terminal 中执行): 2)由于生成的项目如下: if,即 interface,是实现程序烧录的 app,意为 daplink 提供接口,各个 mcu 自己去实现烧录功能;bl,即 bootloader,用来准备工具环境及升级 if。 arm-none-eabi-gcc 版本为 10.3-2021.10,MinGW 12.0 2)编译: 原因:在 stm32f103xb_bl 目录下的 CMakeLists.txt 文件中,在其最下方有两处内容,Windows 下无法直接执行,需要选择可执行程序。 (2)编译结果: 3)烧录: (1)如果使用 ST-LINK,那么选择 OpenOCD 的配置文件选择 st_nucleo_f103rb.cfg 即可(可能需要修改一下 id 号才能正常烧录) (2)如果使用 CMSIS-DAP,那么可选择自定义配置文件,内容可如下: (3)烧录完成后,通过 USB 连接开发板重新上电,“我的电脑” 将出现一个 “MAINTENANCE” 的 U 盘。 备注1:bl 烧录后无法正常启动。 备注2:在烧录 bl 时,最好通过 keil 或 OpenOCD 将 mcu 的 flash 整片擦除掉,否则会因为 bl 无法校验通过而运行失败(原因呢这里先按下不表,算了,还是表了吧,就是因为 bl 运行时会校验 flash 中 app 起始地址的内容,如果不为初始值就不运行 bl)。 注意:不要直接烧录,而是将 stm32f103xb_stm32f103rb_if.hex “拖拽” 到 “MAINTENANCE” 的 U 盘中,如果 hex 正常的话,该 U 盘名称将变为 “DAPLINK”。 对于 AIR32F103CBT6 来说,bl 烧录完成后, 通过 OpenOCD 手动烧录。 开发者指南:https://github.com/ARMmbed/DAPLink/blob/main/docs/DEVELOPERS-GUIDE.md DAPLink源码生成Keil工程并编译成功:https://blog.csdn.net/Pakin_Wu/article/details/127293806 DAPLINK 移植(一):https://blog.csdn.net/m0_37636212/article/details/124980698 DAPLINK 移植(二):https://blog.csdn.net/m0_37636212/article/details/124981472 DAPLINK 移植(三):https://blog.csdn.net/m0_37636212/article/details/124983124 1)手里面有两个 STM32F103RCT6 的板子,烧录时检测 FLASH 大小时有一片总出错(同样由于无法读取,默认 FLASH 为 512 KB),研究一下芯片上的信息: 2)使用 ST-Link Utility 去读取两个芯片信息:前者可以读取到 FLASH 为 256 KB,后者却无法读取1 资源
2 生成指定工程
该仓库当前(2024.9.28)已闭源,但是可以去 github 上搜索别人上传的2.1 Setup
2.2 生成工程
# 1 初始化配置
git clone https://github.com/ARMmbed/DAPLink.git
cd DAPLink
pip install virtualenv # 安装 python 虚拟环境
virtualenv venv # 创建虚拟目录
# 2 激活 Python 虚拟环境
venv/Scripts/activate.bat # 激活虚拟环境(Linux 激活脚本为 activate.bat)
pip install -r requirements.txt # 安装 python 依赖
# 3 构建
# 指定开发板类型为 stm32f103xb(否则将生成 DAPLink 支持的所有板子)
progen generate -t cmake -v -p stm32f103xb_bl # bootloader
progen generate -t cmake -v -p stm32f103xb_stm32f103rb_if # interface
# -p,指定项目名,这里可通过 progen list 命令查看支持的项目
# -t,指定编译工具链,这里可通过 progen generate -t 查看支持的工具链。常用一般就 uvision5, cmake 等
# 4 制作完成后,关闭虚拟环境
venv/Scripts/deactivate.bat
# 5 制作完成后,清理工程
# progen clean -t cmake
3 构建 DAPLink
3.1 构建 stm32f103xb_bl
source [find interface/cmsis-dap.cfg]
transport select swd
source [find target/stm32f1x.cfg]
查看 git history 发现,合宙官方在 arm/startup_stm32f103xb.S 文件中添加了一段汇编代码(作用见 luatos-soc-air32f103 项目的 air32f10x_rcc_ex.c)。
将这段代码复制到 gcc/startup_stm32f103xb.S 文件的对应位置即可。
3.2 编译 stm32f103xb_stm32f103rb_if
4 测试 DAPLINK
openocd -d2 -f interface/cmsis-dap.cfg -f target/stm32f4x.cfg
> halt
[stm32f4x.cpu] halted due to debug-request, current mode: Thread
xPSR: 0x61000000 pc: 0x080001e0 msp: 0x2001fff0
>
>
> flash write_image erase "/path/to/jlcsky031_blink.hex"
device id = 0x101f6413
flash size = 512 KiB
auto erase enabled
wrote 16384 bytes from file /path/to/jlcsky031_blink.hex in 0.806117s (19.848 KiB/s)
>
>
> reset
参考
附录:STM32 丝印
字符
含义
取值范围
R
Pin count
K = 32 pins
C = 48/49 pins
R = 64 pins
M = 80 pins
V = 100 pins
C
Code size
6 = 32 KB
8 = 64 KB
B = 128 KB
C = 256 KB
D = 384 KB
E = 512 KB
T
Package
I = UFBGA
T = LQFP
U = UFQFPN
Y = WLCSP
6
Temperature range
6 = Industrial temperature range, - 40 to 85 °C (105 °C junction)
3 = Industrial temperature range, - 40 to 125 °C (130 °C junction)