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

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

[复制链接]
STMCU小助手 发布时间:2021-12-19 14:00
5.1   初学者重要提示( n. N( d' O& u/ T
如果使用JLINK调试下载STM32H7,务必使用JLINK V9或V10,之前的版本已经不支持。
, \: s5 e+ O( O! Q4 s如果使用STLINK调试下载STM32H7,推荐使用最新的电脑端驱动和对应的固件,详情见第2章的2.6小节。  F$ h0 Y4 f* v/ N; V6 G
MDK曾发布的STM32F1,F407,F429和F7的所有调试方法的设置细节及其注意事项,同样适用于STM32H7。4 }( e) D: c& l
MDK5调试过程中容易崩溃的问题,请看本章5.4小节,比较重要。8 ?' G  E4 F0 q, M* r; f, \
JLINK无法下载解决思路以及常见问题整理,适用于其它LINK。- n& n+ w2 s. U5 T
5.2   使用MDK调试和下载程序设置(JLINK)
6 T& z' `3 M& `6 b+ P调试下载STM32H7,务必使用JLINK V9或V10,之前的版本已经不支持,JLINK的驱动安装等相关文件已经在本教程第2章的2.5章节有说明。8 Z0 D" W' g, h: I4 G6 s+ P$ c
# W. a" a' d5 c0 D6 y
在上个章节里面,我们已经将Options对话框里面大部分设置选项都做了说明,本章节主要是调试下载的设置。1 O6 b6 M) X! b4 p) z3 J
& Y4 w5 z4 d" U& [4 r
5.2.1      开发板和JLINK的接线图
6 s+ W2 J" X3 q7 Q3 Y# U开发板接上JLINK的效果图如下,JLINK端需要插入开发板赠送的JTAG转SWD转接板:( D' L& _6 i- R! T( J: `3 x  n* N
9 w* A6 T' t% g) q- h0 C1 H
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
2 q/ L& R% K/ N6 w0 p: h  u

