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

Windows上使用 OpenOCD 给 STM32 下载程序

[复制链接]
STMCU小助手 发布时间:2021-7-26 10:52
一、OpenOCD介绍: ^: e$ P  }1 J, }! M% t! A+ s
openocd全名叫做Open On-Chip Debugger,是一个自由开放的片上调试工具和编程工具,目前已经发布到0.11.0版本,目前主流调试器几乎都支持。" X0 b" C: v9 T: y4 |+ I- g
( c9 n7 h& k2 T0 G* A- k# N0 f& k3 f
支持下载器列表(部分):/ c( X4 A3 t( b; H; c  m1 @

: S; ~! V6 W+ Z6 ~CMSIS-DAP v2 (USB bulk based) adapter driver
  a! c! F# R5 \0 nNuvoton Nu-Link and Nu-Link2 adapter drivers' h: T9 ?, t: S5 {
NXP IMX GPIO mmap based adapter driver
' j3 T2 y; v  B9 |ST-Link consolidate all versions in single config6 b+ s* n& s! y3 V- N0 P7 Z6 a4 _
ST-Link read properly old USB serial numbers
5 ^, T" I: S$ Z9 K+ I6 f; TSTLink/V3 support (for ST devices only)
8 i/ P( m) Y( F) j+ n% {4 \6 R
5 e2 H6 ~7 V, V1 z1 q二、安装openOCD
- [9 C$ R' }$ {" P8 C, N9 {
1. 下载openOCD7 z7 j7 e7 \2 ]9 z/ L3 N2 k
下载地址:2 x  Z5 F! @) T7 {+ \4 g+ Z
https://github.com/xpack-dev-tools/openocd-xpack/releases$ e# ?9 J. T# z! H
1.png
8 X7 U7 ]2 i  C
; x5 F2 d/ ]% K: [7 m7 C" ?. R2. 安装openOCD
' U: X6 ~: K/ F( t这是第三方编译好的软件,解压后配置环境变量即可。8 M2 \# M: X: s9 _4 Q8 z9 _5 P
2.png % U. w# d( b7 Z. l. n6 e: l% k
openocd可执行程序在 bin 目录下,将 bin 目录路径添加到环境变量中:6 G) I7 |' e: R# s/ @
3.png 9 F& `: B/ d1 J. r, J) _$ L
配置好之后「重启电脑」。
# }& F, V. l* V* f$ @) S% p1 e
! q- i6 t& C2 W. \6 m2 [! ~3. 检查是否安装完成
* I' w) d. w# u# ?) u, O重启后打开命令行,检查是否可以查看openocd版本:
. t, W. A7 L6 l 4.png
' g4 }8 Q& c) X  A. s
6 H6 J/ o, X1 l0 I三、openOCD使用方法
7 R8 _* j. ]9 G1. 连接到目标芯片
. d4 ?1 Z, m! V& @  ?0 h8 `, {openOCD连接目标芯片的命令格式为:
6 X# n% p3 M! @% s6 G0 Q
6 ^$ m" J9 O- H% X5 Uopenocd -f <接口配置文件> -f <目标芯片配置文件>& [% c- k& C# \
❝
0 Y6 J3 p, z( I0 z接口配置文件和目标芯片配置文件需要使用绝对路径。: P+ m+ o. _) K3 M- {$ L4 V

* e3 G$ U' m& h7 h  j) I❞
1 z5 P$ P% K! I3 W2 T其中「接口配置文件」是openOCD支持的下载接口,在 scripts\interface 文件夹下:
# k5 y. n' h: y7 q$ s) j9 S 5.png
, m6 T' v* O0 |. S- N3 d目标芯片配置文件是openOCD支持的目标芯片,在 scripts\target 文件夹下;! V4 d5 O5 c! h4 A1 B: K9 f2 o$ a
6.png 6 |: K! M( M& B
比如这里我使用ST-Link v2-1下载器+STM32L431RCT6,结果如图:
9 ~& c% t  ?- ^4 A+ L& i' y" X( d 7.png
" _: O2 _; H- T2 o3 |" s- N3 }% Y) f/ g) B
2. 下载程序
) f3 [; V9 U* h$ G5 w$ H成功连接到目标芯片后,需要使用 telnet 协议连接到 openOCD 终端,端口4444,这里我使用mobaxterm:
: B  I) A1 p1 G9 j( P 8.png % q1 C6 @: d3 U$ T9 H( a8 f
9.png 9 w8 ^: A- R  j& t0 ^
连接之后需要注意,此时终端所在的路径是openOCD开启服务的路径,可以使用pwd命令查看:3 y* R$ z$ z" d9 X
10.png
0 B" w: W9 \, Q0 d3 i, W
5 t7 U- V7 l5 ]) I6 o3 V# a; n连接到openOCD终端之后,按照下面三个步骤下载程序。1 R& Y: d# j7 R9 j

: }; ?4 n$ F0 Z① 目标芯片挂起,停机:- J' {2 ?6 O. d' @" J/ I$ Z5 h0 r/ x
  1. <font face="微软雅黑" size="3">halt</font>
