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

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

[复制链接]
STMCU小助手 发布时间:2021-12-19 14:00
5.1   初学者重要提示
" [0 v+ r! `' d# q  X如果使用JLINK调试下载STM32H7,务必使用JLINK V9或V10,之前的版本已经不支持。
6 ?2 E" c8 Y) [1 F  F  F如果使用STLINK调试下载STM32H7,推荐使用最新的电脑端驱动和对应的固件,详情见第2章的2.6小节。3 }5 c7 K4 Y% {. O9 V
MDK曾发布的STM32F1,F407,F429和F7的所有调试方法的设置细节及其注意事项,同样适用于STM32H7。
; T1 P' |) G4 A' FMDK5调试过程中容易崩溃的问题,请看本章5.4小节,比较重要。
8 [+ @( b% ^# E' ^1 VJLINK无法下载解决思路以及常见问题整理,适用于其它LINK。
0 t# E7 y. S( `2 L: p/ l5.2   使用MDK调试和下载程序设置(JLINK)
" }6 n6 {& R* B9 `2 d. h调试下载STM32H7,务必使用JLINK V9或V10,之前的版本已经不支持,JLINK的驱动安装等相关文件已经在本教程第2章的2.5章节有说明。
) d) _. {. P* ?& o  W
0 E; ?- F1 S% U" _1 }( k* |- c在上个章节里面,我们已经将Options对话框里面大部分设置选项都做了说明,本章节主要是调试下载的设置。/ D" h" }' W3 k- ]1 {
7 t) U" M% J" E
5.2.1      开发板和JLINK的接线图
5 H' Y; g& y" M7 S" M开发板接上JLINK的效果图如下,JLINK端需要插入开发板赠送的JTAG转SWD转接板:- h( A& v& g3 V
9 b4 A3 l4 r& P' e7 Z2 V
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

0 }0 A6 K6 P: a4 E% B! ^1 k: o( U4 A7 s. w2 R
注意转接板不要插反了:
1 o% S$ S4 O. ^/ E9 h! `4 M0 P9 O
/ o* c8 h% X2 z5 m+ t- E" t
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

4 C+ I, i3 {: }+ c
' u3 L0 e+ _% `) n  i5.2.2      设置Options里面的Debug选项
1 I0 o6 c3 A+ C3 i) G  J2 d
Debug选项主要用于调试设置。" m4 B# J1 u$ E' b) [- f8 G
' w9 c- g/ p  l. }+ B
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
, m9 E* N8 s% x3 Z2 I0 E7 t

