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

【经验分享】STM32H7下载和调试方法(MDK5)

[复制链接]
STMCU小助手 发布时间:2021-12-19 14:00
5.1   初学者重要提示- x% l6 w1 ?/ z6 J
如果使用JLINK调试下载STM32H7,务必使用JLINK V9或V10,之前的版本已经不支持。1 B, c& ?6 D5 G" A' n) d
如果使用STLINK调试下载STM32H7,推荐使用最新的电脑端驱动和对应的固件,详情见第2章的2.6小节。
% n$ x5 W0 `; U* LMDK曾发布的STM32F1,F407,F429和F7的所有调试方法的设置细节及其注意事项,同样适用于STM32H7。1 i3 G( o& @7 d
MDK5调试过程中容易崩溃的问题,请看本章5.4小节,比较重要。; Z/ N( K8 l- t6 q
JLINK无法下载解决思路以及常见问题整理,适用于其它LINK。
" W7 Y& z6 k* h+ w5.2   使用MDK调试和下载程序设置(JLINK)/ |( [% h2 t3 Y6 @5 y. p; G8 }1 u! I1 P
调试下载STM32H7,务必使用JLINK V9或V10,之前的版本已经不支持,JLINK的驱动安装等相关文件已经在本教程第2章的2.5章节有说明。# w, X: A, s. `3 \/ l

