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

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

[复制链接]
STMCU小助手 发布时间:2021-10-27 23:08
5.1   初学者重要提示* K  G2 N) Z. P+ T
如果使用JLINK调试下载STM32H7,务必使用JLINK V9或V10,之前的版本已经不支持。
% r8 B, B% o0 u% c+ ~( V如果使用STLINK调试下载STM32H7,推荐使用最新的电脑端驱动和对应的固件,详情见第2章的2.6小节。
# f* d  V; t; h4 Z) `3 v3 y+ H# P/ {MDK曾发布的STM32F1,F407,F429和F7的所有调试方法的设置细节及其注意事项,同样适用于STM32H7:9 C/ B3 ^" x4 Z
MDK5调试过程中容易崩溃的问题,请看本章5.4小节,比较重要。% U7 c, _4 [; R# w# V1 c& `/ H
5.2   使用MDK调试和下载程序设置(JLINK)/ G2 {7 z; F# \. l3 {3 v1 g" C
调试下载STM32H7,务必使用JLINK V9或V10,之前的版本已经不支持,JLINK的驱动安装等相关文件已经在本教程第2章的2.5章节有说明。
3 f9 y. K& F2 v; k) `/ M6 H
9 K" U4 Y1 O4 @  p' ]9 c6 ^/ r在上个章节里面,我们已经将Options对话框里面大部分设置选项都做了说明,本章节主要是调试下载的设置。3 J! `5 a8 k' C1 A, X' b" G

5 ]2 f- [1 }. {5 I* ?4 l; `5.2.1      开发板和JLINK的接线图
; _& l. v5 u% w; t- g7 J; f开发板接上JLINK的效果图如下,JLINK端需要插入开发板赠送的JTAG转SWD转接板:
9 C8 Z3 f, P, _1 O% }" l7 ?! c' y* f6 y. q: J$ Y6 {# d0 l+ i
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
. c4 f6 ?0 M1 J) _5 j" \9 l+ y

2 M& U8 x" T$ @; r- F- _& j8 i注意转接板不要插反了:, r7 [! w1 @+ j
$ U. F6 n4 G9 `+ _* d1 ^( o6 R
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
+ k! r6 q' o6 O0 g1 @

, ?) H7 Y) I6 H5.2.2      设置Options里面的Debug选项# R1 c2 i0 M0 y6 R- T
Debug选项主要用于调试设置。
( S+ M5 g) T7 w7 y
$ h" L; @- K' t, T& q0 N
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

& y. i* X! X- b/ J1 p
: p8 A3 i; e. t3 T  m* L2 A  z9 y. `打开Settings设置选项,设置完毕后别忘了点击确定。* a; q5 _2 C1 C! |

: n* D6 L  A. u: m9 M2 O2 [1 B
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
7 z4 F; i& D! l4 |

! n2 ?. C1 ?. O- X% p1 V) `5.2.3      设置Options里面的Utilities选项" \) Y% y" z" G& d" K' ]: ?
Utilities选项主要用于程序下载设置。" y$ F$ l; S+ t* b

6 p5 m' D! R- j
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
0 V( N4 h8 ?: |- E% l0 F) j' e4 v

% t: M2 F# T6 k! t3 @5 C5.2.4      程序下载' f8 m+ x8 D- f% G* ~* Y0 Y, h
前两步设置好之后,JLINK插到电脑端并跟开发板连接好,将板子上电,就可以下载了。点击这里就可以下载了:' j, t% @1 _7 ^+ \; \( u. k
6 F2 d. Q1 m6 N  S% V
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

  J+ l% g0 T# M5 w; J8 e
$ n9 `5 v2 i+ g  {3 R* E下载成功后可以看到开发板上的LED开始闪烁,MDK的也有信息展示:
5 k" E4 Z5 X9 h4 b2 k" j$ ]8 a4 d: P: {# _3 ?0 U( Z6 S7 T
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

# u( T6 y# ?1 Z0 l- e' [% u8 g+ n% G5 z
8 J2 a( T. s/ X- ?& w# w5.3   使用MDK调试和下载程序设置(STLINK)4 Q' c/ E) Z. P% O) \4 N
调试下载STM32H7,请将STLINK固件升级到最新版,关于固件升级和驱动安装等相关文件已经在本教程第2章的2.6章节有说明。/ \! X6 v( R: |/ K. g) \

; ~6 u) X5 w$ w$ y/ X3 v9 ?在上个章节里面,我们已经将Options对话框里面大部分设置选项都做了说明,本章节主要是调试下载的设置。
: h$ q9 h, h1 }  J3 E) W+ S$ m% l! q
5.3.1      开发板和STLINK的接线图
1 ?1 Z: v2 W0 l; n/ d, O开发板接上STLINK的效果图如下:5 \% i6 n  |5 Z1 E0 |( {7 H

1 S1 H" P0 S' u" T( R1 u
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
+ v3 B  p8 d0 R8 t( ~( T

+ L' m$ C/ @, V, D1 @0 ]# d如果是下面这种STLINK,需要接上转接板:
9 h& h/ U0 x" O/ V5 L- z# I9 O( E
# E, ~5 H; F% S' t7 \) e
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
. Q+ K+ j; b+ B, a
7 X+ n1 R. G0 e3 s  R

& E( {  B# _- {) B% ^  y" H5.3.2      设置Options里面的Debug选项7 ~7 C; l4 A* L' r* z( s8 N) x
Debug选项主要用于调试设置:
3 L. `/ X& ]" [8 z6 i( d/ D- T7 w  @4 f; h6 Z0 @2 L4 c: b( c
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

