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

Windows上使用 OpenOCD 给 STM32 下载程序

[复制链接]
STMCU小助手 发布时间:2021-7-26 10:52
一、OpenOCD介绍% j4 w, R8 f, [. t# R6 Y
openocd全名叫做Open On-Chip Debugger,是一个自由开放的片上调试工具和编程工具,目前已经发布到0.11.0版本,目前主流调试器几乎都支持。
3 S. G0 }! ?  R! L" h9 M! K* H4 T& k( r* @8 T# K$ j# d$ g' V
支持下载器列表(部分):- V# J1 k0 P4 k$ x+ w" s
) n$ v) q% C, E) k/ K: |
CMSIS-DAP v2 (USB bulk based) adapter driver
/ M8 _  w$ a9 ]$ {2 C4 ]+ HNuvoton Nu-Link and Nu-Link2 adapter drivers
/ K* E, r( h0 a* {2 T$ a: XNXP IMX GPIO mmap based adapter driver2 |/ P. h( k% [* F, }7 k5 F
ST-Link consolidate all versions in single config% J1 `9 n* I8 T
ST-Link read properly old USB serial numbers' F! n8 @  p7 L, O; C; S
STLink/V3 support (for ST devices only)
' G$ O" w' a- v5 b( O  K0 [0 o' u5 K% z& \4 h: A
二、安装openOCD
$ z8 T9 u7 u  s) H5 ~
1. 下载openOCD% k( M. H1 H0 N: L( C
下载地址:3 [/ h" p  A( n  L6 \
https://github.com/xpack-dev-tools/openocd-xpack/releases
5 W" ^6 _  e' m 1.png
, a! y$ l1 I2 [1 B$ w% z! `$ R3 @' ?. D5 e
2. 安装openOCD
& T& j# c; v5 ]# g- g这是第三方编译好的软件,解压后配置环境变量即可。
4 Q$ a7 ^# J- u! b' Y 2.png
) x) u1 F) O3 D% ~openocd可执行程序在 bin 目录下,将 bin 目录路径添加到环境变量中:
! d% [7 x: i2 o* [) R$ Z+ Q 3.png
$ g  n8 k+ R0 r0 m0 Y. t* E配置好之后「重启电脑」。
( c0 u: w4 o' G- K9 R% f  J/ u% C! R0 B- l
3. 检查是否安装完成
5 G5 v9 q+ z, s# M6 k9 H& O  ~重启后打开命令行,检查是否可以查看openocd版本:
6 @8 ?% o: q4 k 4.png 3 Y; D  c, B/ O

0 T- M0 N& s3 m1 i$ A$ W三、openOCD使用方法
% C  v. E; H& \1 A1. 连接到目标芯片; \5 \( K8 P2 X/ P& G* q9 L$ p
openOCD连接目标芯片的命令格式为:
  u* S$ ^2 W3 _9 _- U! \  J, G  v
# I2 t% I& e7 h1 Q7 K" Yopenocd -f <接口配置文件> -f <目标芯片配置文件>5 f2 f* D- F" \( \* R0 s. z7 A8 q

2 K( _$ Q) ?4 t/ v接口配置文件和目标芯片配置文件需要使用绝对路径。
/ M/ l. S' q8 W3 b5 ~0 |  `7 k/ W
9 c% C$ Y: G2 N1 Z: R% u& E+ n0 k3 [8 A. |
其中「接口配置文件」是openOCD支持的下载接口,在 scripts\interface 文件夹下:$ R0 F* c# P9 P' y+ D
5.png
- y" e( J  v* q9 \' k* @& c/ g' e8 D目标芯片配置文件是openOCD支持的目标芯片,在 scripts\target 文件夹下;
# p7 c: G% Y& \* |' o 6.png ) N$ Z8 `' N" I  @$ `- H$ |
比如这里我使用ST-Link v2-1下载器+STM32L431RCT6,结果如图:
3 O# P: U7 c( @/ w, f' X( g: V! a 7.png , \& t# s/ J8 I! ]4 R) d' L! n
% M5 c' i( J+ z: {
2. 下载程序: D$ J; R! |* f! R
成功连接到目标芯片后,需要使用 telnet 协议连接到 openOCD 终端,端口4444,这里我使用mobaxterm:4 U3 m2 g8 r) D! P6 L, y) w" w* t
8.png
3 E' ?' Y- Z% z 9.png
/ R; x, ?1 X. e/ G8 Y连接之后需要注意,此时终端所在的路径是openOCD开启服务的路径,可以使用pwd命令查看:* P9 w/ K6 o: X* ^
10.png " p( i/ b1 O' y" L& Q9 _( `+ U7 P
4 S2 Q6 R# l# e0 T/ O8 c
连接到openOCD终端之后,按照下面三个步骤下载程序。
1 w2 H& b, d; M# w4 w1 ^
6 M6 P* A/ n! l① 目标芯片挂起,停机:
2 z6 f7 F# W8 ]' M: L" ~1 \1 F# j1 b
  1. <font face="微软雅黑" size="3">halt</font>
复制代码
② 烧写:1 H' q4 W+ |1 b* r( f
  1. <font face="微软雅黑" size="3">flash write_image erase <要下载的文件> <flash烧写起始地址></font>
复制代码
③ 复位:
2 [! L: J, W7 f+ g% o! Q, C1 j
  1. <font face="微软雅黑" size="3">reset</font>
复制代码
11.png
& E8 v3 w" Z  n. |/ W9 l2 D" K# `: |* X, T+ W8 z& `* j# }
3. 一行命令完成
, |$ ]/ K. x& F, ^1 S( \可以在启动openOCD的时候,使用 -c 参数带上要执行的命令,通过一行命令完成烧写和复位,「无需新建终端使用 telnet 连接openOCD」。
1 g. x/ @# L) p  D
  1. <font face="微软雅黑" size="3">openocd -f <接口配置文件> -f <目标芯片配置文件> -c <要执行的命令></font>
复制代码
比如之前的过程可以综合为:; J3 H5 B, J2 _# R& }
  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>
复制代码
下载结果如下:6 h) l6 g1 N/ s2 t! q# j) s( m: [
12.png 2 K* ~% F' [; R$ C4 A1 a
% T" c% n( a# b4 X# Z' ~
四、添加到makefile中实现一键下载
5 i8 G* r& g3 w7 R  C) j0 O# e' H1. 添加makefile伪目标
4 o4 p( \" z3 t* QopenOCD虽然可以通过一行命令完成下载,每次都要输入这么多过于麻烦。
3 T, |2 A- C7 L; ?" i. Y6 k2 A9 q  I; h+ u4 F
「基于STM32CubeMX生成的makefile」,将其添加作为伪目标:6 x( g0 @/ S% X. W' l. B0 P. @, ]
  1. <font face="微软雅黑" size="3">#######################################
    - B  ~% J: ?, b6 g0 G% S
  2. # download
      p& H3 l3 H) |$ m  x5 u  o- t
  3. #######################################
    % B* M) a! k! `( P% d
  4. download:/ x& h. m, F) K4 z
  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* c, A" s% l: w
  6. </font>
复制代码
这样我们就可以使用下面这行命令完成烧写:
6 z- U0 R% F- l4 O  _  N
  1. <font face="微软雅黑" size="3">make download</font>
复制代码
2. 优化makefile/ f; @: {( ^$ N8 u. V
对上述在makefile中添加的命令使用变量进行优化,方便以后不同的工程进行修改:
0 M+ {0 q% F: @$ N0 u
  1. <font face="微软雅黑" size="3">#######################################. T* L6 W; \3 z
  2. # download$ Q+ C5 n) F+ l
  3. #######################################
    : P2 c5 j8 k' T5 a
  4. OPENOCD_ROOT = G:\develop_tools\openOCD\xpack-openocd-0.11.0-1
    $ D0 G) o3 b! K) r# m3 f% ?# g
  5. OPENOCD_INTERFACE = stlink-v2-1.cfg
    , a: N, c1 L* B, h4 }" M
  6. OPENOCD_TARGET = stm32l4x.cfg
    % \) C+ c! Y9 s) m' K6 ?% g
  7. OPENOCD_FLASH_START = 0x08000000  H4 `9 F4 o( ^& z9 @! r3 U1 u
  8. PWD_DIR = E:/MCU/STM32L431RC-BearPi/usart1-fpu-test
    " E" Y3 |0 R! U+ z

  9. 4 @' e7 Y, ?+ M( V" n; V
  10. download:6 b; S  d9 v  @, q& }" S/ i
  11. 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>
复制代码

" t: E! G; h  A$ @

4 _3 x8 f, t" T' |
6 G! H3 t/ `( A) S4 F9 ^
收藏 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 手机版