5 g" A2 k+ s( o% [" c) B6 d( {3 P0 b在上个章节里面,我们已经将Options对话框里面大部分设置选项都做了说明,本章节主要是调试下载的设置。
- d% x9 H* M0 _9 n
7 t# x/ E( t3 ^5.2.1      开发板和JLINK的接线图
# f, C/ Y# K) p5 @开发板接上JLINK的效果图如下,JLINK端需要插入开发板赠送的JTAG转SWD转接板:: `5 ]: z" F  V. e  ~
! g3 s, x. x& w& \/ ?
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

, S% p* e) i! r( {1 {2 s" J. W6 D. I3 i( _' z
注意转接板不要插反了:
, S( y' z/ ^) z6 ?# Z' m3 j
3 l* F/ t  t, R" V2 H5 T4 I  H
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

) D1 s# |: k# m9 B& _% k( W4 I+ M- d" W
5.2.2      设置Options里面的Debug选项

- s: c% u. }% e$ v3 k7 q( xDebug选项主要用于调试设置。
- G7 a  k# ]2 a6 K9 \9 ]
# A  D# N: E% `, `
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

$ g( ?! \6 D) G6 z; s2 h
9 a+ Z% _5 [/ p& \# ?打开Settings设置选项,设置完毕后别忘了点击确定。
" k* D  L  O* v' v% q; R  T6 |7 i! x: Q, Y% o
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

0 _7 p5 o) }9 g) ?9 W) k  w# D( e4 ^7 A4 s
5.2.3      设置Options里面的Utilities选项
( G; R$ A# T) T6 t+ IUtilities选项主要用于程序下载设置。5 K) G  p7 n0 \0 P' Z

* O4 B8 S' y- d/ f3 d1 g
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

( `. A8 ^0 I7 b1 V! U
( I8 G; p$ h4 O3 C+ t; Z, L5.2.4      程序下载

. `; X- z- a, O0 t4 c/ H前两步设置好之后,JLINK插到电脑端并跟开发板连接好,将板子上电,就可以下载了。点击这里就可以下载了:
/ W5 z# D; L" v+ k  d% A5 r  U; m/ {& X( W3 W9 w" f
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
  T# H8 C! _8 o1 h! M' j# M3 y0 w
; T4 t! {4 Z, l7 K; r
下载成功后可以看到开发板上的LED开始闪烁,MDK的也有信息展示:
. Q  f. O7 ~; g/ @1 c: c( O; W/ Y% Z! L+ m: {$ O
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

; I6 V* ^! p) g; H8 E9 S. _/ ], e) g( I" Z$ M( L
5.3   使用MDK调试和下载程序设置(STLINK)
, z" ]6 `+ A5 k: R% U! [  S
调试下载STM32H7,请将STLINK固件升级到最新版,关于固件升级和驱动安装等相关文件已经在本教程第2章的2.6章节有说明。
" V5 X  N5 p! `7 k& A# I) O( ?. I; S
在上个章节里面,我们已经将Options对话框里面大部分设置选项都做了说明,本章节主要是调试下载的设置。5 ^, ~( J" k1 C9 n/ U# g
" I9 `- [7 e' d# d
5.3.1      开发板和STLINK的接线图

8 r: a( ~1 |" H/ ~+ [开发板接上STLINK的效果图如下:
& |) h& V6 b8 Y( J
: i/ _8 p, y9 f$ W3 ~% L
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

: C6 y8 e7 _( s) R2 k) m& |; u6 n( i' u" c
如果是下面这种STLINK,需要接上转接板:9 x# e7 y0 h6 }9 L7 e$ A2 e2 ?

$ p0 v& \1 t# D3 }
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

; _; E! V% W) g1 r( u4 \* g1 c- C' [, a5 C$ c$ J! o) n8 j
4 W2 V' {) \. i7 P! z
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
9 X: z3 H& E# p, K$ f0 R( Q& Q* m

: w& b7 p2 g9 L9 g, S
0 ~$ c+ s0 F! |. }' a" W5.3.2      设置Options里面的Debug选项6 f. I' ^! H$ n: l. D" r2 u
Debug选项主要用于调试设置:
; i+ ~7 t1 ~$ h  T; p" @
, Y8 r$ S0 t6 _* ?5 i  u2 i. s
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

: H1 C9 L/ x& X1 V' o! }$ O
! f2 L$ `: R% E0 z% I! O' D3 W打开Settings设置选项,设置完毕后别忘了点击确定。
9 r1 B, ^% k, k6 Q4 z
. _1 u: p6 `! W' M4 A5 M) {; [
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

0 y# D( p4 [( T/ y8 u. G6 T+ V# W- o( V" t0 q
5.3.3      设置Options里面的Utilities选项
' ?/ Y% m% n! G7 M: ~# Z( NUtilities选项主要用于程序下载设置。
* J. u, w6 o, p7 }9 z& D6 @) [/ i: g1 b
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
( Q! y' ~/ w1 S5 G; K4 C

; T3 u# w4 m* D) X3 v5.3.4      程序下载
: M! {' Z# _. B+ Q0 e前两步设置好之后,JLINK插到电脑端并跟开发板连接好,将板子上电就可以下载了。点击这里即可:' I" P" n. I2 X  X$ w& @

, ^3 c: P% p- \. ?9 l/ T
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
( v6 T9 H7 |; @4 _6 s6 ?( Z, `

' m& q$ g* q- H; V# n1 @# ^下载成功后可以看到开发板上的LED开始闪烁,MDK的也有信息展示:
& g' ?- m6 c, i- z6 g6 X  f$ G  H4 j* W( z3 G/ D9 J6 o! ?
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
/ P% h* ?9 p% k( t

: I% s) v" N$ _* Y; ~5.4   MDK调试容易崩溃的解决办法

) _2 D) ^/ D; I1 N. u进入到MDK5.2X后,MDK调试的时候很容易崩溃,出现下面这个错误
" K2 l; c1 j% i5 m  z9 {
! ~/ ]8 C# U: W7 @2 b
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
* Y0 l. \$ Z  Z5 j% f% F1 f' T
  h2 |. ?# C, m; v8 R: ~
出现这个错误的话,要注意下面两个问题:' p3 b8 Y  M- o" O* v

" @6 [7 [. x" [$ ?+ z/ H如果出现这种情况的话,将工程放在桌面路径下,工程名不要有中文会好很多。路径深或者有中文,都会造成这种情况。) q" w! a8 i& Q. q7 A
退出调试的时候,如果使用断点了,务必清除所有断点,再退出,否则也会造成这种情况。
( y- y% R) h! q
* A% K; E: f- `' w5.5   MDK程序调试- X; x% P$ B3 ]
JLINK或者STLINK设置完毕后,调试是一样的。
: i7 j  m' D5 T! ?1 G" V; V/ W/ a2 d) G/ o7 [4 t* i2 J% ]
5.5.1      全速运行和单步调试
) G' e, G/ ^" ^. e点击如下按钮可以进入调试状态:6 Y0 \) V9 o% l- R' W3 p, q% k' r, k' V
# Y' o  I0 t! N3 d  V3 r! L% g
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

/ l% f% }3 F8 @5 |. q
! }( ^7 F* T3 B3 U进入调试状态后的效果如下:
3 J. ?% E/ @# L' {3 u! D2 g+ s2 \
9 x, L7 k$ J2 t- p% I) P5 g
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

' u5 N! J6 q6 v3 \" ?& W) P' f" K; a6 M; n7 ~3 w1 k- ^5 O
首先要认识下这7个图标的含义:
) K6 H- w" i& R  k9 o0 W6 N; @8 _
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

  A/ E: @0 n1 N
4 t5 ?! n2 w+ s# y2 E8 `第1个图标是复位调试。2 m2 A1 h! w5 l
第2个图标是全速运行。9 \4 |7 A4 ]. z
第3个图标是进入全速运行状态后,通过这个图标可以停止全速运行。' J3 ?6 B  _: G: ^/ g$ g% o9 i% T
第4个图标是Step(Step one line),单步调试,每次点击运行一行代码,所以只要有子函数就会进入。$ m. v9 r6 }9 o* f% G2 g+ n& s
第5个图标是Step Over(Step over the current line),每次点击以函数为单位运行,不会进入函数内部。
+ J" F9 W; w! n# K, w+ _第6个图标是Step out(Step out of the current line),点击后退出当前运行的函数,执行下一个函数。
  R1 ?* f% `& {- {4 o第7个图标是Run to Cursor Line(Run to the current cursor line),直接运行到用户设置的行,设置方法比较简单,用户仅需在那行使用鼠标左键点击一下,可以看到前面有个箭头
$ g+ b! v& a7 F; l6 ~) m! p- Z* L7 l1 b
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

" @0 }2 g5 a/ v$ G" z5 A7 s7 K4 _7 P' h3 w
然后点击此图标即可,可以看到前面多了一个黄色的小箭头,说明已经运行到此行
' K8 ?# ]) g3 V! O4 _+ _% {
4 M/ F- e5 c/ Y& [/ H
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

1 q5 B* U& c9 `5 Q" P# _& \' ~3 u7 K; }; _* R
前面几个图标的功能,大家多测试几次就熟练了。; \$ e1 I# |& l* n

' x  a  z. g; p$ Q& P3 u1 w, I, T5.5.2      外设寄存器的查看
$ D8 N7 \$ g. l0 o要查看的外设寄存器内容在这个菜单里面:, B* }+ s/ I4 g' k+ w
: a8 @) k. O$ C9 e
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

