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

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

[复制链接]
STMCU小助手 发布时间:2021-12-19 14:00
5.1   初学者重要提示
2 _5 h" @) M/ j7 U7 s& @如果使用JLINK调试下载STM32H7,务必使用JLINK V9或V10,之前的版本已经不支持。
7 u/ [$ W1 X: j; b5 Y1 C如果使用STLINK调试下载STM32H7,推荐使用最新的电脑端驱动和对应的固件,详情见第2章的2.6小节。6 R9 l7 c' [  {: @) M$ b3 B+ @+ x, p
MDK曾发布的STM32F1,F407,F429和F7的所有调试方法的设置细节及其注意事项,同样适用于STM32H7。! \1 s% B  D$ {# i9 w0 d( y
MDK5调试过程中容易崩溃的问题,请看本章5.4小节,比较重要。7 Y0 v; B+ [. |7 w
JLINK无法下载解决思路以及常见问题整理,适用于其它LINK。
1 Q5 e7 K2 j( ^5.2   使用MDK调试和下载程序设置(JLINK)
: S" a8 l3 O8 U7 d' S调试下载STM32H7,务必使用JLINK V9或V10,之前的版本已经不支持,JLINK的驱动安装等相关文件已经在本教程第2章的2.5章节有说明。" t$ @0 Z3 x8 D
/ e! S5 o' N! v, z- L
在上个章节里面,我们已经将Options对话框里面大部分设置选项都做了说明,本章节主要是调试下载的设置。
7 A- P+ O4 \6 x2 b9 A
' [3 N/ J) F2 I5.2.1      开发板和JLINK的接线图# R2 I$ b/ ~6 L$ d* ?/ {6 A: c
开发板接上JLINK的效果图如下,JLINK端需要插入开发板赠送的JTAG转SWD转接板:% R' K+ }# k; [) P
; H4 e6 K# M/ L# @: U
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
3 ], x  ?8 X$ E) P7 G

+ p, I- K) ]/ Z7 s4 o注意转接板不要插反了:: s' |" Q' W- Q# L/ t
" \" V3 g5 J9 s& ~1 f1 R
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
$ c4 h1 T8 P3 K  N/ y1 p
4 B/ r3 ~" Q8 p
5.2.2      设置Options里面的Debug选项
3 o5 s5 F- C% b
Debug选项主要用于调试设置。
' \" O; B1 I1 t- T; M6 V% r: E8 Q
+ A6 p% y2 Q5 A7 m. ?+ ?) {
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

8 n, K% U. A9 y( U) d" j
3 ^1 N) G0 _5 B% E打开Settings设置选项,设置完毕后别忘了点击确定。
* G: K5 S% {! ^/ A( z1 v5 r$ V. ?7 i' |8 a& Y( B2 N
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
4 g$ q7 g3 f8 y5 g  G. L7 @2 N0 v0 c) r

; h! D  A. ~$ H' U, }5.2.3      设置Options里面的Utilities选项
$ l/ |0 C4 q+ k( J' P. p! a. qUtilities选项主要用于程序下载设置。
  f- p+ [. u9 H7 ?' b( N9 h# _
. Z3 A! z  Z% c( x
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

' \  S1 B2 {# \2 K# \8 I+ U6 F0 Q6 i3 C% x" g
5.2.4      程序下载
: Y( z' D6 H# w5 _9 g" M- `
前两步设置好之后,JLINK插到电脑端并跟开发板连接好,将板子上电,就可以下载了。点击这里就可以下载了:- m) ^  ]6 C5 E. J$ h3 ]
  S4 a9 W2 K9 |! |3 F3 F2 u6 b% F
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

1 _0 T0 ^* ^: u7 P* z8 e8 M, S; B. c: V
下载成功后可以看到开发板上的LED开始闪烁,MDK的也有信息展示:. V3 k4 W9 l1 B6 i( }/ Y4 A
7 g! ]# S; m6 u+ q4 Y3 |8 N- j
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
! t& z# B1 y5 f0 h- `: c7 k
/ T1 G% z7 |/ Z$ y% @' c- a! q
5.3   使用MDK调试和下载程序设置(STLINK)

/ E- m. j. N% A% T* Y调试下载STM32H7,请将STLINK固件升级到最新版,关于固件升级和驱动安装等相关文件已经在本教程第2章的2.6章节有说明。
$ Q$ b* _" b  w2 a5 @
4 ?8 q3 ?" V6 a: H# h. S: @在上个章节里面,我们已经将Options对话框里面大部分设置选项都做了说明,本章节主要是调试下载的设置。: C6 l9 P$ K: ?( b* @

9 U- o! [1 H4 b  M5.3.1      开发板和STLINK的接线图
- }( ~& K8 [+ y- [9 ^
开发板接上STLINK的效果图如下:
3 c# V8 ]5 Z1 Y
  [8 O& A4 D* ]" P( i( e1 N* n4 [
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
* e1 k8 e: I% r: N6 ~7 C' _1 R

0 y0 C: N0 p8 @如果是下面这种STLINK,需要接上转接板:0 y: t- t' z) S

2 u' n1 M' [4 Z" X- c+ i& B
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

' E* `, ?; L8 U1 |* w0 B
: D! s% a  _- U6 a+ G# }
- t, N. v7 ]) Q# Q) [* W- l  I' H4 h
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
. e, J- H/ N1 V& U3 k! f4 X

; ?7 f, J* P* H3 ?* b; d, O/ I- Q% Y8 c7 l# T; S5 ^
5.3.2      设置Options里面的Debug选项
0 H, m( B9 L2 [& I8 {3 f  s* @Debug选项主要用于调试设置:' ]' V' {& R+ N

2 [7 X/ r: A, @: z# B% b4 p8 h
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
$ J& J, X; i, E2 q, E+ u

7 }+ H$ ~# N7 Z: |: S: x" U% V打开Settings设置选项,设置完毕后别忘了点击确定。
) ]. ]) `- A2 y. o  ^9 `  f- u1 f9 D/ h
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

( a" c2 F6 Z/ m$ C2 ]+ B& n9 R7 b  P% J
5.3.3      设置Options里面的Utilities选项% T  m8 e6 n$ ]$ S- B, y, e& x5 ?
Utilities选项主要用于程序下载设置。! C& l2 U7 Y3 J

4 O. g8 r& x* I2 x
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

) m& P' C5 w/ P* X+ ]. p
1 I: D7 S3 ^/ i5 t, V1 E5 c5.3.4      程序下载7 C7 N3 {' F6 q5 H$ P
前两步设置好之后,JLINK插到电脑端并跟开发板连接好,将板子上电就可以下载了。点击这里即可:
% B$ y! A% Z7 y0 Q7 W5 F3 M1 Q
6 [/ ]2 w4 @6 p
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
/ _9 g5 U2 G9 b# Z5 J) z7 W
/ ]$ M/ g& H  V: B5 g
下载成功后可以看到开发板上的LED开始闪烁,MDK的也有信息展示:5 B" G& B% n- F) a: ^% H+ ^
/ y/ t8 W5 r' _) G4 @) J  c
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

0 R# d1 N  X* r! Z
  ~2 i0 Q3 `1 N, Y7 n8 ]# d! d5.4   MDK调试容易崩溃的解决办法

1 B6 {- o/ x* N进入到MDK5.2X后,MDK调试的时候很容易崩溃,出现下面这个错误: U. {% P4 v' @) m6 b. r' P9 M$ r* h" P
/ l* \9 X. ?: s- D
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

- T' Y9 N! T. O0 z6 c9 L/ F2 E7 d( w. Y$ d1 D
出现这个错误的话,要注意下面两个问题:+ k8 H& h+ [6 D1 ]5 z  c7 p9 o$ a
, ~. R( H7 J" l' ?- A9 a, o$ ?  F
如果出现这种情况的话,将工程放在桌面路径下,工程名不要有中文会好很多。路径深或者有中文,都会造成这种情况。
8 t# q# `2 Z/ S9 i* a8 l  j退出调试的时候,如果使用断点了,务必清除所有断点,再退出,否则也会造成这种情况。
' Y  v3 Z- F, v6 S' v+ C
( x) t% W1 w+ _5.5   MDK程序调试
! R7 x: Q4 q" A# @JLINK或者STLINK设置完毕后,调试是一样的。& m8 V/ W. K" ^6 K/ w! C5 ]
- x( D% _/ f' W4 |8 {( |# }
5.5.1      全速运行和单步调试- E8 s) Q8 e( R0 O5 A7 ]  X
点击如下按钮可以进入调试状态:
/ N$ W( U9 f# `9 s7 z6 d4 k
" k) G: s4 Q$ X7 e4 T
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

4 H# |! R$ x. H* A! [* h* @+ |8 e! t# |6 x* w6 _/ y
进入调试状态后的效果如下:/ M5 p0 [9 V8 m& n+ b) }1 R- n/ u
: H% a' \/ K# s4 Q* G
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

