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

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

[复制链接]
STMCU小助手 发布时间:2021-12-19 14:00
5.1   初学者重要提示2 b4 G4 @5 A2 o$ g
如果使用JLINK调试下载STM32H7,务必使用JLINK V9或V10,之前的版本已经不支持。
; B6 Z8 I/ x+ m- Z如果使用STLINK调试下载STM32H7,推荐使用最新的电脑端驱动和对应的固件,详情见第2章的2.6小节。! v, C% R3 m. Z  p# y
MDK曾发布的STM32F1,F407,F429和F7的所有调试方法的设置细节及其注意事项,同样适用于STM32H7。
% v2 |3 N. `! w1 [2 zMDK5调试过程中容易崩溃的问题,请看本章5.4小节,比较重要。
/ i! l& U+ C0 {0 bJLINK无法下载解决思路以及常见问题整理,适用于其它LINK。
& h9 C$ k* r+ @% a5.2   使用MDK调试和下载程序设置(JLINK)
% @) {& d9 y, _2 V调试下载STM32H7,务必使用JLINK V9或V10,之前的版本已经不支持,JLINK的驱动安装等相关文件已经在本教程第2章的2.5章节有说明。) b1 J- E7 s# e" i! Z5 M

- K8 @7 ~: `: C9 A" |9 X- E在上个章节里面,我们已经将Options对话框里面大部分设置选项都做了说明,本章节主要是调试下载的设置。
2 Z" t- i- K+ h3 k  k6 _7 F4 \9 H3 l4 D! x8 M0 x/ S
5.2.1      开发板和JLINK的接线图* k* ]5 `2 z( m+ U0 w- Y  ?
开发板接上JLINK的效果图如下,JLINK端需要插入开发板赠送的JTAG转SWD转接板:
5 u0 n1 |& U6 N
- G6 S4 X% l! h/ s) C7 X4 \
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
# o) N4 i( j6 ?  L1 q( Q

/ T3 K" |% G2 f+ N: t  [1 j; }注意转接板不要插反了:
1 M: v) k# e. z( k6 r& Q+ R3 d2 H& m, A7 ~, p* a
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

) Z1 X9 i4 X  P$ L/ \
6 J& G% p5 f3 t- f0 ^9 a5.2.2      设置Options里面的Debug选项

7 z1 V$ W7 @! R1 CDebug选项主要用于调试设置。8 y4 u$ g1 `! G" ]1 h
1 J5 B. {  D0 [0 }* `
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

/ h' j6 y& K9 ^& n$ \* W9 V" R8 N  Q5 S& N9 j% a
打开Settings设置选项,设置完毕后别忘了点击确定。
& b1 Y1 z8 |' q1 ~$ G/ o  w+ M6 z7 f6 B, L. |2 t2 I2 B8 a
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

7 ^3 M6 s9 K- _( W# E
! \: \7 }$ ~0 k& [  Z5.2.3      设置Options里面的Utilities选项" |+ l# j& ~' r( ?2 P
Utilities选项主要用于程序下载设置。& b6 a$ Q2 `3 o& D

  i& C6 d, T/ D" d
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

. c" D% v6 w6 _9 r
0 F" V4 c; r( V1 C5.2.4      程序下载
5 |1 b8 M2 P7 q
前两步设置好之后,JLINK插到电脑端并跟开发板连接好,将板子上电,就可以下载了。点击这里就可以下载了:
  ^4 F# ~9 u# e7 j; v
9 q& j) b) d3 z( q. @
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
4 ^9 O9 E! E9 [; g
1 K! L3 U* h4 G! S3 i' @
下载成功后可以看到开发板上的LED开始闪烁,MDK的也有信息展示:
. l* o: ^, ^; _. [% s  y! b
5 w4 k3 ~* r/ \
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

0 [( }/ F, T6 Q+ Z; J' _9 c% r1 R! o4 H: U
5.3   使用MDK调试和下载程序设置(STLINK)
: z, a  {4 I, R) k6 T; ~
调试下载STM32H7,请将STLINK固件升级到最新版,关于固件升级和驱动安装等相关文件已经在本教程第2章的2.6章节有说明。* A  G6 j- u# [; ]& r! J8 V% H
2 Z) }" S9 W; _" T1 _
在上个章节里面,我们已经将Options对话框里面大部分设置选项都做了说明,本章节主要是调试下载的设置。
6 I* V. i. D( d$ i- U  W) q( o" ~/ A! h6 g* t; Z* H
5.3.1      开发板和STLINK的接线图

& J, S+ R! d" Q, V% G* x* D& Q% T开发板接上STLINK的效果图如下:
8 Q" u# I, o6 H4 t( Q2 r) |4 N# d% V
* {5 g: r0 [/ V' |
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

1 x, ]3 U* q6 B6 Z  l+ c3 d3 Q' I8 \+ H2 y, }6 Z+ D) n
如果是下面这种STLINK,需要接上转接板:
/ J0 A: f. K6 C4 \( k' D  E7 A
" y/ ~! y: X7 I+ d5 m
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

8 n0 `6 f& k& [& V; d
. a1 Y+ Y! X5 G) R, S; ]. D' c2 @3 A  o6 U" W/ h  a
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
5 Y$ Y% a; L: H1 q$ j7 z
" W: S, c4 E5 e; v5 U

8 B/ T5 e* j0 E+ r  @0 I9 A6 ?5.3.2      设置Options里面的Debug选项+ }8 E! b1 S* b" y% l
Debug选项主要用于调试设置:, l2 M1 Q# O) s7 R6 n8 Q. ?' f7 q4 W

# i$ ?. R" v' V+ O, a
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
+ A; c  ]9 ?  C3 j
1 r2 l' g" z& S: @8 l
打开Settings设置选项,设置完毕后别忘了点击确定。
' x. H: q! B/ A: e, {0 y
7 ~7 p- q7 R- E1 y. _  v7 T4 x  U& G
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

2 n, x1 P' m, b) J# S  J) @' s. e3 f
5.3.3      设置Options里面的Utilities选项
( K, K" e* X2 V. H! ?Utilities选项主要用于程序下载设置。* R' M3 l% j, u

, e  B5 P6 k" c. ?: I, U
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
5 U; a: U4 ~4 l9 m

' ^/ u1 S1 q) V1 [, \( S9 L5.3.4      程序下载6 r1 U' `. X/ @; E$ B
前两步设置好之后,JLINK插到电脑端并跟开发板连接好,将板子上电就可以下载了。点击这里即可:
8 d' _: F1 f% ?! a! G3 ^% B4 Q* m
; o) ~1 Z+ N9 L- C
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

2 \# P& _2 h: ^; e: ^  b' F% ~% h/ a# T* G5 e2 I& C' O3 w% j% m
下载成功后可以看到开发板上的LED开始闪烁,MDK的也有信息展示:
( R5 W7 q+ ~: c3 p" f0 h" W+ W, \
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

/ Y* m- F( O- `2 W0 Z* t6 T; a
& d2 @7 P, Z/ h$ Q0 I5.4   MDK调试容易崩溃的解决办法
0 F6 J8 X7 z5 f: t5 p* Z
进入到MDK5.2X后,MDK调试的时候很容易崩溃,出现下面这个错误" W. T( f, n; i$ @. {1 T0 _
& `/ h; a; q& v  r$ H# e/ f1 L# W
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
3 q: G% |0 ~, \& s) w

- ~7 U4 w' O# n% q) O/ I5 ^3 q. `出现这个错误的话,要注意下面两个问题:
. M$ b: @2 O+ |/ v! @# e4 _! U9 J" V% F1 ]! @4 H
如果出现这种情况的话,将工程放在桌面路径下,工程名不要有中文会好很多。路径深或者有中文,都会造成这种情况。
$ X3 L2 n4 B! E% U- s; i退出调试的时候,如果使用断点了,务必清除所有断点,再退出,否则也会造成这种情况。& {  p2 c- W7 \3 ]. r

* J% H8 G+ O5 [( G5.5   MDK程序调试
# `5 d7 x$ X$ n0 y& V' V8 jJLINK或者STLINK设置完毕后,调试是一样的。
# {/ ^4 @5 P1 R+ B( ]
( V4 H7 {7 U& v" g* e) b9 S7 B5.5.1      全速运行和单步调试) N, ]$ T8 i8 l
点击如下按钮可以进入调试状态:
0 t" q& `* w3 f8 z# N# ^# P, Z5 G
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
5 c" c) E4 W% x3 |

  `6 k% C& l2 N4 ~4 \+ S" J) y进入调试状态后的效果如下:
; Y0 Q3 |- A# a/ |. d/ a: n" Q# G% x# ]+ V- j0 o2 n0 L: ~
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

8 h! o1 w9 R* y8 n. s- K
& d) o! N: _0 P  l& W1 {3 J9 Q首先要认识下这7个图标的含义:4 c# }; ~5 R* D9 P4 S0 T( ?
4 d1 C6 M9 Y- l% R: A! T
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
( d! @! T, x) w2 G( d
8 Y4 S! s3 W% a$ `+ ]+ ~
第1个图标是复位调试。7 {5 w- Z; x& n' Z
第2个图标是全速运行。# U0 y- J0 Q3 ?: \
第3个图标是进入全速运行状态后,通过这个图标可以停止全速运行。2 P  w3 b; v0 j2 p
第4个图标是Step(Step one line),单步调试,每次点击运行一行代码,所以只要有子函数就会进入。
+ b$ z$ `4 o0 k) P  G8 Y第5个图标是Step Over(Step over the current line),每次点击以函数为单位运行,不会进入函数内部。
2 E7 k, t3 d, O* l: Y) H; L' f第6个图标是Step out(Step out of the current line),点击后退出当前运行的函数,执行下一个函数。
6 R$ e: f& N4 G- U& [5 }6 e; t; P第7个图标是Run to Cursor Line(Run to the current cursor line),直接运行到用户设置的行,设置方法比较简单,用户仅需在那行使用鼠标左键点击一下,可以看到前面有个箭头  i0 e$ d$ x! ~' a; R) J
$ }  I# r; s2 K; i
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

' q1 p7 g: o4 t+ Z; G
& ]$ {) A: U) i5 b" ^然后点击此图标即可,可以看到前面多了一个黄色的小箭头,说明已经运行到此行
) k  Y* Q+ n5 V: I( m; L$ ~- g% h* L6 n8 b6 u
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

* B- k: D$ D  T- P2 t
1 ]. b/ F( L7 W- j& n前面几个图标的功能,大家多测试几次就熟练了。) j$ r; [! l$ Y9 B% B

4 I- \  p* u( D% l4 i# k; y+ q- a. c5.5.2      外设寄存器的查看
% E/ ]" S8 w; X3 o2 O# ~2 |9 x要查看的外设寄存器内容在这个菜单里面:% B  @0 Y- J5 l! y' N1 u

8 d2 I* {) x3 b. W4 O. D1 F
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

. e1 o! z: n4 o
8 h9 g& M9 {3 Y. n) L如果要查看内核外设寄存器,在这里:
! b" Q3 I9 A/ c' Y* y& F! E( n' |8 |: ^9 U
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

, w1 P# {) T! U6 g2 g
3 `  Q, f8 @. d' Y, i4 D5.5.3      全局变量的查看$ m$ c2 Y9 J$ V% O) _' H
针对全局变量,MDK专门提供了Watch1和Watch2两个窗口,每个窗口可以添加很多变量。调试过程中,这些窗口里面添加的变量是会更新的。
- C  H' U: x- F  C: H; t8 H2 Z( l5 v- f2 E
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
- ?3 u* A" \1 t# F" d
& E+ m% Z0 c  a9 R
也可以从菜单View ->Watch Windows进行添加。比如下面添加一个简单的全局计数变量。
( F# Q+ _0 S3 t9 `: Z" T# T! Y; H; \+ j4 V  T& ^8 Q4 q
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

# b5 D7 {; k) c* s, v( ~0 r: e$ [0 x
5.5.4      局部变量的查看2 ?6 R6 g' ?% t7 b
针对局部变量,MDK专门提供了一个栈窗口,用于查看函数中各种局部变量,这个不需要用户添加,MDK会自动添加。
- L7 s, [' V' Y0 B* A9 d# A( l( r7 r  ], A& t0 _; i5 u
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
. f5 L  c2 ~; Q3 L( C! ?
, j# x" E- I# ~1 `/ o
也可以从菜单View ->Call Stack Window进行添加。局部变量需要进入到那个函数里面才可以查看,这点要特别注意,因为局部变量是来自栈空间的,进入函数申请占空间,退出函数后,栈空间就会被释放掉。比如main函数里面一个num局部变量:2 S% \# q3 `+ H1 }) z6 y
& M# b/ T9 U5 v% I' z8 [" C9 k) ~% s
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
/ p8 u0 e- j! J5 a, w1 p5 P

% i8 C3 r& r  e# Z! {$ O6 ^5.5.5      Flash区或者RAM区的查看
, U" I7 N4 R! [7 g$ C# p, F0 ]
如果要查看Flash区或者RAM区的内容,MDK提供了4个Memory窗口。0 b3 ^7 w8 S8 N- _+ D

4 U& y$ U! s/ j9 \! j( y' `1 l
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
' X0 h- s- h% Q
) Q1 i9 u* i7 w; ~) G
也可以从菜单View ->Memory Windows进行添加。比如要查看0x0800 0000地址开始的内容,直接输入即可,这个地址是STM32H7的Flash首地址:' A" Y2 F3 Y+ Z: s

8 f5 c  v. }# ]$ M0 }. S/ ?! {0 R
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
2 b! Q5 I3 @8 g( i% K% v# \

: ]; I# V0 `; t) d3 ?- ^5.5.6      断点调试$ d9 m! t2 r! D& W2 y/ C1 G1 t/ T
断点调试比较重要,进入调整状态后,如果大家想让程序在指定的位置停止运行,可以添加断点,通过这个小红点来添加。. B4 B- ^* [7 n! E

# I( z# n' l7 q/ v- F5 C
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
/ P. p2 W! `; N' A5 b
0 g, Z7 Y. V% ^1 y6 n
比如想在84行添加断点。5 r7 e" w0 w  p' F' u0 r
8 ?# M" i& n4 @1 k( d3 E
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

! {. k, t) X* B% Q  p+ F
# O0 L! |1 ^1 P4 U( g6 l8 |1 U7 a2 W4 `用户仅需在那行使用鼠标左键点击一下,可以看到前面有个箭头:" k, T# d$ h% w2 b
) N  z4 J+ s- y/ O
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

% G0 k  J5 _5 y' @- R9 z. l5 S* d! T: O7 Q/ f) @. N. B
然后点击那个小红点,可以看到已经添加上:2 C+ F; A/ h% y& _' h3 H
8 k/ N- e: c/ z: p
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

2 l, a& `3 x& f* i4 f; _6 d
6 G  z' s/ L, }然后点击全速运行,如果程序有执行到这个地方,就会停在这里。可以看到黄色小箭头也显示在左侧了,说明程序执行这个地方了:6 L: y& T7 l# E$ C: u& B! m- m

9 Z4 `/ L3 m% }2 V$ ~4 v
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
# N! a& o' @5 a$ {0 X
) M+ D  Y: Z. i! x2 H
正常情况下,断点可以加到任何程序代码可以执行到的地方。另外注意,退出调试前,点击这个按钮取消所有断点,防止MDK调试期间崩溃:
) k: o- Y& h; @# b5 G0 |
1 w1 ?7 L6 O5 y
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

0 O: r- H- g8 \
3 ?* M2 [( Q- q" o9 t+ W5.5.7      寄存器,全局变量和局部变量的动态更新
' W0 n7 B$ _4 i& }# PMDK有个周期性更新选项,如果大家要周期性的观察一些寄存器、全局变量的更新、需要把菜单View -> Periodic Window Update选上。
2 w5 L% I: X4 j" F& r8 b3 m  G1 t4 T9 P( [
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

$ ?# v! S+ B: @2 s3 {
% l8 p# y, z. P" T这个周期不能设置,大概0.5s左右更新一次。: p2 l* q7 [: M
/ a; s& S" i3 [2 r2 {
5.6   总结$ A/ G$ A# _5 O% X+ p# u  N
对于初学者来说,务必要实际动手操作一遍。特别是调试方法,要熟练掌握,因为以后工程代码调试时,用到的最多。
# y, p6 s& R4 g) Z" j; n" x) d. i# d) M) y/ f* e

+ `% \4 c3 P! H- @% Z
% V+ E3 ?( G/ {5 ?/ x
收藏 评论0 发布时间:2021-12-19 14:00

举报

0个回答

所属标签

相似分享

官网相关资源

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