3 r4 |$ o1 B7 o2 U4 P# H7 z/ }( M( P$ {. M3 z0 @
如果要查看内核外设寄存器,在这里:2 [* G- Z, F- x, ?- d  H! G  f
- p3 y* Y) m: m3 G8 }. ]6 T+ |
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

# Z- t: W" ~+ h8 [
4 H4 U- n0 u  L4 \1 h+ l5.5.3      全局变量的查看
( G' l" d1 D, I, S8 O7 k3 Y" r针对全局变量,MDK专门提供了Watch1和Watch2两个窗口,每个窗口可以添加很多变量。调试过程中,这些窗口里面添加的变量是会更新的。5 e: ]; u1 N) w

& T4 G$ x6 f+ |5 l) L. x% e
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

7 s" h. e% L; s- @) Z2 q, i
) \) ^* O( M% D6 D) u也可以从菜单View ->Watch Windows进行添加。比如下面添加一个简单的全局计数变量。
8 c5 y( O" P: z
* [# b* w3 b& N
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

* J$ Q3 |- g# M, z! t2 z2 j# q5 V7 f0 u+ F
5.5.4      局部变量的查看
" v2 U6 T( }5 U, l针对局部变量,MDK专门提供了一个栈窗口,用于查看函数中各种局部变量,这个不需要用户添加,MDK会自动添加。0 b) U9 ?7 o1 D* d
' D! U/ Q3 q) T+ R7 M4 ]
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
( G5 G% F3 ?  q
  F; y0 i& N! {4 L
也可以从菜单View ->Call Stack Window进行添加。局部变量需要进入到那个函数里面才可以查看,这点要特别注意,因为局部变量是来自栈空间的,进入函数申请占空间,退出函数后,栈空间就会被释放掉。比如main函数里面一个num局部变量:
; q) j" @- t: @  L- H( R$ `' g) C0 I3 Q  U
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
/ s- |' p% t1 {& ]
# }, t* b% x( [( A0 {' w
5.5.5      Flash区或者RAM区的查看

$ V9 x1 c2 E. v- A- W如果要查看Flash区或者RAM区的内容,MDK提供了4个Memory窗口。
- D0 u9 ^4 P- ]7 m
  `, R+ X: P5 w/ B
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
- M/ G# I+ w3 L: a# z) J7 h
- A& w+ ]) p3 K' ~: _
也可以从菜单View ->Memory Windows进行添加。比如要查看0x0800 0000地址开始的内容,直接输入即可,这个地址是STM32H7的Flash首地址:5 \1 {9 \, t! S7 t

& V0 t2 l' J7 Z+ x4 u6 O
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
( D( Z4 M# Y9 `+ U+ @' x+ a3 k
. O# b+ _+ [# P* y% Q" H
5.5.6      断点调试
( E: x  c' J' x$ K! N1 f8 |断点调试比较重要,进入调整状态后,如果大家想让程序在指定的位置停止运行,可以添加断点,通过这个小红点来添加。" k6 u; K0 O; C1 `

8 a6 P/ I2 o8 }$ r/ l- m6 M: I8 S
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

# l  j) _' g, d0 Y( [3 B3 ~5 N+ U
0 z0 j8 f0 _  c5 l比如想在84行添加断点。
: n( h2 m( }+ E" `  D: X6 k7 y1 I9 T- }' s0 l. V; [! B
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
9 t+ i  L/ Z+ e1 [4 N7 p% a  o
3 {4 \" R4 X. G. k
用户仅需在那行使用鼠标左键点击一下,可以看到前面有个箭头:
4 R  b6 G, n0 b* _
1 |  i8 k! }: Z1 h/ K; P
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
1 F& ^8 b6 @8 p5 G+ F* J
! ]* s$ f1 H+ _8 ~3 I4 e% [; g
然后点击那个小红点,可以看到已经添加上:2 P4 _2 Y  W2 g* E

( C* H  e. I9 V
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

  L6 n/ f  u  `- b
# l. M+ g# X+ q  |. @然后点击全速运行,如果程序有执行到这个地方,就会停在这里。可以看到黄色小箭头也显示在左侧了,说明程序执行这个地方了:
$ b$ d* ?' O" v+ [9 F* G% m) A. X5 J2 U2 u" z; f
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
( @/ G: w( V4 s$ M
) v9 x* `' t* f- ]4 |
正常情况下,断点可以加到任何程序代码可以执行到的地方。另外注意,退出调试前,点击这个按钮取消所有断点,防止MDK调试期间崩溃:
  `( U0 X0 X9 r3 y, `- u7 {; p) r
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
4 h7 J( a$ F& o5 l& v0 V/ j

( `5 U5 r# L' K( W9 Z5.5.7      寄存器,全局变量和局部变量的动态更新
8 R/ R1 g5 q* i3 G8 u# A/ e1 L9 VMDK有个周期性更新选项,如果大家要周期性的观察一些寄存器、全局变量的更新、需要把菜单View -> Periodic Window Update选上。7 v/ _5 `$ c/ [
# h( B+ D5 {8 M/ z4 o: y( [( T" J* w
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

. z- K, h1 j( @6 l% C
& [( q) r& z: J* [% x这个周期不能设置,大概0.5s左右更新一次。; Y' {1 t2 X- \$ |3 p( l

9 x  X7 I0 G& N: n4 s0 [' m- }5.6   总结1 E6 H! ?2 L/ r, b1 c) w6 |
对于初学者来说,务必要实际动手操作一遍。特别是调试方法,要熟练掌握,因为以后工程代码调试时,用到的最多。* f# X$ O8 n% q: u7 O
  y- R" h$ j: t, b5 P2 A

  l$ R# C( E. m) T5 R. K! s
# X9 R2 ]' @  s" \, d
收藏 评论0 发布时间:2021-12-19 14:00

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版