" X. B; m( F2 y/ e- v4 u8 \注意转接板不要插反了:
6 _% [4 n9 L8 v
1 G; }' G* L5 h% b4 e. K& n" g' i
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
/ `: g0 d, i# a% y# S* R" u4 [8 d
8 }' h, S+ g) p
5.2.2      设置Options里面的Debug选项

9 B, }1 }7 Y8 U  @4 w# o/ ^5 Q3 ^Debug选项主要用于调试设置。; b; b& v( l% H6 H8 ~
: i2 k. L7 |) a) o$ H- N- B
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

9 Z- b  Y+ Y2 E: y8 R: a* l, e  N" U* M' i) J' g
打开Settings设置选项,设置完毕后别忘了点击确定。; j% O4 t4 Z, e$ A1 [( r
; o# z5 N! W4 L
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
& ~; W& F) ~( V: v4 L9 x

2 S9 T; @3 F9 W5.2.3      设置Options里面的Utilities选项
- j; `5 O2 c, D2 v( ZUtilities选项主要用于程序下载设置。- O7 A2 O8 ^  @2 Y& |
! v- |) w9 G9 Y( O/ ^9 Y
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
* Z- p; {1 k; k+ k2 J+ n

; W  S5 p5 n/ O' Z( }( Q5.2.4      程序下载
' q% N6 w6 n9 p2 p
前两步设置好之后,JLINK插到电脑端并跟开发板连接好,将板子上电,就可以下载了。点击这里就可以下载了:
: o. X+ ?+ q2 Y2 Q# x$ x
  l3 x6 X! O- F/ F( U3 G
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
) N: ]( X  S# D/ ^' j+ J
- Y2 `  b6 R% L+ D5 {* l! b- N0 X
下载成功后可以看到开发板上的LED开始闪烁,MDK的也有信息展示:
  N/ K8 }. \5 y  k! S6 |# I: Q; s
6 V% J: F( ]  K6 T
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
5 A* g7 G- G4 {1 ]" i
" h  |5 @  s( ~9 r: o& B. l
5.3   使用MDK调试和下载程序设置(STLINK)
" l  C7 T3 V8 X, l
调试下载STM32H7,请将STLINK固件升级到最新版,关于固件升级和驱动安装等相关文件已经在本教程第2章的2.6章节有说明。3 R0 M2 A( U9 B7 R4 v' O

! d# s% b* s( _; t6 u& C2 `4 X( q在上个章节里面,我们已经将Options对话框里面大部分设置选项都做了说明,本章节主要是调试下载的设置。
1 V8 t2 j5 u$ ~! U) Z# e% a
- k6 c% R' K1 \1 Q1 [$ ]  J5.3.1      开发板和STLINK的接线图
, N7 Q# z2 R6 T# H% ]+ }
开发板接上STLINK的效果图如下:( X' s7 c' F0 `. z8 w( }6 _( i" c+ f

% t- ^5 X3 ^9 L; ~+ K1 r4 J2 a
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

& |, [. t, Y% L% u9 s0 h
5 B( V- V1 A5 c1 N" K如果是下面这种STLINK,需要接上转接板:; J* r3 h# a# x
: [0 S+ {% ]" {7 v+ ^
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
. A* I. C: R' L! |$ f9 k

& S7 b( u# P" e: ^# u9 L
  [+ d) j& U0 P$ h& C; |
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

6 m9 _# j- X, X% l( Y- ]
4 a5 l- V% n3 T* }: ?/ Y/ H+ ^6 x3 d: R! @/ z7 h% ^5 e5 W7 p4 s+ B
5.3.2      设置Options里面的Debug选项+ Q$ O; U* m: {: g( ~/ T8 |
Debug选项主要用于调试设置:0 v; Z5 {% N. z& j0 z

6 U$ u- @4 g" e+ X& G5 V$ H
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
/ s9 d  w$ F1 t6 I
( ?; K* L4 w  u% M
打开Settings设置选项,设置完毕后别忘了点击确定。! F' S" \) J! E, V
" G2 s5 e6 }7 V* b6 Y
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
5 |' _; E4 k* X2 B: O

3 N8 N% V5 a8 q5.3.3      设置Options里面的Utilities选项
5 t: l! L( q2 IUtilities选项主要用于程序下载设置。
- K. |) ~$ l4 T8 R  L& _9 K. I1 z6 W5 R. U7 }; `2 Y- F3 N
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

; s8 R. M+ L' H# p2 F4 ]7 C. ~' W9 M) F/ M/ y# f) y( u* d* N
5.3.4      程序下载+ R% p7 @( [0 B' L0 S4 t
前两步设置好之后,JLINK插到电脑端并跟开发板连接好,将板子上电就可以下载了。点击这里即可:& ^4 f6 H, X% m' W6 F4 C
) q$ W/ Q1 s: h" d5 z4 w7 x
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

1 q/ C  c% v2 V( j) M3 B
  T9 M+ u$ W$ F0 o" b0 l* v) y下载成功后可以看到开发板上的LED开始闪烁,MDK的也有信息展示:
# `$ F$ `! N8 x/ N
$ f7 k. u- V- h2 s  l
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
$ J6 y- y. S8 G. i/ M
/ Y( Y/ _- W  W
5.4   MDK调试容易崩溃的解决办法
6 {- m" O1 |' k: r' Q8 N
进入到MDK5.2X后,MDK调试的时候很容易崩溃,出现下面这个错误! O  ]3 E/ g5 l9 U2 r7 T5 U

( [( C( R9 v4 a/ m2 V0 R
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

% }# Q* C0 N- }; }  }6 N8 D+ Q) w/ v
6 q  S4 w1 K* m) V& V出现这个错误的话,要注意下面两个问题:
9 i9 h2 x5 R- ]0 B7 l7 }8 ]6 E" l/ ^
如果出现这种情况的话,将工程放在桌面路径下,工程名不要有中文会好很多。路径深或者有中文,都会造成这种情况。7 ~6 u; ~2 i4 H5 \+ W' A
退出调试的时候,如果使用断点了,务必清除所有断点,再退出,否则也会造成这种情况。
% c1 G" }! L+ D: q; p( n" H/ P( }
9 s' |7 K# @# I4 [) A% F0 |5.5   MDK程序调试9 e& D' h% N  [7 q7 S0 j! {
JLINK或者STLINK设置完毕后,调试是一样的。4 ]. G; ~- |# o( j! W

" s) {# T9 `# t: w5.5.1      全速运行和单步调试
  \! M  ^" ~& v' A, _点击如下按钮可以进入调试状态:/ |5 i1 O0 p1 B6 A, ?5 s
- k" Y8 J9 U9 ?( s
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
6 j' _1 X, Z0 ]

/ |' ~9 q6 Y" [进入调试状态后的效果如下:
9 R9 R* H! c9 M4 j* F' [( o5 j
% k. o7 Z7 R& m: G1 @
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

; Z6 Z4 _; F7 w+ o" B& L2 e
4 ]5 p: [8 `, w4 l首先要认识下这7个图标的含义:: F% J0 O9 L* Z) [
! Z' C) k2 h& q6 ^9 K& N- J7 D5 O
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
) a+ h! X5 }  ?3 z( X( |9 M
# \' }- u* Y2 y" F1 b7 e
第1个图标是复位调试。
( l! Y, ^( U7 _; `9 V* j) r3 R" y第2个图标是全速运行。
* X6 N/ ^2 e' e- c第3个图标是进入全速运行状态后,通过这个图标可以停止全速运行。. y5 s0 Y% q! w4 G. y; t# e
第4个图标是Step(Step one line),单步调试,每次点击运行一行代码,所以只要有子函数就会进入。# V9 ^7 E* Q; w, T
第5个图标是Step Over(Step over the current line),每次点击以函数为单位运行,不会进入函数内部。: h9 {! k8 Y. [
第6个图标是Step out(Step out of the current line),点击后退出当前运行的函数,执行下一个函数。' k' y  y! }3 `3 W: A6 f
第7个图标是Run to Cursor Line(Run to the current cursor line),直接运行到用户设置的行,设置方法比较简单,用户仅需在那行使用鼠标左键点击一下,可以看到前面有个箭头4 a8 E3 ]; ?2 e& P5 L: F* k

0 ~4 Y) ]7 n, m* L% T) j& P( r
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

- o8 N0 w0 D$ Y3 j' X5 B- y) R; t: N+ q. a0 ]
然后点击此图标即可,可以看到前面多了一个黄色的小箭头,说明已经运行到此行& Y6 P1 R! f1 F, o; v; V
! o! x' R5 D' L. C/ P
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

5 z1 y2 I' b; r* a, }% a) X0 k  a& ?# J# l9 Y
前面几个图标的功能,大家多测试几次就熟练了。/ F8 ~- V+ ?0 x1 W) D

+ D$ S- @$ }7 k: g( L/ ~5 b5.5.2      外设寄存器的查看# O4 i* |/ k9 O% [
要查看的外设寄存器内容在这个菜单里面:
) J2 }3 L: q. n% ?' V# H- u" |; Z: F9 C3 F0 F7 q
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
( g' L) M. l/ ~6 m' a7 h
$ S: |; x: w5 Z8 [' I' l7 {0 j
如果要查看内核外设寄存器,在这里:- N9 o( K' ?4 h6 q) A
5 X5 T! Z8 t" o
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
4 a- b4 l" n* s

0 k7 W4 u0 E; ?' l: F2 O/ t/ V3 A4 c2 B5.5.3      全局变量的查看/ x9 ^; m, j8 `2 e: M- {1 e
针对全局变量,MDK专门提供了Watch1和Watch2两个窗口,每个窗口可以添加很多变量。调试过程中,这些窗口里面添加的变量是会更新的。
$ p7 C; w5 }' v" ]3 }. w
3 q0 G1 Z) W: I: w0 i% Z' g9 E
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
) I/ E9 V" Q8 w! a9 c) ^' }  F

8 f8 ?- s2 \) r也可以从菜单View ->Watch Windows进行添加。比如下面添加一个简单的全局计数变量。4 c/ {$ K6 M# i1 L0 P+ ^
- J" o  U, C8 o' n0 Y
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
, q( K  K: N3 E- T$ C& Q3 i1 C& U
* q+ R5 N  W! ~' @  ?. u
5.5.4      局部变量的查看
4 ]% T& m" W2 N) S2 Z针对局部变量,MDK专门提供了一个栈窗口,用于查看函数中各种局部变量,这个不需要用户添加,MDK会自动添加。/ G& G4 P, I# \1 @8 C+ o) o  s
+ N, c, c( O4 l& r* x7 C
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
  _) Z1 y  s8 _

$ b; X$ ~! m1 U( ^也可以从菜单View ->Call Stack Window进行添加。局部变量需要进入到那个函数里面才可以查看,这点要特别注意,因为局部变量是来自栈空间的,进入函数申请占空间,退出函数后,栈空间就会被释放掉。比如main函数里面一个num局部变量:2 O5 H5 s0 I! q5 @. K' ^
1 v8 q) \+ J1 I
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

" \. `( U) ?) _4 F* R' m! |% t/ }! R# J- u2 ^$ m$ Z& G4 J
5.5.5      Flash区或者RAM区的查看
$ \8 K& m3 E& f" c6 v8 M5 k  h% M7 L
如果要查看Flash区或者RAM区的内容,MDK提供了4个Memory窗口。) \  Q/ ]- M2 C3 z2 H

