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

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

[复制链接]
STMCU小助手 发布时间:2021-12-19 14:00
5.1   初学者重要提示
! g0 i3 c2 X; r5 Z如果使用JLINK调试下载STM32H7,务必使用JLINK V9或V10,之前的版本已经不支持。% b& i! W6 I: M# W4 g
如果使用STLINK调试下载STM32H7,推荐使用最新的电脑端驱动和对应的固件,详情见第2章的2.6小节。
$ E# q8 D# j! c* D0 }& dMDK曾发布的STM32F1,F407,F429和F7的所有调试方法的设置细节及其注意事项,同样适用于STM32H7。- u$ a7 ?9 X6 j) v
MDK5调试过程中容易崩溃的问题,请看本章5.4小节,比较重要。6 `6 J6 O& x8 X6 \
JLINK无法下载解决思路以及常见问题整理,适用于其它LINK。
* u0 k) v' r. ^4 F; T7 M: |  |5.2   使用MDK调试和下载程序设置(JLINK); z( L" D+ m2 S
调试下载STM32H7,务必使用JLINK V9或V10,之前的版本已经不支持,JLINK的驱动安装等相关文件已经在本教程第2章的2.5章节有说明。
2 a. y- M: b: b
" P* _. a$ p; K; X在上个章节里面,我们已经将Options对话框里面大部分设置选项都做了说明,本章节主要是调试下载的设置。
5 x' ~; k0 _+ F* j4 M; [" k, P* q! W/ J9 g, O6 J* ~+ ?9 }  k
5.2.1      开发板和JLINK的接线图9 L  b1 p9 s8 R9 l" {! S
开发板接上JLINK的效果图如下,JLINK端需要插入开发板赠送的JTAG转SWD转接板:
! I: ^4 W' s. L" ?; o/ |! A
& m1 P8 M0 r0 D$ j0 E, A8 ]
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

+ M  Q" x' d. `) W! _$ z: I/ x9 e; g0 p' M
注意转接板不要插反了:
( p" _2 ]( l& z/ z$ ]. X% z7 u4 i; @( ]% e
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

% Z( `1 u; E  C$ }# f5 r- ?- k1 @6 i  ~" B$ v1 _1 p- N8 M/ Q
5.2.2      设置Options里面的Debug选项
( R* d6 Q9 ]3 M- T5 d+ R# Q
Debug选项主要用于调试设置。
& S+ x$ o7 _, ?& R$ x( T
7 p6 O- r5 Q+ w9 o% I
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

7 Q9 a" ?, `; E- t! Q/ B2 i
/ V9 y) g( u3 H打开Settings设置选项,设置完毕后别忘了点击确定。# r4 l' m+ Y8 p1 y

( N: x- L& b4 f+ M/ ?9 [3 S0 _0 w: t
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

( h5 m* [8 \% I3 e1 N
2 ]( ?0 E4 A2 v$ K9 G5.2.3      设置Options里面的Utilities选项
! s' J; z0 k6 i  mUtilities选项主要用于程序下载设置。
* u9 Y! p& o) n% Q0 R
& i5 a6 a% \, l  g1 ]9 V: j% C) t
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

7 D* _2 @: G  X* w, z2 e9 j  P; y/ s) D4 ?& x0 A! q
5.2.4      程序下载
" x6 W8 q, ]3 |3 }. b% J
前两步设置好之后,JLINK插到电脑端并跟开发板连接好,将板子上电,就可以下载了。点击这里就可以下载了:
& n1 x6 U8 y4 p: {5 Y8 E8 @( K4 s+ n9 G, {7 y2 |
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
' z! O* J8 W1 n: b- T6 H* G
1 K3 b( ]/ e" J- X" y
下载成功后可以看到开发板上的LED开始闪烁,MDK的也有信息展示:
' N- z5 O' C' {( o5 A9 F0 _$ l6 E, A& H! D8 o2 M: B4 F% y/ a
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

% J+ a) q- J# S! X7 C% P
7 o4 _& b& k, \( q# t5.3   使用MDK调试和下载程序设置(STLINK)

. i( k  [$ F( D) A调试下载STM32H7,请将STLINK固件升级到最新版,关于固件升级和驱动安装等相关文件已经在本教程第2章的2.6章节有说明。7 J  _) l& r# D) z8 S
- r$ m* {3 w& ?, b! r* d
在上个章节里面,我们已经将Options对话框里面大部分设置选项都做了说明,本章节主要是调试下载的设置。) T9 Z- }" C7 X/ C+ E
% }* E; L4 N8 Y3 g+ k" B- c5 Y
5.3.1      开发板和STLINK的接线图
$ U, i' C8 f0 o9 |! b$ {% u
开发板接上STLINK的效果图如下:3 ]/ c5 e7 h/ e9 ]5 S! E% U

0 f* B) V; x/ l) ]* e2 l3 }3 J6 l
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