/ Q' N& a6 P8 B* g" e: O9 C2 ]
首先要认识下这7个图标的含义:
- S/ n; ^" Q* @/ z9 m  d( S( ]4 k
* ]# c! m( e& o9 X0 U7 q
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

* u, {& h. `% ~7 c6 D1 z5 p5 L( M3 R
+ x" u/ A+ K% B9 x' i  b  s( x2 e第1个图标是复位调试。
8 ]2 f* W/ E, r- i. d第2个图标是全速运行。" K5 |, k+ q. ]
第3个图标是进入全速运行状态后,通过这个图标可以停止全速运行。
1 h7 X* _4 V( F, U  d' j# u5 a第4个图标是Step(Step one line),单步调试,每次点击运行一行代码,所以只要有子函数就会进入。3 Y  }, ~% ~0 b) ^
第5个图标是Step Over(Step over the current line),每次点击以函数为单位运行,不会进入函数内部。
2 A( p# p' Y8 d1 O( Q第6个图标是Step out(Step out of the current line),点击后退出当前运行的函数,执行下一个函数。% a$ H/ h/ |9 R3 A3 Z5 \
第7个图标是Run to Cursor Line(Run to the current cursor line),直接运行到用户设置的行,设置方法比较简单,用户仅需在那行使用鼠标左键点击一下,可以看到前面有个箭头
. [) U: m- V% e8 Q# l1 q5 \0 c6 S
6 H. C1 f* n7 y0 s- M
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
% e$ _. P+ ]0 O# u" k% a, N
4 u9 j; L. P; G; f1 u( R) u
然后点击此图标即可,可以看到前面多了一个黄色的小箭头,说明已经运行到此行6 m9 u1 q& z. t$ z
, U8 T5 ?+ ~; z& [/ |
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
; s! h: y. Q! Y: j; p9 F# t3 S0 H# z( X0 d
& j7 E7 d5 Y5 H4 O2 s9 ?3 W) C
前面几个图标的功能,大家多测试几次就熟练了。
: m7 M4 ]5 L1 ^+ [4 L6 [/ r$ I. w
7 k" ~# d+ {4 q) r5.5.2      外设寄存器的查看2 C5 P. v; i* R$ y" @4 s! |4 E
要查看的外设寄存器内容在这个菜单里面:
: c% F0 [4 C. ~/ r
6 g/ c# C* Y9 P) W  f6 G1 I
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

; I8 F* C  c$ s1 _8 A; b1 Q
' J- z  Z$ ]4 Q5 ?) S* I- P7 l3 d: ]如果要查看内核外设寄存器,在这里:4 a/ L- N4 X: j* r! Z$ c

+ I4 L+ r1 F7 e( Y
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
# D" q# g% q9 L' u; T0 o

" K& k' q' X& K3 o$ A& b5.5.3      全局变量的查看
  ?+ _# Y; `1 \; I5 J( q针对全局变量,MDK专门提供了Watch1和Watch2两个窗口,每个窗口可以添加很多变量。调试过程中,这些窗口里面添加的变量是会更新的。+ ?& x9 p" p* s# V* T- o% G

* O4 T' m% p; b- D" R- l
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

. t( k# a0 k; a/ o- k& G, R6 B8 q( y$ E* H. f: }
也可以从菜单View ->Watch Windows进行添加。比如下面添加一个简单的全局计数变量。% i( Z% u: W" K3 l9 G
5 z9 ^- U* O* L0 M/ o5 B2 K: x& v
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
, T1 u* V' h$ s
3 F. z/ ~( V* F$ [: U
5.5.4      局部变量的查看
( j! u5 I9 m" s7 V2 W针对局部变量,MDK专门提供了一个栈窗口,用于查看函数中各种局部变量,这个不需要用户添加,MDK会自动添加。
% O; B# K" U  l: E1 x$ o7 L
: a7 w% ]7 E# i
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

/ Q( _. E4 i) F* ~& `4 `
5 s2 z+ y. X" Q, j也可以从菜单View ->Call Stack Window进行添加。局部变量需要进入到那个函数里面才可以查看,这点要特别注意,因为局部变量是来自栈空间的,进入函数申请占空间,退出函数后,栈空间就会被释放掉。比如main函数里面一个num局部变量:
' ?* f& j+ e5 K/ Q4 e
! n& _, Y& s# Q2 B1 \5 ^8 c7 q" h
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

0 P+ ]( Q( \) r- Q' L
; y3 Q8 i) O) c6 O0 u6 K5.5.5      Flash区或者RAM区的查看

, B7 m% M( z& S' A如果要查看Flash区或者RAM区的内容,MDK提供了4个Memory窗口。
5 f# n# y, ^6 y$ z" D0 u, r
% g2 |: z1 _, i+ k# r3 G
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

% K$ F# J0 M+ F6 ~% o( N1 w6 U+ ]
! ]! \* j  M3 N也可以从菜单View ->Memory Windows进行添加。比如要查看0x0800 0000地址开始的内容,直接输入即可,这个地址是STM32H7的Flash首地址:
% ]* A6 M! P/ Y, C, N. I* e( C; T; c* r7 D8 P
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

) c  P: f; s4 K$ T' r3 F. d- V. o; p9 W* ?
5.5.6      断点调试9 x' V" }7 {3 a9 Y
断点调试比较重要,进入调整状态后,如果大家想让程序在指定的位置停止运行,可以添加断点,通过这个小红点来添加。; H& u  C( {) @- S" |) x

6 u" e' B# u0 G# }
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

5 M- z4 u: C# j7 Q3 a$ [" L9 q" w" X$ W: H" p3 k
比如想在84行添加断点。
5 v5 u. ]! z& W+ }' n$ [
% ?# @, o- H3 R4 P& W* C% I
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
) y6 {/ p; k2 h' O) H

5 m3 B/ O; k' B1 f/ c7 O$ [3 X% N用户仅需在那行使用鼠标左键点击一下,可以看到前面有个箭头:! J' q0 S9 u0 v2 m

/ {  u: X6 ?6 Z. o1 x% p
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
7 `( ^! h" P$ ~2 f1 }) S  d7 T$ o# D+ C

5 v( i8 @7 a4 E然后点击那个小红点,可以看到已经添加上:
* F, _8 E" ], B0 B# r) C* v! e$ H, T
' [' V: H9 z1 f% t5 {
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
; ~+ C! z8 C( X: V! y
# B9 {! [/ z* S0 x) R- q9 r
然后点击全速运行,如果程序有执行到这个地方,就会停在这里。可以看到黄色小箭头也显示在左侧了,说明程序执行这个地方了:' v! l5 m; a' z4 ^& E/ d6 z
, e3 M/ q6 t4 J
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
; i- ]& e9 g# Y% j3 T, x1 z0 l# o

. T! p& i$ ]+ z  M正常情况下,断点可以加到任何程序代码可以执行到的地方。另外注意,退出调试前,点击这个按钮取消所有断点,防止MDK调试期间崩溃:
; _: p& |7 C& s/ Y: V+ C8 Z
2 U& ], U3 ~, `" H
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

0 W8 a8 v# q4 V, m, V
/ d( _  a- p' y1 T2 I. f! }! s5.5.7      寄存器,全局变量和局部变量的动态更新# P! E$ Z( A; s
MDK有个周期性更新选项,如果大家要周期性的观察一些寄存器、全局变量的更新、需要把菜单View -> Periodic Window Update选上。& a) e. j  H# B8 n3 L
# C* L$ c, S+ H5 F
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
8 V8 |* M, j4 p' K" }8 K; ]& r  E

/ k+ M" v' g: K4 c这个周期不能设置,大概0.5s左右更新一次。$ x6 p" t3 }3 z" U6 I# I

- E3 l1 O8 I$ U5 M5.6   总结$ n- a( @" Z7 Y+ t" X% K
对于初学者来说,务必要实际动手操作一遍。特别是调试方法,要熟练掌握,因为以后工程代码调试时,用到的最多。, [' T; s7 R1 B2 \' |
) z) n. _5 K& E/ F  O
7 l* ?, r; b+ z  Z; y: T% u; `, q

" c8 N% `: G, z
收藏 评论0 发布时间:2021-12-19 14:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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