1 F" V: }+ B( M. y, l! d
" Q9 o( Z9 l; C/ q7 \' t/ r$ Q打开Settings设置选项,设置完毕后别忘了点击确定。# d- S+ B& h/ b( x' ^: M
) Z; V7 v1 f2 h7 ]
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
% \$ A9 K2 j3 l
. z( V" E  D2 u
5.3.3      设置Options里面的Utilities选项0 u* o* I2 S) j  Y) |
Utilities选项主要用于程序下载设置。; ]) n" i$ _- [! m; @

* B, W2 T8 A( ^3 U
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
) K7 Y' J8 y$ y
; Y4 L1 x0 u' t
5.3.4      程序下载/ {: \: F$ Z8 {- ]6 U( s7 C% A; ~
前两步设置好之后,JLINK插到电脑端并跟开发板连接好,将板子上电就可以下载了。点击这里即可:+ F3 E; h" @; K3 \+ ?& ~/ ^

% h5 j0 X) q1 E1 p; M
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

! d$ n2 S5 X7 I& Z* D7 ]) `% Z/ u8 Q, M
下载成功后可以看到开发板上的LED开始闪烁,MDK的也有信息展示:
8 d- U# ^5 _0 F8 U* k2 Z4 O& b2 F- F) L! K7 K6 Z" y
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
  f+ J8 T/ I5 t# q7 Y% K

* f% d  k" B3 R, ^5.4   MDK调试容易崩溃的解决办法
+ n/ Z4 x$ L* j! I; f2 N进入到MDK5.2X后,MDK调试的时候很容易崩溃,出现下面这个错误, Y' g+ C6 S, m% a: o8 \' Y+ J, ~
: l! i  ]+ [, u1 _! R0 ]
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

- t+ q- b3 Q3 r- Z" n6 U* v6 \! j. a: H6 F- m( P7 k3 V0 l0 ]
出现这个错误的话,要注意下面两个问题:! C, ]+ h: {1 v

+ U+ p. C: L  u: J- X& _如果出现这种情况的话,将工程放在桌面路径下,工程名不要有中文会好很多。路径深或者有中文,都会造成这种情况。4 e9 z' X; @8 H* l/ N
退出调试的时候,如果使用断点了,务必清除所有断点,再退出,否则也会造成这种情况。8 \7 C8 E1 j% j7 h9 ?& P' k
$ q$ P9 q1 c; k
5.5   MDK程序调试' J& c* }* D" n
JLINK或者STLINK设置完毕后,调试是一样的。* D7 |6 o. R0 o0 p( J6 \

+ i5 n% n- Q: O0 P, S, S! R$ C" A5.5.1      全速运行和单步调试8 K$ N8 u* N+ W: V9 C% B, Q
点击如下按钮可以进入调试状态:: U; p3 U4 G& p9 c* R8 ?
1 M' I& m/ ]( G6 N, C1 W
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

) s) [1 n4 G$ t0 U8 U6 }9 W3 Y0 t$ z# [0 O/ i
进入调试状态后的效果如下:4 a9 ^; Y9 H8 v% C; W
# `/ z2 t# `1 M$ a6 e
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