/ w+ k. u4 P& ]3 G: E6 W' i/ r8 `% H. [' {
如果是下面这种STLINK,需要接上转接板:
& \4 }# M# U4 k
% m( Z: i5 L' X0 S% b5 f
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
8 P/ Y0 E) A( A. ?! I
$ O( M+ B5 F0 D9 a2 c, s" f3 }
! `0 @& O3 K5 D0 {
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
: b+ m# e6 |2 Y+ |2 w' b! ^- s

; a8 |" k2 q( j( G7 @4 o/ I( ]2 u) p- x! A" ]! G
5.3.2      设置Options里面的Debug选项
1 @  |/ o8 S' l9 R) }6 c! GDebug选项主要用于调试设置:& b4 ~3 ~! a; X& v
. ]0 F2 S/ }% a/ h; U1 v
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

8 X: G: L2 c; u% p0 @
1 j$ H3 X) }+ @! F打开Settings设置选项,设置完毕后别忘了点击确定。/ }- a$ K" S4 k1 u

9 s0 ~# a: P3 Z% a" K* r7 q
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
6 a( E  }' q: J4 U$ J& E
: E9 m, o9 A( M5 w) n- j- f& g
5.3.3      设置Options里面的Utilities选项1 k2 m' e" o+ s  B; W8 w
Utilities选项主要用于程序下载设置。+ W, l& X& J2 Z3 l

2 D( N8 E4 D: x% Y: f  l2 y6 f
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

; u% _# I% d- j& D, {4 v* L
, W: Y  e; j* X. I3 Q: V5.3.4      程序下载- s: Q  K1 G& K) e: o% s
前两步设置好之后,JLINK插到电脑端并跟开发板连接好,将板子上电就可以下载了。点击这里即可:
$ v! D( v  a% X1 q8 C* }  ^1 j9 v  a8 k. T) ^6 G
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

# m# Q0 Q  m5 B' m6 K/ \
# ], X  Y: O9 l% ?# A, ~下载成功后可以看到开发板上的LED开始闪烁,MDK的也有信息展示:
; x2 G2 M5 @! x* o% U2 L. o
, h5 ]0 |' a# b* I: i1 w
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
# s1 Z% R& P& |6 v: e, u0 _  J% v

& A$ H0 Y4 c; _8 n7 z" p5.4   MDK调试容易崩溃的解决办法

; z! P" @, L, s" j' a+ o5 L- Q进入到MDK5.2X后,MDK调试的时候很容易崩溃,出现下面这个错误  z- k+ y0 \( n6 [$ u/ t% B- S

6 l: Y, |+ L" p( I, h1 D) n4 c9 ~* H
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
0 Q. u; T, d" q7 l
3 g4 s" {7 N& e7 i. D
出现这个错误的话,要注意下面两个问题:
6 `- }8 o- X& c" U3 c' J4 a! P  x' h( H. y" @3 u& L
如果出现这种情况的话,将工程放在桌面路径下,工程名不要有中文会好很多。路径深或者有中文,都会造成这种情况。- o) _1 b; m  d" T' D- P1 A
退出调试的时候,如果使用断点了,务必清除所有断点,再退出,否则也会造成这种情况。
" r0 B( c' K2 W1 i3 a/ t7 y' x8 ^/ |
5.5   MDK程序调试
1 m: `+ E5 a: HJLINK或者STLINK设置完毕后,调试是一样的。! C; M. X- |  I4 V' w  Q

- H4 H2 G, k8 F3 G* O5.5.1      全速运行和单步调试  d# k, B/ z0 ~8 R9 W0 o( v1 H
点击如下按钮可以进入调试状态:- _" S9 T6 f; ^
. c1 @; F" j% H; X( N. ~2 A
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

- S  ]8 t  `$ z8 ]+ l
: w- ^! {' E. C进入调试状态后的效果如下:+ f& N- n* ?9 A) J+ {7 ?

+ Z- w# @  S) n
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
3 [: h7 u# M# Q' {

: t' t8 o* E. W5 z首先要认识下这7个图标的含义:
( s" a2 C2 L1 S- x( }! m1 m& j& u- P( |
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

' w* ]7 W# ?+ t$ u: c. {
% i: W6 Z' J- Z- m: v第1个图标是复位调试。
& w5 \1 ~! A( D; H* D第2个图标是全速运行。" t! H; m- R8 y) M! d( T. H8 Q
第3个图标是进入全速运行状态后,通过这个图标可以停止全速运行。
; G( X, S: j: O5 o' [4 H/ C% J第4个图标是Step(Step one line),单步调试,每次点击运行一行代码,所以只要有子函数就会进入。2 C/ [1 I6 b8 `* F( q
第5个图标是Step Over(Step over the current line),每次点击以函数为单位运行,不会进入函数内部。
1 @( r3 h+ }# W% v6 |第6个图标是Step out(Step out of the current line),点击后退出当前运行的函数,执行下一个函数。7 f! b5 g, i1 A/ F6 A
第7个图标是Run to Cursor Line(Run to the current cursor line),直接运行到用户设置的行,设置方法比较简单,用户仅需在那行使用鼠标左键点击一下,可以看到前面有个箭头
- A' B% h# M- W
3 a9 ]& r9 U2 k/ P$ I
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
1 v6 D6 W3 h; i. p, m8 k8 C. R
* ^$ n6 g2 p2 q% o+ [
然后点击此图标即可,可以看到前面多了一个黄色的小箭头,说明已经运行到此行  p/ q: L0 C, I& K

9 L+ P( g" _4 s* p* _" s
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

6 Q  ~5 U/ D) U: V& W; W/ b% D' c0 b/ x+ q* Y
前面几个图标的功能,大家多测试几次就熟练了。- J" Q- g- n2 X& ]
7 e4 ~2 t8 q0 M
5.5.2      外设寄存器的查看7 A0 J3 Z% {" X3 C: @7 _% |
要查看的外设寄存器内容在这个菜单里面:4 ^+ F3 g4 Y( J1 C" p" E

: A/ ~3 E6 _4 b
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
! u; N9 }/ ~! e/ q# K6 n& N4 i; a& f
! j# @" u6 r6 p7 e: F
如果要查看内核外设寄存器,在这里:
0 F; J  k0 R8 K: O: D4 y4 d* [) S+ _2 [. s+ R' W
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

& `; a2 l* ]  H, i: u5 f
. E* g, d; ^3 b% V+ U9 `0 k- E5.5.3      全局变量的查看6 ]5 u* B/ O! y2 y1 |# l3 r+ a
针对全局变量,MDK专门提供了Watch1和Watch2两个窗口,每个窗口可以添加很多变量。调试过程中,这些窗口里面添加的变量是会更新的。
% Q7 A8 h9 p5 f; P  q" A' C2 E* z0 ^+ M* D
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

* b: ?4 B3 h6 h0 b8 Z
3 B, j# |2 q6 Z+ E也可以从菜单View ->Watch Windows进行添加。比如下面添加一个简单的全局计数变量。
  B  ?6 j3 ^% n/ K6 u, C/ M8 @, X' U7 v& u9 p5 f
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
* V4 D2 m( A. Y+ M
0 n# S; l2 n- Q
5.5.4      局部变量的查看
% b& g3 x$ h6 o7 n. g2 w# n- f针对局部变量,MDK专门提供了一个栈窗口,用于查看函数中各种局部变量,这个不需要用户添加,MDK会自动添加。9 W4 Y4 h/ e, |* P5 N7 n+ ]& V

5 o1 w5 c" b7 @: `. \) C; f1 s
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

( b9 Z9 [5 G6 o) Z& y; L9 A: N6 s- Z6 V5 l# ~6 e3 e
也可以从菜单View ->Call Stack Window进行添加。局部变量需要进入到那个函数里面才可以查看,这点要特别注意,因为局部变量是来自栈空间的,进入函数申请占空间,退出函数后,栈空间就会被释放掉。比如main函数里面一个num局部变量:
9 b$ h' @$ p5 P* W$ ]
6 X0 e2 h& U* [7 r
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
* W4 L& i! N0 C+ v2 ?
7 U# y+ Y' N# Q6 |
5.5.5      Flash区或者RAM区的查看
, S, e' e: s3 y- C; u
如果要查看Flash区或者RAM区的内容,MDK提供了4个Memory窗口。
3 I1 _* Z% C% T6 p. n( }; }
; e, F; z2 ~+ \8 w
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
  L' A1 d5 A! b' C" H) s7 P, l

* V; Z6 E$ w! ~+ a6 J& v( r也可以从菜单View ->Memory Windows进行添加。比如要查看0x0800 0000地址开始的内容,直接输入即可,这个地址是STM32H7的Flash首地址:
* ], |$ _& I' S% a- l) k
& Y7 x6 k9 S: z9 [/ L
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
; q3 k; a4 h8 R- T. Y
# g0 z% ~9 R, e( ^9 B# j2 s
5.5.6      断点调试3 X' X$ A& J" i* x) k
断点调试比较重要,进入调整状态后,如果大家想让程序在指定的位置停止运行,可以添加断点,通过这个小红点来添加。8 b  @3 a% t7 a: G

& t3 f+ q% O, O* q
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

+ y# @6 M) _2 u
$ V& d2 p* Y* |" [比如想在84行添加断点。1 w1 z. M1 m8 o5 X' H* _& Y
  t2 C1 t+ b( E6 c/ g
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
" t" p. P5 ^' {  e! _/ Z9 z
( |0 a! j$ _# A8 {7 z9 D
用户仅需在那行使用鼠标左键点击一下,可以看到前面有个箭头:
8 q# G. y" i" w% z) i  F7 L/ a0 f+ Y3 J
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
* r- n) Y$ V! `, s2 f' J4 Z! T  L

. ^4 {& |0 k+ X2 N1 h& a/ p然后点击那个小红点,可以看到已经添加上:
7 H5 ^' k, X1 W4 ~  Q' L' u5 I5 s1 J9 x- G& _. x: \' b6 [
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
' O1 P+ [4 O8 v

0 R- e4 d& m4 ~2 E5 X! X2 H然后点击全速运行,如果程序有执行到这个地方,就会停在这里。可以看到黄色小箭头也显示在左侧了,说明程序执行这个地方了:
% k7 p: z) m6 Z* z
0 |+ J7 g$ w( A+ e1 G
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
: `. ]/ p0 L0 T2 Q7 v/ K
6 m' {# ]2 M7 G0 ~8 V* O
正常情况下,断点可以加到任何程序代码可以执行到的地方。另外注意,退出调试前,点击这个按钮取消所有断点,防止MDK调试期间崩溃:* |2 g; s* Q5 i/ D/ S
1 ^7 P* N/ G1 _
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
# W0 J. O3 Y! m) {. z# P
/ d2 k) }9 Z% H8 q. ], H- L
5.5.7      寄存器,全局变量和局部变量的动态更新
& o# \& m& p4 O0 c" aMDK有个周期性更新选项,如果大家要周期性的观察一些寄存器、全局变量的更新、需要把菜单View -> Periodic Window Update选上。2 u  {% b2 b1 ?& s; U2 y

0 M& x# Y4 P4 e7 I0 D  w
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
4 y# g, g7 V$ X+ ~* `7 q
6 a7 w4 v! m( E4 w
这个周期不能设置,大概0.5s左右更新一次。
8 O- [: F' a( K1 I  H+ V1 b
; e: g5 a% t+ \+ E/ a, Y- ?5.6   总结
# K- F1 q, i/ |- p& H- m对于初学者来说,务必要实际动手操作一遍。特别是调试方法,要熟练掌握,因为以后工程代码调试时,用到的最多。
. h  s2 m8 _, ^/ @
7 Z* I9 h) b1 d4 \
& a/ p5 g5 t# H) l
4 T8 e7 Z3 ?- \  B
赞 收藏 评论0 发布时间:2021-12-19 14:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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