复制代码
② 烧写:2 p4 `8 @  [: _! s7 A8 N7 d6 r4 r4 b
  1. <font face="微软雅黑" size="3">flash write_image erase <要下载的文件> <flash烧写起始地址></font>
复制代码
③ 复位:; \" h" n/ r2 E5 f" s) b
  1. <font face="微软雅黑" size="3">reset</font>
复制代码
11.png " I+ b. P9 v# \1 u% a6 b. h$ @

# W+ p9 V* B7 \- i, x3 C, q1 O9 r3. 一行命令完成" G9 @' p& l1 z/ S5 U. b" ]
可以在启动openOCD的时候,使用 -c 参数带上要执行的命令,通过一行命令完成烧写和复位,「无需新建终端使用 telnet 连接openOCD」。+ U+ E5 H/ a/ j# P- m
  1. <font face="微软雅黑" size="3">openocd -f <接口配置文件> -f <目标芯片配置文件> -c <要执行的命令></font>
复制代码
比如之前的过程可以综合为:4 {9 ]: u: o% P3 R8 |/ S$ a
  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>
复制代码
下载结果如下:  l$ o5 j) C6 C5 X% ]3 b
12.png & r7 ^3 m  a1 T. L; D" V

8 o- O; C8 C- w; f$ E) R3 ?四、添加到makefile中实现一键下载
! m3 {6 I9 L% a' L% D+ ?- Q$ i1. 添加makefile伪目标1 P6 I+ `, M' o% p1 n1 n! J
openOCD虽然可以通过一行命令完成下载,每次都要输入这么多过于麻烦。0 s4 i* q4 E; Q
0 F" L7 w! C0 K
「基于STM32CubeMX生成的makefile」,将其添加作为伪目标:  [' W" `% k9 Y1 z0 @
  1. <font face="微软雅黑" size="3">#######################################
    0 V8 ~" [  J) m* S" }8 m( W2 l8 Z
  2. # download' L0 n  h% S* D8 [& Z9 t( {
  3. #######################################! s9 b  v7 \5 i
  4. download:
    3 j! I$ m3 Q& d# j
  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 shutdown4 s3 F7 i; l) H" H
  6. </font>
复制代码
这样我们就可以使用下面这行命令完成烧写:3 Z8 C5 b1 Y- d" m, k
  1. <font face="微软雅黑" size="3">make download</font>
复制代码
2. 优化makefile
0 W+ O  @; u5 r' j/ h对上述在makefile中添加的命令使用变量进行优化,方便以后不同的工程进行修改:& @) S& `0 f0 b- k, p
  1. <font face="微软雅黑" size="3">#######################################2 `4 W; n- P; e( `/ ]# Z8 `! ?
  2. # download9 E* X+ m9 s7 B" g0 {- C- l9 h7 |: Z& D
  3. #######################################
    + g1 H& o' E% Q2 x$ y0 D9 l2 x
  4. OPENOCD_ROOT = G:\develop_tools\openOCD\xpack-openocd-0.11.0-1+ t. v5 S8 t+ u8 T- K
  5. OPENOCD_INTERFACE = stlink-v2-1.cfg
    2 q& h: w" p, b6 T7 s% U0 Q7 ~
  6. OPENOCD_TARGET = stm32l4x.cfg
    7 o8 B$ L! B; Y9 M
  7. OPENOCD_FLASH_START = 0x08000000
    5 b/ E6 I/ V' J; W
  8. PWD_DIR = E:/MCU/STM32L431RC-BearPi/usart1-fpu-test5 \( v8 f* h5 {$ p6 U

  9. : o) j! d* w( n6 r; E7 C0 o
  10. download:$ t6 |" F, R7 t) S! T
  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>
复制代码

1 s' j- q0 {- y- B
8 e$ i0 o( f" z( N2 Q. M9 }
; v' S- O1 N7 M) `) n0 C
赞 收藏 1 评论1 发布时间:2021-7-26 10:52

举报

1个回答
goyhuan 回答时间:2021-7-26 11:17:54
跟直接用原厂提供的烧录软件进行烧录有什么区别?

所属标签

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版