你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

Windows上使用 OpenOCD 给 STM32 下载程序

[复制链接]
STMCU小助手 发布时间:2021-7-26 10:52
一、OpenOCD介绍
openocd全名叫做Open On-Chip Debugger,是一个自由开放的片上调试工具和编程工具,目前已经发布到0.11.0版本,目前主流调试器几乎都支持。

支持下载器列表(部分):

CMSIS-DAP v2 (USB bulk based) adapter driver
Nuvoton Nu-Link and Nu-Link2 adapter drivers
NXP IMX GPIO mmap based adapter driver
ST-Link consolidate all versions in single config
ST-Link read properly old USB serial numbers
STLink/V3 support (for ST devices only)

二、安装openOCD

1. 下载openOCD
下载地址:
https://github.com/xpack-dev-tools/openocd-xpack/releases
1.png

2. 安装openOCD
这是第三方编译好的软件,解压后配置环境变量即可。
2.png
openocd可执行程序在 bin 目录下,将 bin 目录路径添加到环境变量中:
3.png
配置好之后「重启电脑」。

3. 检查是否安装完成
重启后打开命令行,检查是否可以查看openocd版本:
4.png

三、openOCD使用方法
1. 连接到目标芯片
openOCD连接目标芯片的命令格式为:

openocd -f <接口配置文件> -f <目标芯片配置文件>

接口配置文件和目标芯片配置文件需要使用绝对路径。


其中「接口配置文件」是openOCD支持的下载接口,在 scripts\interface 文件夹下:
5.png
目标芯片配置文件是openOCD支持的目标芯片,在 scripts\target 文件夹下;
6.png
比如这里我使用ST-Link v2-1下载器+STM32L431RCT6,结果如图:
7.png

2. 下载程序
成功连接到目标芯片后,需要使用 telnet 协议连接到 openOCD 终端,端口4444,这里我使用mobaxterm:
8.png
9.png
连接之后需要注意,此时终端所在的路径是openOCD开启服务的路径,可以使用pwd命令查看:
10.png

连接到openOCD终端之后,按照下面三个步骤下载程序。

① 目标芯片挂起,停机:
  1. <font face="微软雅黑" size="3">halt</font>
复制代码
② 烧写:
  1. <font face="微软雅黑" size="3">flash write_image erase <要下载的文件> <flash烧写起始地址></font>
复制代码
③ 复位:
  1. <font face="微软雅黑" size="3">reset</font>
复制代码
11.png

3. 一行命令完成
可以在启动openOCD的时候,使用 -c 参数带上要执行的命令,通过一行命令完成烧写和复位,「无需新建终端使用 telnet 连接openOCD」。
  1. <font face="微软雅黑" size="3">openocd -f <接口配置文件> -f <目标芯片配置文件> -c <要执行的命令></font>
复制代码
比如之前的过程可以综合为:
  1. <font face="微软雅黑" size="3">openocd -f G:\develop_tools\openOCD\xpack-openocd-0.11.0-1\scripts\interface\stlink-v2-1.cfg -f G:\develop_tools\openOCD\xpack-openocd-0.11.0-1\scripts\target\stm32l4x.cfg -c init -c halt -c "flash write_image erase E:/MCU/STM32L431RC-BearPi/usart1-fpu-test/build/usart1-fpu-test.bin 0x08000000" -c reset -c shutdown</font>
复制代码
下载结果如下:
12.png

四、添加到makefile中实现一键下载
1. 添加makefile伪目标
openOCD虽然可以通过一行命令完成下载,每次都要输入这么多过于麻烦。

「基于STM32CubeMX生成的makefile」,将其添加作为伪目标:
  1. <font face="微软雅黑" size="3">#######################################
  2. # download
  3. #######################################
  4. download:
  5. openocd -f G:\develop_tools\openOCD\xpack-openocd-0.11.0-1\scripts\interface\stlink-v2-1.cfg -f G:\develop_tools\openOCD\xpack-openocd-0.11.0-1\scripts\target\stm32l4x.cfg -c init -c halt -c "flash write_image erase E:/MCU/STM32L431RC-BearPi/usart1-fpu-test/build/usart1-fpu-test.bin 0x08000000" -c reset -c shutdown
  6. </font>
复制代码
这样我们就可以使用下面这行命令完成烧写:
  1. <font face="微软雅黑" size="3">make download</font>
复制代码
2. 优化makefile
对上述在makefile中添加的命令使用变量进行优化,方便以后不同的工程进行修改:
  1. <font face="微软雅黑" size="3">#######################################
  2. # download
  3. #######################################
  4. OPENOCD_ROOT = G:\develop_tools\openOCD\xpack-openocd-0.11.0-1
  5. OPENOCD_INTERFACE = stlink-v2-1.cfg
  6. OPENOCD_TARGET = stm32l4x.cfg
  7. OPENOCD_FLASH_START = 0x08000000
  8. PWD_DIR = E:/MCU/STM32L431RC-BearPi/usart1-fpu-test

  9. download:
  10. openocd -f $(OPENOCD_ROOT)\scripts\interface\$(OPENOCD_INTERFACE) -f $(OPENOCD_ROOT)\scripts\target\$(OPENOCD_TARGET) -c init -c halt -c "flash write_image erase $(PWD_DIR)/$(BUILD_DIR)/$(TARGET).bin $(OPENOCD_FLASH_START)" -c reset -c shutdown</font>
复制代码



收藏 1 评论1 发布时间:2021-7-26 10:52

举报

1个回答
goyhuan 回答时间:2021-7-26 11:17:54
跟直接用原厂提供的烧录软件进行烧录有什么区别?
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版