: H+ C* ?+ B2 K1 f% ]打开Settings设置选项,设置完毕后别忘了点击确定。5 d$ z9 T, W- Y6 V& }
0 g. {8 l, R0 G
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
* K  K1 Q! l5 E9 N
+ p& [  f1 D5 ?# @- ?5 X: G" W; B
5.2.3      设置Options里面的Utilities选项
( `9 R- u; z3 I3 v: _0 TUtilities选项主要用于程序下载设置。& \% A. B( `: v6 Q" f5 k/ M9 e

$ x3 f9 I0 r9 _
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

+ Y1 u+ ^! |9 f5 ~# y0 T; C2 S5 z! j& S% K( `& c- w
5.2.4      程序下载

; }0 e3 x; I" C, U. R7 ?前两步设置好之后,JLINK插到电脑端并跟开发板连接好,将板子上电,就可以下载了。点击这里就可以下载了:
+ `: p& T- `+ f$ J: v! n: A9 h: Z9 F/ Z/ ?$ r8 |
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
. v% O* e. N; a# @# p

% K+ r+ N- B' `! o& m. Z3 `0 h* ]! M下载成功后可以看到开发板上的LED开始闪烁,MDK的也有信息展示:
" V# W6 j) h6 z; H
' I" S+ ^4 x. n3 d, l4 Y( Y
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

6 B9 Y& T5 {; o3 {: g( g: d+ _3 `; t& o* f( R- c1 Q' Y! Q9 D& Y
5.3   使用MDK调试和下载程序设置(STLINK)
5 O4 G4 }2 E$ P4 d& I( J8 c$ Z6 O
调试下载STM32H7,请将STLINK固件升级到最新版,关于固件升级和驱动安装等相关文件已经在本教程第2章的2.6章节有说明。
$ P9 t$ ]9 w0 Q9 V& [$ }
3 F2 M& n- ]6 }/ m5 e# F+ {在上个章节里面,我们已经将Options对话框里面大部分设置选项都做了说明,本章节主要是调试下载的设置。
# X9 e3 {( ^* @& t6 [6 `9 U6 J4 @! r
5.3.1      开发板和STLINK的接线图

6 R: `4 v: X3 N7 g! ~8 @7 x开发板接上STLINK的效果图如下:- Y: v: z1 F8 E2 |, N) J3 t8 m

3 i4 j5 S. e7 B
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

& x; @9 ]; E- m
1 C9 t" V  A% j2 s如果是下面这种STLINK,需要接上转接板:
* A' p( K$ G% f) F2 [. P, K7 _! {
. E' h5 I0 Q* [$ ~4 b- T# }
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

2 Z5 y" z+ ?% m6 ?
: W& N# H" i3 j) Z5 M
* H- H/ W8 ~2 W
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

* `' @9 Y9 k' s; K
/ P# n5 `  p7 J6 `! V% o; X" o; {) T; \$ F1 A# _* r! J& Y
5.3.2      设置Options里面的Debug选项# Y4 Y- E; `4 u
Debug选项主要用于调试设置:( O8 F* V/ \/ }$ ^9 Y' e; m* r

) [- ^: [( O6 t$ M9 `
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

8 u3 q. {9 \. p# ?' f/ R1 r1 n
7 Y4 H2 f) @. q# k打开Settings设置选项,设置完毕后别忘了点击确定。
% E6 P6 s8 Q: G' p( _# T; l
+ _% {; z) [) z) Z" M
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

* }; f: L6 }* F/ W  x9 t) H$ t1 n  Y  d0 a8 p( \1 ^; b% ]
5.3.3      设置Options里面的Utilities选项+ r; h3 P# A  C, k! y' a  a0 ]
Utilities选项主要用于程序下载设置。6 ]7 F* U, c1 y
1 W% c2 ?2 N7 l4 X! C4 b7 v
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
* q2 f: ~! J  q; C' N- @
! O8 c# K& u% Y. X3 b
5.3.4      程序下载  D& _% d. r1 }$ V  g/ @0 `# w8 y% S
前两步设置好之后,JLINK插到电脑端并跟开发板连接好,将板子上电就可以下载了。点击这里即可:
3 w5 p" X9 a6 ?1 G$ h/ d# {( u1 p/ @: c1 |5 D' [
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
2 j1 A9 T9 [6 Q$ j  Z+ z% l' ]# m
5 }! K- H# c' n. q
下载成功后可以看到开发板上的LED开始闪烁,MDK的也有信息展示:
% r  x! }4 `( V: l& y# z
- [% U6 `4 ~+ r3 K5 I1 i
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
# a" D* m- E, V* S( J: _9 u

7 D/ y" o* c# [9 N5.4   MDK调试容易崩溃的解决办法

( O9 v3 i* `- c+ H进入到MDK5.2X后,MDK调试的时候很容易崩溃,出现下面这个错误
$ |  j1 ^, I- Y' G9 R3 {0 a# w& f/ S: d! u/ j
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
! {# c, t; U! l. J

6 d4 G) u, b3 l1 v出现这个错误的话,要注意下面两个问题:
4 ^2 |* n4 _- a6 u, Y7 C' h
: f: g* t& e; N  w  a: u6 X如果出现这种情况的话,将工程放在桌面路径下,工程名不要有中文会好很多。路径深或者有中文,都会造成这种情况。
1 X; x* q" G/ F* N3 t6 W  m5 E7 |6 s退出调试的时候,如果使用断点了,务必清除所有断点,再退出,否则也会造成这种情况。% J! ~3 d. p; H/ r5 `) N6 I) N

/ C* a6 q1 k6 c  v/ o+ Y8 q: y5.5   MDK程序调试
1 b- k$ {3 H( Z* H! MJLINK或者STLINK设置完毕后,调试是一样的。' }) i1 @3 [8 `: l1 m
+ g5 g' F4 e4 z. z5 \4 i$ L
5.5.1      全速运行和单步调试3 Y  `) s1 j$ P: a/ y
点击如下按钮可以进入调试状态:
, H/ T2 z8 [: [7 i$ e
  \+ W& `/ O1 N
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
4 h6 [/ c5 S7 G2 q% E* m+ O, z

8 u; f$ e( y$ d3 K进入调试状态后的效果如下:
/ Q. ]6 Q' j0 V. Q! \, W, \0 m0 X, i# d
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

& y9 q$ L& o& k1 A# l& Q
; N% j: Q, D% D' F6 q' B  s6 X首先要认识下这7个图标的含义:$ b8 H0 F$ m# C0 r
+ v! `$ w9 |2 U. f) d- t5 f
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
% z( n& ~' J1 a3 ?+ U% y

# A+ r5 }9 \& Y; N) g. r; c第1个图标是复位调试。0 i  r" a. |, @
第2个图标是全速运行。7 W" Z. N0 c+ y5 p1 u
第3个图标是进入全速运行状态后,通过这个图标可以停止全速运行。! G- s7 |6 d4 }9 n% Q% T' ]/ j
第4个图标是Step(Step one line),单步调试,每次点击运行一行代码,所以只要有子函数就会进入。( g- f) S* C" o
第5个图标是Step Over(Step over the current line),每次点击以函数为单位运行,不会进入函数内部。% W6 D& I/ P& q: B3 p. E, _# i3 I
第6个图标是Step out(Step out of the current line),点击后退出当前运行的函数,执行下一个函数。/ ~! ^! p% t- L+ p
第7个图标是Run to Cursor Line(Run to the current cursor line),直接运行到用户设置的行,设置方法比较简单,用户仅需在那行使用鼠标左键点击一下,可以看到前面有个箭头
* c4 O5 G1 p: R: A9 c3 L7 J' m
+ k* j& x, c4 X  `' s
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

4 A# z2 m+ U! x4 p  x: K% ]# \, K
9 V! B6 b4 u- ~) i9 s然后点击此图标即可,可以看到前面多了一个黄色的小箭头,说明已经运行到此行
7 T/ f" _0 N& T1 ^* `' e% G/ B" W, m. W$ d) l4 P; |' M( L
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
9 m# M9 p4 ^! w8 |6 ^1 o: R
$ F- y" {0 R4 P
前面几个图标的功能,大家多测试几次就熟练了。  A- d5 p, v* Z% Y- U1 Q  t
) _1 [2 P7 t7 {9 p( r3 {; ]5 w9 q/ y3 N
5.5.2      外设寄存器的查看
/ N( W! H7 [+ l要查看的外设寄存器内容在这个菜单里面:
0 @6 T  h3 {; h. y; M6 G, ~0 g% H! k, c9 w1 r
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

6 K+ L$ }) J5 b- ^
. _% U3 a+ L& _6 V% Q! o- p如果要查看内核外设寄存器,在这里:
; I/ S3 b/ i7 h# I7 w  ^1 V. Z
0 r2 F( Z# L: d9 R- r
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

! C& B4 `* p5 g1 c) H/ _4 x& D& I1 L: a
5.5.3      全局变量的查看: i0 f9 l; ^4 C! d
针对全局变量,MDK专门提供了Watch1和Watch2两个窗口,每个窗口可以添加很多变量。调试过程中,这些窗口里面添加的变量是会更新的。
, a  W+ f5 l. A* u4 A
2 z/ _7 `/ S8 n: {
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

2 T2 V* j. F: m; j# H  A
6 b+ T% p- X- j+ ^也可以从菜单View ->Watch Windows进行添加。比如下面添加一个简单的全局计数变量。
! B6 [/ P, w; g
$ E: c8 ?) R! a! e9 M
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
) v3 e- Q1 ], O; w" v' I3 a% p

* V1 e8 L" G, R# y5.5.4      局部变量的查看) D0 k! F$ H) P1 r3 ?
针对局部变量,MDK专门提供了一个栈窗口,用于查看函数中各种局部变量,这个不需要用户添加,MDK会自动添加。8 Q' v0 x; s3 w) i/ M
& J" M. @6 w4 r$ ?5 k: C
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
' Z0 W( l$ \/ u' N% X
* i* i! {9 ~! Y$ u" s" S
也可以从菜单View ->Call Stack Window进行添加。局部变量需要进入到那个函数里面才可以查看,这点要特别注意,因为局部变量是来自栈空间的,进入函数申请占空间,退出函数后,栈空间就会被释放掉。比如main函数里面一个num局部变量:
6 B, d  l3 |, t
% B$ x  i# V  [: R
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
$ _" X+ W8 [) ?1 t1 c% S' A: ^( j" e
; ~, O/ f3 W) }3 t. V
5.5.5      Flash区或者RAM区的查看
2 W1 S2 [' z9 X
如果要查看Flash区或者RAM区的内容,MDK提供了4个Memory窗口。
; @" Z3 Z6 L2 R7 ~6 O  q, I4 k$ x9 l$ n' L  _& z
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

6 c, |0 G1 S2 f2 Q
5 |; B+ X& P  g( }# ]0 N% L也可以从菜单View ->Memory Windows进行添加。比如要查看0x0800 0000地址开始的内容,直接输入即可,这个地址是STM32H7的Flash首地址:" K; E- t  T, M
- X# F5 H0 V, V0 o  D' X
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
+ t( t3 N3 V; c2 P2 w% {% U& B
& w( F+ `* h9 e
5.5.6      断点调试
# G' U: g% X% a& B- C断点调试比较重要,进入调整状态后,如果大家想让程序在指定的位置停止运行,可以添加断点,通过这个小红点来添加。
( c0 @1 X7 j( X8 H* O* s: W
5 ~  c: r5 r( [' M% v' M
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
3 D- v1 L" E% p7 z* K7 T

+ X3 ?7 K  c; [" ~# J& P- i比如想在84行添加断点。& v2 ]: }3 ^' E3 N

$ p& p$ w( L9 b
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
6 c( ]# O* K7 ?( |3 E) {2 k
1 {+ E+ |5 f+ w2 F/ F4 [0 Z% t
用户仅需在那行使用鼠标左键点击一下,可以看到前面有个箭头:5 C" H8 q0 R8 n( b. w

# _, V* b0 m6 W/ X; T  Z  b; f
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

- j" y4 e+ m/ }% r; x& q# V" [( `5 R1 L1 q' X
然后点击那个小红点,可以看到已经添加上:  U! W) m* e0 U, g$ O  _' I8 ^8 V4 k# g
! v- e# S, w( F+ c  j; e; `
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

7 ^# Y8 H' i! d5 N3 r
6 n' w7 m& ]+ m: G* Y然后点击全速运行,如果程序有执行到这个地方,就会停在这里。可以看到黄色小箭头也显示在左侧了,说明程序执行这个地方了:5 I9 |, c$ K7 N) ~
9 ~8 O' t4 [8 _3 `
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
% d7 ]- s( |3 B: A

( @; `/ Z$ O7 ?* J0 v6 R正常情况下,断点可以加到任何程序代码可以执行到的地方。另外注意,退出调试前,点击这个按钮取消所有断点,防止MDK调试期间崩溃:9 b/ b# W( K6 z9 Z/ _! l

: D& g2 G" o: ]5 T' S
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

$ E8 x- s# K- y/ r- D( o5 q% M0 _2 g9 P+ V
5.5.7      寄存器,全局变量和局部变量的动态更新
7 E) K2 Q" o+ J  k4 ]MDK有个周期性更新选项,如果大家要周期性的观察一些寄存器、全局变量的更新、需要把菜单View -> Periodic Window Update选上。
* b6 y; Z9 R0 H/ Q5 q4 B# i2 Y4 C
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
; g; m3 i4 h! j) C) r( S; u  u

% M2 ]7 G' E* q这个周期不能设置,大概0.5s左右更新一次。" ^& A- j: G6 T$ V  W: \8 m6 g
7 M$ _' S+ {7 _' h
5.6   总结3 k7 S7 ?7 t+ R: j9 o( H8 i% A) l
对于初学者来说,务必要实际动手操作一遍。特别是调试方法,要熟练掌握,因为以后工程代码调试时,用到的最多。: z" J6 `6 |4 ^5 V& ^: q3 [

. C  E- L; @7 e: O3 w/ v2 N- h) y3 I1 ?
! R4 ^! L: K/ k
收藏 评论0 发布时间:2021-12-19 14:00

举报

0个回答

所属标签

相似分享

官网相关资源

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