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

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

[复制链接]
STMCU小助手 发布时间:2021-12-19 14:00
5.1   初学者重要提示
* @# k* T/ z. J& }" T( n2 S如果使用JLINK调试下载STM32H7,务必使用JLINK V9或V10,之前的版本已经不支持。4 S  b1 H, t6 |/ f7 m
如果使用STLINK调试下载STM32H7,推荐使用最新的电脑端驱动和对应的固件,详情见第2章的2.6小节。6 u- ?$ }0 v1 C
MDK曾发布的STM32F1,F407,F429和F7的所有调试方法的设置细节及其注意事项,同样适用于STM32H7。
$ R1 ^% E( W; x  i. yMDK5调试过程中容易崩溃的问题,请看本章5.4小节,比较重要。, A; l& L( |! ^6 U# ~3 m$ d& E9 n6 b6 n
JLINK无法下载解决思路以及常见问题整理,适用于其它LINK。/ G7 k- J1 y6 z
5.2   使用MDK调试和下载程序设置(JLINK)7 j1 Y% V9 L  L9 [
调试下载STM32H7,务必使用JLINK V9或V10,之前的版本已经不支持,JLINK的驱动安装等相关文件已经在本教程第2章的2.5章节有说明。
# G$ P2 y5 ?. Q/ U- M: J) r9 p& `$ Z' T& b, [. {) i
在上个章节里面,我们已经将Options对话框里面大部分设置选项都做了说明,本章节主要是调试下载的设置。
& o4 B( ]! E8 D% X
4 ~. \9 T! u1 E# h) F) x+ H0 Z9 g5.2.1      开发板和JLINK的接线图6 z% k, t. C2 h8 s
开发板接上JLINK的效果图如下,JLINK端需要插入开发板赠送的JTAG转SWD转接板:
/ ?& ]% G, F$ b% o% M+ u
) s3 A( S& z: g2 \* E* r6 G
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
/ D! ]& a3 Y* ?% X5 W0 Z0 ?$ N. v
& `7 ~) G6 s: [7 r4 i
注意转接板不要插反了:- T1 f, v" z) m# k+ g( X0 x
1 \4 |& F3 ?7 F. \/ c# J) }
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

4 F$ h9 S% i' }9 b9 `
7 {, ]/ H1 m0 f' }1 p7 l. b9 B5.2.2      设置Options里面的Debug选项
8 |. w% Q. f( \- W
Debug选项主要用于调试设置。
6 f$ g  t. \* o4 N$ e: v4 p
0 Y1 i5 q0 ^% q; [" h+ m: B
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

7 g6 @- A2 C. J+ d; K; c5 }
3 O. f4 ]$ q& t6 H7 R# ]& }打开Settings设置选项,设置完毕后别忘了点击确定。
6 s/ m% [/ {, c. t5 w3 v% t' m$ i& k# y) s1 W8 R9 h. _3 B
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

- N* E  B6 g( s4 b$ x! o  e* K6 }- t0 X2 r4 ^  K2 j
5.2.3      设置Options里面的Utilities选项
8 R0 Q) L" J" p) t2 VUtilities选项主要用于程序下载设置。
) Q0 T4 o  A: A# c6 v% |) j9 o3 Y% o3 f: P
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
# B- N# C1 b# ?# W  j) Z0 q2 ]
8 ^, q8 ?1 Y- F" E" q
5.2.4      程序下载
+ T( e& e. j  o2 q" _- n( [6 @4 U0 d) u
前两步设置好之后,JLINK插到电脑端并跟开发板连接好,将板子上电,就可以下载了。点击这里就可以下载了:; J3 j" c. a3 x

' j) \) H) \# T! q' h
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
7 y" A  x- P& F; `8 I3 x3 l
* \  N1 X6 p7 C
下载成功后可以看到开发板上的LED开始闪烁,MDK的也有信息展示:
$ P, M, H* @# L% F, D4 b! i) a# S# e, X- u
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
" W, j) q0 Z1 K+ s) J

4 m" a7 A; c2 f- v5.3   使用MDK调试和下载程序设置(STLINK)

* \; L- \5 r, ]* ~, L# `6 V调试下载STM32H7,请将STLINK固件升级到最新版,关于固件升级和驱动安装等相关文件已经在本教程第2章的2.6章节有说明。6 [* z5 p# m3 M! Z5 a  V) }