8 o. O& y8 s2 G# v9 a1 R7 _4 m
7 Y7 T& K* m7 P. R" h7 ~' @首先要认识下这7个图标的含义:$ f$ h1 ^- W" i3 [) T6 G
4 r  R+ h5 P% @" S+ T$ h
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

1 r  x5 O" a! d! \6 v1 E8 `7 n0 Q1 C1 ]9 ]9 r! e6 T8 h8 z8 k. x
第1个图标是复位调试。
( w9 R0 \: C! G* |! O第2个图标是全速运行。# q2 ]. F6 H$ U, L
第3个图标是进入全速运行状态后,通过这个图标可以停止全速运行。. q6 T6 U; d( G
第4个图标是Step(Step one line),单步调试,每次点击运行一行代码,所以只要有子函数就会进入。$ @% t: Z) G1 {' Y- l: y, M
第5个图标是Step Over(Step over the current line),每次点击以函数为单位运行,不会进入函数内部。. G! n- f: n$ U. V& r% i
第6个图标是Step out(Step out of the current line),点击后退出当前运行的函数,执行下一个函数。
6 t. z% D9 F0 R1 W- G第7个图标是Run to Cursor Line(Run to the current cursor line),直接运行到用户设置的行,设置方法比较简单,用户仅需在那行使用鼠标左键点击一下,可以看到前面有个箭头. ~1 y6 c) }( J. ]3 l" p2 w

) A4 u/ }: n- M- p$ ^: X. b( Z
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

9 @' U6 c# _! p* ^( n
  q9 h( H7 x5 p. `  h然后点击此图标即可,可以看到前面多了一个黄色的小箭头,说明已经运行到此行
/ A& w5 l1 S$ Q, c9 ?9 S
5 O. U  `! Q7 u: U6 j
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
/ R. Y; e# m" [' j/ K: R- D
2 j& g# J" ?- o
前面几个图标的功能,大家多测试几次就熟练了。4 X, ?' |  S, ?2 a+ b+ m, G

/ k( G7 D  u1 f5 T# c2 y5.5.2      外设寄存器的查看
4 @3 K4 M3 E1 j要查看的外设寄存器内容在这个菜单里面:
5 z8 i7 o6 L6 j3 S6 {+ I( l
  v/ ~+ u: L% r$ E2 U7 K5 W
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
6 t2 C7 b9 L% K% R$ g
3 v0 x& l) R: t4 a
如果要查看内核外设寄存器,在这里:
. H# u& s. {+ K( }; Y$ P! m
; z* {& `3 h9 x6 W: m) y6 a
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
" d. M1 f6 ]3 k

6 [; r! h% g# C3 K/ ?7 p" [  C5.5.3      全局变量的查看
+ {& A! E( t0 ?' ~/ @针对全局变量,MDK专门提供了Watch1和Watch2两个窗口,每个窗口可以添加很多变量。调试过程中,这些窗口里面添加的变量是会更新的。9 ?+ U5 p. W) M- j! [! E- }! v

7 a4 P) u1 y3 v% y! w2 e; @' d' Q5 a
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
. f# O4 b; l- s, k' Z% C

& N2 T( t1 u2 ]+ j也可以从菜单View ->Watch Windows进行添加。比如下面添加一个简单的全局计数变量。# H! A/ ], a2 \4 I% [2 R

8 o; Z3 I8 E, S. g4 M  h  ]$ x) I
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

, I1 c- e& y1 c- e0 |2 ^5 f" G$ E& d- ?+ p3 ~, r4 |
5.5.4      局部变量的查看$ [' H2 Q1 f* p
针对局部变量,MDK专门提供了一个栈窗口,用于查看函数中各种局部变量,这个不需要用户添加,MDK会自动添加。0 {) P1 s( C1 J# v7 i1 e

; }7 y' A. p  f! F0 i- K% r& |7 r
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
; N" n8 ~# W0 l2 K% X

( q# u# p' a, c( N' ]也可以从菜单View ->Call Stack Window进行添加。局部变量需要进入到那个函数里面才可以查看,这点要特别注意,因为局部变量是来自栈空间的,进入函数申请占空间,退出函数后,栈空间就会被释放掉。比如main函数里面一个num局部变量:
! I! ?  m0 ]/ A( F
' F* Q% S" p# `0 ^: d
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

% G1 Z' J% ~: p$ Q  r6 y' ]6 I, ]5 m- _( ^& j: b
5.5.5      Flash区或者RAM区的查看
& ]8 i5 K' k5 X8 m; t+ [如果要查看Flash区或者RAM区的内容,MDK提供了4个Memory窗口。4 a7 I6 f) W) D5 M* t/ s) `* ?
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

  a, x8 e, u) n! z1 Y& t; n" c6 S* n& O3 p: m$ K* ^: X' E
也可以从菜单View ->Memory Windows进行添加。比如要查看0x0800 0000地址开始的内容,直接输入即可,这个地址是STM32H7的Flash首地址:& i) M* r, h! [  K+ c5 W, Q

: W3 O9 ?9 j8 t( T
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

/ D5 v& g& n' F& o2 p
; g/ c: G0 I7 l9 Q9 T5.5.6      断点调试' S6 n& s  r7 x. c8 B$ b2 b
断点调试比较重要,进入调整状态后,如果大家想让程序在指定的位置停止运行,可以添加断点,通过这个小红点来添加。
# L$ E' g7 U5 s( f, d1 A& M7 e& i+ x/ _; S
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
# ~  ?6 q  J" M8 _9 y
& A2 e7 Z3 o7 W) N
比如想在84行添加断点。
, K2 k* X" d7 {0 B9 D& h- ^6 g! F) i4 E! j& `2 l
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
6 t/ z: m* O! z& j6 w

! O5 ^, E1 v5 q4 M! h' i9 R  p用户仅需在那行使用鼠标左键点击一下,可以看到前面有个箭头:, C3 l6 H$ U. |' L" x
: L8 e: b* J' Q8 n4 m/ {
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

- @% o& S6 j% R' g- N( t4 n5 P+ `# _5 s& g
然后点击那个小红点,可以看到已经添加上:
8 {8 ^$ b4 l0 U3 S! K$ i  H- |8 h
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

' y! Q/ [' o5 V- N! ?3 l4 Z% t/ g( K$ S8 v' c" r5 @
然后点击全速运行,如果程序有执行到这个地方,就会停在这里。可以看到黄色小箭头也显示在左侧了,说明程序执行这个地方了:
/ ^; s' a9 X/ Y. ^: D; ?; d
+ K* Y) C0 }2 @1 y
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

% z" a) H8 W5 j) P7 r% J* f
9 X. Q5 n) B# x& A正常情况下,断点可以加到任何程序代码可以执行到的地方。另外注意,退出调试前,点击这个按钮取消所有断点,防止MDK调试期间崩溃:, Y: U8 X9 i/ I

/ p3 \+ @  ?+ y/ F- k
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
7 B- `* E) g1 n3 A9 |
' J4 b4 B; F" Q6 e- q  l1 @4 n
5.5.7      寄存器,全局变量和局部变量的动态更新
# n# d& B2 g# R( g6 J2 x3 }MDK有个周期性更新选项,如果大家要周期性的观察一些寄存器、全局变量的更新、需要把菜单View -> Periodic Window Update选上。
4 q8 v2 V1 K$ y8 Q1 `: X3 A* }' R) `- P
" N$ p3 C# a% B
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
5 ]$ N5 l3 }  `* W# e

$ j8 ]$ o% t1 B5 w( `2 Q0 ?% z这个周期不能设置,大概0.5s左右更新一次。: ?! ]4 V7 @* N3 t3 W

. U! ?+ D: Z3 L9 y5.6   总结
) |% J. q) R+ N对于初学者来说,务必要实际动手操作一遍。特别是调试方法,要熟练掌握,因为以后工程代码调试时,用到的最多。7 \2 G. I  _' n7 f# J( n' i2 G' a
* @( h7 g( S% m

( h3 m0 Y, K8 u; v; U2 }7 r7 j: M$ o( P) E% ]) ]2 Q* f
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
赞 收藏 评论0 发布时间:2021-10-27 23:08

举报

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