# _9 c; Z3 e5 q1 a! x
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

2 Y) m1 y: @7 o' {! \' ]+ R  _8 O1 B  p8 {) H: M" B2 ?
也可以从菜单View ->Memory Windows进行添加。比如要查看0x0800 0000地址开始的内容,直接输入即可,这个地址是STM32H7的Flash首地址:! y8 I( l, P  E) w) O( K

$ T, o' _5 b3 M3 T7 `9 V" X3 e9 `2 x" f
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

) [4 I7 b" P- u5 \0 p" Q4 _+ C. t* ~& D& Q9 r; w8 Q/ J/ S
5.5.6      断点调试
" K6 b$ S5 X( }* Y: d( G4 p断点调试比较重要,进入调整状态后,如果大家想让程序在指定的位置停止运行,可以添加断点,通过这个小红点来添加。
# L' [$ \+ S0 m
, N  ]. V  n- O3 R; Z, p* ]/ S
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
. N  x* i8 D( f! [! \
3 r" h3 ]$ u7 Y  V' V  v2 U
比如想在84行添加断点。
( n0 V3 l, k# |
* ^0 l( c6 T/ `
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

# ~" V  i4 D. r, s6 h8 u2 _) [9 g- A& a+ `
用户仅需在那行使用鼠标左键点击一下,可以看到前面有个箭头:. @5 Y5 c  s7 S4 g# c& D

2 w# u) T, s; M2 m3 r9 q
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
: s( b2 M& N7 }% f5 T1 }

+ G: a; i) k- D' [5 o8 ~然后点击那个小红点,可以看到已经添加上:9 c* D6 _( ?5 S# S

, r: w, A/ t. ~# n
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

  l. C" U: Q  P$ ^( j: R$ {- V
: \8 r+ h  V$ b6 e然后点击全速运行,如果程序有执行到这个地方,就会停在这里。可以看到黄色小箭头也显示在左侧了,说明程序执行这个地方了:
/ H9 V% }+ l, p3 Y9 f& G) B- Y9 X! Y9 m. I
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
* p- G& t5 t- ^- x