/ q+ S/ @" `5 m1 m; V  ^在上个章节里面,我们已经将Options对话框里面大部分设置选项都做了说明,本章节主要是调试下载的设置。
9 e# o( X7 G% E6 F. G0 b7 ?
2 T- o. G8 T( H0 v5 {$ i  G  Y5.3.1      开发板和STLINK的接线图
* r) r3 H7 b6 R2 n0 S
开发板接上STLINK的效果图如下:+ X; Q% r! X* G
9 I9 K% b5 y& D( c
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
, ~3 C# w. ^+ h

" K, w# L" Z0 j6 _* x如果是下面这种STLINK,需要接上转接板:
0 f# C8 @/ _- ]2 C7 Q7 R( p, y, _1 I" A
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

4 H; H( w" q, g8 ]* g8 u0 f. \$ d" k

- s5 c/ m! \; G2 h- _& M) A4 o$ P
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
% s) N2 V: X3 J; m6 N; U0 S
! \! L# {: L9 j; P

7 m' f( B6 Z2 \3 y; |! X5.3.2      设置Options里面的Debug选项. i; n& j1 a, E5 B  m3 v
Debug选项主要用于调试设置:
: k& p/ x. M" T' F# ~- v
( x3 |8 {4 n$ A' f4 Y
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
) ?# \" E; L* W5 ?/ S

( A, X: _" I* j! d5 {打开Settings设置选项,设置完毕后别忘了点击确定。7 i# ?7 }+ a! ~. Y. O
' W8 Q$ y) ~' j: M1 F' P
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
1 u  q! {8 n8 B+ p  V5 ~5 S( m
5 x5 I) R9 ?1 x! C" c; A" t! q4 f
5.3.3      设置Options里面的Utilities选项$ u+ K6 {' x7 o) ]0 H9 H
Utilities选项主要用于程序下载设置。
8 B# Y. T: g+ S/ {( D* q
& ~5 i/ k/ x" ~6 x9 B6 C" X6 P+ v
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
* V# S* z2 q, n! ~

0 e7 m; p2 b2 s5 p! M! N5.3.4      程序下载
2 @- f% a7 [" h( R2 n9 {5 q前两步设置好之后,JLINK插到电脑端并跟开发板连接好,将板子上电就可以下载了。点击这里即可:' e8 Y0 }: F' Y" B2 q

* W( b  N' a/ \% `
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

$ C% I0 r0 w* @2 L4 w1 Y6 w* o- A9 m/ e6 R2 ^- B
下载成功后可以看到开发板上的LED开始闪烁,MDK的也有信息展示:9 V* w8 }" Y* P+ }+ W4 X! W

2 Y$ m+ ], ^3 r4 B. Z. C+ `
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

0 q2 h" X" s6 l: C5 y8 g
1 ^1 y* c3 o; t& N+ x5.4   MDK调试容易崩溃的解决办法

5 i6 I, s4 z# D$ e进入到MDK5.2X后,MDK调试的时候很容易崩溃,出现下面这个错误9 H+ i$ Y" {3 d: m7 ]  I' ]

. Z* j% c6 v' s2 k6 R
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
2 }# R' E. P" G3 X) y

# [) m4 Z( N0 F0 ]& }出现这个错误的话,要注意下面两个问题:
- [- u5 w" {- L: u4 w/ [' b) r( P0 m2 |9 {
如果出现这种情况的话,将工程放在桌面路径下,工程名不要有中文会好很多。路径深或者有中文,都会造成这种情况。. ?4 e% ~, `% z, x
退出调试的时候,如果使用断点了,务必清除所有断点,再退出,否则也会造成这种情况。8 B& p$ }/ ]' z) y

# l" {, _! F3 C: _5 a5.5   MDK程序调试1 |7 u: I6 ]5 u+ j
JLINK或者STLINK设置完毕后,调试是一样的。- x& ]7 K# F3 x; F

" W9 [8 S( n, Q8 }$ q; [0 s% W  X5.5.1      全速运行和单步调试
: f" b- Q9 }& j& ?9 Z点击如下按钮可以进入调试状态:
9 \' M$ }, p, e+ F) s4 q
% ^2 M9 q1 Q$ x+ l7 |
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
+ u% s. j; G& H$ Y
2 n9 c' a2 w1 B  N- ^; j# m2 J
进入调试状态后的效果如下:
" k$ e) F% k# c; P+ F6 }0 v  K0 }# J" a9 o1 @
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
' [2 ^& a, p3 S- O8 o+ `; m/ F& z
0 B4 O: Y. d5 J4 S3 R: h& M
首先要认识下这7个图标的含义:
7 h, D, m( H- C
2 i' s" Q/ q' m1 _7 J
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

& E/ `  Y, o& D% W3 n, {) y. W3 L7 R& ^8 A( B* g
第1个图标是复位调试。
1 Q; q, w  }8 X/ r第2个图标是全速运行。
6 e2 C% T" v- }. e9 G2 }/ X3 M第3个图标是进入全速运行状态后,通过这个图标可以停止全速运行。
) o; d& J$ t* u! |; X第4个图标是Step(Step one line),单步调试,每次点击运行一行代码,所以只要有子函数就会进入。( {8 A8 [5 ^# s$ D
第5个图标是Step Over(Step over the current line),每次点击以函数为单位运行,不会进入函数内部。
5 I" w' f$ ~3 s第6个图标是Step out(Step out of the current line),点击后退出当前运行的函数,执行下一个函数。
7 w" l' m' w  f, m% r第7个图标是Run to Cursor Line(Run to the current cursor line),直接运行到用户设置的行,设置方法比较简单,用户仅需在那行使用鼠标左键点击一下,可以看到前面有个箭头
( U7 S3 u  l1 y/ ]! M7 c( o6 q6 I% `
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
& s6 y6 p+ j1 U* n
7 [  h  x3 p! n0 o* t  l
然后点击此图标即可,可以看到前面多了一个黄色的小箭头,说明已经运行到此行5 w! }+ O4 E5 C- r1 P# h# t# C
+ J& C+ h* n7 {8 R: y
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

7 v7 ~* s6 H3 M$ ^3 L" T
6 g# y$ j6 _4 w  u8 C8 O前面几个图标的功能,大家多测试几次就熟练了。7 ?5 r# i8 e! I1 q

: v$ k: k- z; Q0 t' T5.5.2      外设寄存器的查看
. f7 p6 z. d- f" e* D$ z要查看的外设寄存器内容在这个菜单里面:
' c4 f" Q) K6 L, Q' Y. Z; b) l0 I( ~* q3 ]
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
5 |. t8 j3 {+ W
5 k9 E- m  K7 u4 M/ ~, [! Q
如果要查看内核外设寄存器,在这里:
% f/ h, F! _, j7 H: r' e0 H" Y4 n1 h$ V; g+ A5 I
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

: S( }7 Y, X# S6 z8 n" @! v0 ]
5 f# F, v9 E+ |: P3 P+ a5.5.3      全局变量的查看, \! W$ }# b% L1 {. Z+ i! H
针对全局变量,MDK专门提供了Watch1和Watch2两个窗口,每个窗口可以添加很多变量。调试过程中,这些窗口里面添加的变量是会更新的。
1 Z+ y* f& }+ d! i. B  z; x
3 R* p- ?8 _, T& W
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

- g9 ^$ K6 v9 ~" @" x" V8 M' h
4 A5 j4 X& s  ?3 c' }也可以从菜单View ->Watch Windows进行添加。比如下面添加一个简单的全局计数变量。
: g$ s7 a7 l( |, O1 j
6 [# {' d2 c5 ^) ^; X6 U$ f4 r
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
' u8 t! ~7 h$ Q& f

' p" m  H  v' X" k6 h; k) K5.5.4      局部变量的查看
6 U- @; x8 _7 |" g% m$ g0 n3 i, G针对局部变量,MDK专门提供了一个栈窗口,用于查看函数中各种局部变量,这个不需要用户添加,MDK会自动添加。
! }, k5 @, F9 c0 S; X
; S- U$ _1 h* S0 b5 }5 m
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

# _" w. j6 s" n/ w- j
. T4 D5 y9 q0 K4 K也可以从菜单View ->Call Stack Window进行添加。局部变量需要进入到那个函数里面才可以查看,这点要特别注意,因为局部变量是来自栈空间的,进入函数申请占空间,退出函数后,栈空间就会被释放掉。比如main函数里面一个num局部变量:
) G8 l/ M9 J, S1 B8 O8 G
9 b2 _* D7 W3 ]' N  Z/ x8 O6 h
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

6 ?" |4 @6 q) O4 T& Z
& z. |$ j. b) B% V5.5.5      Flash区或者RAM区的查看

% [' {1 F! v0 c3 y如果要查看Flash区或者RAM区的内容,MDK提供了4个Memory窗口。6 J' [3 k, H& M) y

) S* t$ |8 n- c/ e0 O& q( ?7 T
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
8 \* U0 U  i1 t: Z" ]* t
6 t, V  S2 D4 g, F$ Q
也可以从菜单View ->Memory Windows进行添加。比如要查看0x0800 0000地址开始的内容,直接输入即可,这个地址是STM32H7的Flash首地址:. a5 S1 H* x6 n! Y; x( a& V

% V# Y! B. _2 ^8 H& h
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
5 w2 _1 E  u7 |5 Q" v* Q

' _4 u* F2 S, O1 C+ ?8 ^5.5.6      断点调试
7 k: g; U1 z  |; M- S& ^4 l4 ]断点调试比较重要,进入调整状态后,如果大家想让程序在指定的位置停止运行,可以添加断点,通过这个小红点来添加。
: w8 a  u3 r; _0 \- @4 }  {) z
9 ]" z7 e( z# V
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

) A4 R% J4 s( s# _0 g3 D% y( T* f  W/ l& _. n$ V
比如想在84行添加断点。
+ }1 J3 I* Q  X6 a) i* B8 D0 C+ I2 `
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
* z( _" y7 _! ?! Z) M6 S" U! C* E; d

0 q0 u8 Q1 H& S( D+ C- L用户仅需在那行使用鼠标左键点击一下,可以看到前面有个箭头:
4 S- {1 s! Z7 ]* C, w# @: }+ i
. X. z. ]" g* n( r
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

, ?+ t. ?+ G- P2 ]
- c0 z, n" F2 ]0 y; [" ?( d1 I然后点击那个小红点,可以看到已经添加上:0 A+ C& w4 @) F" Q

; \3 @' v) M7 {- G
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
4 f* v! f; _9 ?3 ?1 I/ X

/ v) @' n& f; ~' o然后点击全速运行,如果程序有执行到这个地方,就会停在这里。可以看到黄色小箭头也显示在左侧了,说明程序执行这个地方了:
( h, g, [. M9 @% r9 `; q1 ~* O- J3 e+ H$ C9 r: s+ F6 \9 w
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
/ _, J) ^) q5 X& c

/ F* k1 _4 _8 D9 q0 ~正常情况下,断点可以加到任何程序代码可以执行到的地方。另外注意,退出调试前,点击这个按钮取消所有断点,防止MDK调试期间崩溃:
/ d! i2 ?  Z& ]  m' o; K. d1 [6 I$ k( ]+ a* W! C- r
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

4 o  L; Y! k% w9 b+ U: o) |1 s) J" H
5.5.7      寄存器,全局变量和局部变量的动态更新  u! M: P% x% o9 q/ Q* e2 B
MDK有个周期性更新选项,如果大家要周期性的观察一些寄存器、全局变量的更新、需要把菜单View -> Periodic Window Update选上。  T5 f9 a& A. G+ G7 z" d) G

1 g3 @6 P/ k) `. O# u
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
& @; Z2 [; k( D9 w6 @9 _

9 a) W6 A) U0 r4 ~这个周期不能设置,大概0.5s左右更新一次。
( \# M6 P, h7 u* e  m2 i6 p
( V: B! a8 _& I+ L6 Z3 A; a5.6   总结
; `/ G7 v" \! s$ B  o1 w$ v对于初学者来说,务必要实际动手操作一遍。特别是调试方法,要熟练掌握,因为以后工程代码调试时,用到的最多。
1 `( G9 T- e3 t( @
( [' x0 c8 o% Y& _, h  N4 O8 l4 e3 f+ M( k, y$ {
$ m* F: B2 _. ^# u$ v; x6 }
收藏 评论0 发布时间:2021-12-19 14:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版