' k2 x" B1 \) [9 [$ c正常情况下,断点可以加到任何程序代码可以执行到的地方。另外注意,退出调试前,点击这个按钮取消所有断点,防止MDK调试期间崩溃:
  V% O5 x$ k3 M+ n- k8 `7 ]/ ^0 Q9 Y! S- }0 o  ?  K0 l
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
& w& Q/ c& ?) K( H4 j4 o- L& u
- B6 @# _7 t' q( e
5.5.7      寄存器,全局变量和局部变量的动态更新
$ B; x* i! b- U7 M, AMDK有个周期性更新选项,如果大家要周期性的观察一些寄存器、全局变量的更新、需要把菜单View -> Periodic Window Update选上。! h: {; e$ c, r8 [- y( g' k. J
+ Q2 b4 z  u) h  t5 A0 h% b, X$ x
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

  c- g6 Z, S3 {0 [) E* w: K# T0 d; @7 M# k) S& v0 q; l
这个周期不能设置,大概0.5s左右更新一次。
; f- y( z/ s/ K2 I6 |+ k
3 |6 l  @8 r% L" [5.6   总结6 l0 A0 t% @! N7 ~
对于初学者来说,务必要实际动手操作一遍。特别是调试方法,要熟练掌握,因为以后工程代码调试时,用到的最多。( i+ N7 v. A9 `: m8 x! w( @9 q
+ {) |+ n9 n6 X; {/ P" i

; g) e5 |. ~- K1 c  Z1 _
% b9 j9 w- P% R" ~/ x
收藏 评论0 发布时间:2021-12-19 14:00

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版