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

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

[复制链接]
STMCU小助手 发布时间:2021-12-19 14:00
5.1   初学者重要提示$ h7 w& R' ~6 G
如果使用JLINK调试下载STM32H7,务必使用JLINK V9或V10,之前的版本已经不支持。6 e( j: I+ U. o* \+ I8 q% [
如果使用STLINK调试下载STM32H7,推荐使用最新的电脑端驱动和对应的固件,详情见第2章的2.6小节。
1 j7 @+ S; e0 x# `& D1 g+ fMDK曾发布的STM32F1,F407,F429和F7的所有调试方法的设置细节及其注意事项,同样适用于STM32H7。
6 N% z1 k4 I! |/ mMDK5调试过程中容易崩溃的问题,请看本章5.4小节,比较重要。$ Y9 _' v: y7 N! ^/ s  ^, ?
JLINK无法下载解决思路以及常见问题整理,适用于其它LINK。& W, V0 N: I- n3 `7 B
5.2   使用MDK调试和下载程序设置(JLINK)1 H5 ~% t: S3 k0 b' Y' V+ G" _' p5 a8 x
调试下载STM32H7,务必使用JLINK V9或V10,之前的版本已经不支持,JLINK的驱动安装等相关文件已经在本教程第2章的2.5章节有说明。
) ^# n% Z, f8 c
  u! B) l& O" I& u: m0 Z在上个章节里面,我们已经将Options对话框里面大部分设置选项都做了说明,本章节主要是调试下载的设置。
4 ^0 ~" P, J; Z6 P7 K& S* s
1 _' A& W1 B) i  r7 D' N5.2.1      开发板和JLINK的接线图
/ R3 c5 n+ r6 |) e: L4 `开发板接上JLINK的效果图如下,JLINK端需要插入开发板赠送的JTAG转SWD转接板:! P$ p* A" V" f3 z* i

& z& d! ^& \' `% A  Y6 N9 A
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
. S; a9 }$ \3 k  B( N/ X: c
9 v% Z/ y0 r' ~3 M4 i
注意转接板不要插反了:9 I, d# L6 ~, t( o8 r0 i/ R6 X
  q6 V3 i6 H- `: ^$ H
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

6 p, o% M! e& J" A
- T6 Y. f) |3 r# x/ T  P5 T5.2.2      设置Options里面的Debug选项
  b) f$ D2 k, r: w
Debug选项主要用于调试设置。
; D* c" _+ ^2 a) M  U; D
- s- ^& U* M# b( ^! h! V5 Y' \
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
% v' d5 Y, p* Q

3 c! [9 E- G( i3 P打开Settings设置选项,设置完毕后别忘了点击确定。3 Y- h( Y' y& X# t! `  Z0 I

* U! S4 ]% y  b# b4 @
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

) u% r7 F3 ^2 @. q9 ?' m2 K$ P0 }% }. j. c  d  m, \
5.2.3      设置Options里面的Utilities选项
1 J* E$ L; E3 z7 I/ OUtilities选项主要用于程序下载设置。: ?6 T2 ]/ D1 \7 S

$ E/ W' G* A( p+ N, O/ S9 v; I
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
! Y# z  P* o& q  B
3 S# F. D8 L  v3 C+ k9 p; s9 M2 W& }: C
5.2.4      程序下载
; x  i/ O4 a& N
前两步设置好之后,JLINK插到电脑端并跟开发板连接好,将板子上电,就可以下载了。点击这里就可以下载了:7 e3 \% i1 K% L2 K

9 d6 K% ~8 w( ^# h
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
$ }& ?3 p% m; |, l$ w
0 J) A9 D+ f  X& N
下载成功后可以看到开发板上的LED开始闪烁,MDK的也有信息展示:/ m0 J+ m# Y* d9 J$ T$ ?+ m

" N0 ~: v2 c+ l8 E- @  t' I
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

) ?& d; l7 {$ J9 Y; [
) S) U" d5 D* l) ^# ?; y' n/ G5.3   使用MDK调试和下载程序设置(STLINK)

4 W5 D) t4 V  y3 Z) \调试下载STM32H7,请将STLINK固件升级到最新版,关于固件升级和驱动安装等相关文件已经在本教程第2章的2.6章节有说明。
, ~% _3 T) o! q6 w
# L3 Y+ U" G  u) [' W在上个章节里面,我们已经将Options对话框里面大部分设置选项都做了说明,本章节主要是调试下载的设置。
* ]$ s* w  C- `. W/ [" G% {+ f/ W6 D- c8 z8 u) Q" r2 D
5.3.1      开发板和STLINK的接线图

/ @% `: W/ T  x- J' L开发板接上STLINK的效果图如下:
5 d5 f& N3 q; \4 Q9 j
. M  l9 q: z# S6 T" y% E5 C
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

/ @% j( {8 `6 k0 n. H( o  W/ U. H0 _/ b# N7 `
如果是下面这种STLINK,需要接上转接板:9 r7 ?7 M+ U. b1 H
  D- u7 Y! Y( U# L" U0 l; C
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
" Q$ n) C4 L" \# Y: V! k

" t5 M! D& v1 b9 D& v, _
' v! X1 b4 s! \! R: Y( g! s1 l
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
2 g* w2 t/ M- n9 I1 s- {
+ w3 G! f9 l& X3 ]4 C5 z; ~

7 j5 N# F" v8 `, ?. L. E5.3.2      设置Options里面的Debug选项/ r: x" U8 l; A! L8 [4 g) j
Debug选项主要用于调试设置:
1 N/ U8 [6 C* U3 B' l$ P( E. x7 F. j5 c) c2 T% i* D
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

, J6 M8 H2 ?1 G' ^0 n
& ?: Z$ d  M0 m& a打开Settings设置选项,设置完毕后别忘了点击确定。
9 I7 F- i6 q5 r1 h. o$ n6 C  b  p& H9 s- \
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

6 d" B9 b3 d3 x/ C/ b1 h3 Q( v; R" ]$ B
5.3.3      设置Options里面的Utilities选项1 M* n/ F, a2 q
Utilities选项主要用于程序下载设置。
6 j8 W# _$ A0 O; k6 {, p) Q# y- r  y5 [, L0 Y
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

8 g0 ^- G) T4 B) z
: n9 F8 e/ r1 K! r8 P, G4 e) W5.3.4      程序下载; k- a0 l' l. X5 l
前两步设置好之后,JLINK插到电脑端并跟开发板连接好,将板子上电就可以下载了。点击这里即可:
& _+ m& R7 [( l& E4 L( E, n0 z
2 z" _1 |$ z  A& H
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
4 b$ m# J4 h/ g- M
" A+ X6 `) d' G4 d
下载成功后可以看到开发板上的LED开始闪烁,MDK的也有信息展示:
& x* a! B+ f% t9 m& z
- b' E' G: w; I
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

; V. [5 I, L3 u$ o/ N/ M' e* z' I( z" n& A% \% ?- y2 e
5.4   MDK调试容易崩溃的解决办法

  J9 I* H4 i8 D0 `+ O- q' l7 X- ~进入到MDK5.2X后,MDK调试的时候很容易崩溃,出现下面这个错误
. x$ D9 ]6 t1 c  |" w
7 J8 X) r+ z+ ~1 i) m
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

/ G8 r/ N3 d: q, g; j; e2 G* @' N' a$ J0 O5 W9 r
出现这个错误的话,要注意下面两个问题:" a1 Z0 z% a4 m5 E+ f" B

% k. _' s% h! c2 y7 u( `5 X& @如果出现这种情况的话,将工程放在桌面路径下,工程名不要有中文会好很多。路径深或者有中文,都会造成这种情况。# a" \6 ]& _7 Q
退出调试的时候,如果使用断点了,务必清除所有断点,再退出,否则也会造成这种情况。
' v6 L4 E' ]1 i- g: Z  q7 ~, U5 ?, _
5.5   MDK程序调试5 T4 n" g& z% x7 W0 @8 p  R& T
JLINK或者STLINK设置完毕后,调试是一样的。
8 _  s* C* o* I7 W% c  s2 `) j. s) P2 d' ~6 v8 F
5.5.1      全速运行和单步调试
) Q  g3 W  G4 C0 x3 t5 P  P点击如下按钮可以进入调试状态:/ r4 l9 ~' Y) ^+ |* f0 e
' _. t4 h9 `7 ~/ c7 _
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

: @5 U7 E8 D/ I, d. d: K1 y5 R  F# W6 G! l8 k# I( z' ]8 D
进入调试状态后的效果如下:! F3 p. p/ C: }

7 Z: Y7 u9 q" R/ B, k$ r- Q
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

% S: p" a1 N% r* z; u- j) j8 `& u- y! |8 L/ L7 i
首先要认识下这7个图标的含义:
1 M5 j: [+ R/ g2 m/ s0 ]1 N2 C  D5 i6 i  t7 B9 I5 S$ X
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

& J6 K/ H. [+ C7 z3 B4 i
& W! S) S! S& v8 ~; C/ T. S+ M' E4 a第1个图标是复位调试。
0 h, q$ o) n7 e7 E" p* Q# V* P4 M第2个图标是全速运行。
6 g( O$ O2 E4 z- z9 i* L) c9 L第3个图标是进入全速运行状态后,通过这个图标可以停止全速运行。" ~& X' U; g: Q5 v5 k+ C  _
第4个图标是Step(Step one line),单步调试,每次点击运行一行代码,所以只要有子函数就会进入。
) O7 \2 H$ i9 f6 b) q" `" P第5个图标是Step Over(Step over the current line),每次点击以函数为单位运行,不会进入函数内部。
: l/ C' t2 ^9 P; C. u' z8 A第6个图标是Step out(Step out of the current line),点击后退出当前运行的函数,执行下一个函数。
  T$ p! X8 `$ z+ @' }5 |% C: t第7个图标是Run to Cursor Line(Run to the current cursor line),直接运行到用户设置的行,设置方法比较简单,用户仅需在那行使用鼠标左键点击一下,可以看到前面有个箭头
2 Z: S+ T' Z8 L5 b, @7 w5 b  T6 f9 W; ~
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
: G$ D0 q  s( x6 M! l
& ~2 V# O8 X6 f9 v" R
然后点击此图标即可,可以看到前面多了一个黄色的小箭头,说明已经运行到此行/ l; i( M, e+ _; b, l

, l9 j2 Y3 ]1 L6 o1 A" @
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

/ x8 D# n, F9 U9 x+ L. d' T# N9 y) s% p- ^5 [7 r
前面几个图标的功能,大家多测试几次就熟练了。2 r6 V4 O  j1 n/ H. p; d+ b

( E. w8 m5 P3 q. p5.5.2      外设寄存器的查看
  G* d; p/ E! A' u6 c) H要查看的外设寄存器内容在这个菜单里面:
4 h# z7 ~! s8 Y; K- {* ?9 v; A
7 |& U: Y) _5 I) D) s$ o+ W7 L
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
1 T6 Q  S  n5 p, ^2 E: s
5 T% V& s! g/ q6 c& B
如果要查看内核外设寄存器,在这里:% w7 ~2 N, z+ D: `4 C" \
! `7 p/ G' S6 [- ^2 T& Q: b8 u
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

3 g/ X) Z/ s/ u& x6 q8 i$ e- c2 d8 Z8 ^9 y
5.5.3      全局变量的查看2 g8 V# [  y0 K; U! }: q& V
针对全局变量,MDK专门提供了Watch1和Watch2两个窗口,每个窗口可以添加很多变量。调试过程中,这些窗口里面添加的变量是会更新的。
4 [6 ]/ _( P% a% L- F7 E+ Q# ?; V3 v$ V/ h% i
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
0 y$ n; j! Y5 g8 i& \  l  S

- h; }& d8 \4 b$ C$ C& y也可以从菜单View ->Watch Windows进行添加。比如下面添加一个简单的全局计数变量。
" g5 V" e! x8 e" R6 c, m- ^' {0 O& f' w# v4 v/ N+ G
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
5 }+ i9 D0 z9 i+ H9 I! T
$ @2 _. Y) V7 u; ?9 W$ B
5.5.4      局部变量的查看6 h+ |$ e/ }. T4 G0 n
针对局部变量,MDK专门提供了一个栈窗口,用于查看函数中各种局部变量,这个不需要用户添加,MDK会自动添加。$ M$ v1 ?6 o4 C0 L
. _; b( O/ v" l# B# Q$ B- Y
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
1 ?" ?6 L; ]/ k8 f8 J. N

8 o2 ]- f& E6 [. }也可以从菜单View ->Call Stack Window进行添加。局部变量需要进入到那个函数里面才可以查看,这点要特别注意,因为局部变量是来自栈空间的,进入函数申请占空间,退出函数后,栈空间就会被释放掉。比如main函数里面一个num局部变量:: M& W3 f% g# @  s* v( v8 }* f& v

( z. \8 k7 l1 ~, y. }# f
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

4 h% S. `. U5 G
4 r9 z# g* ^9 y5.5.5      Flash区或者RAM区的查看
+ S$ g8 Y! |* M+ Q9 Z' Z, _) q
如果要查看Flash区或者RAM区的内容,MDK提供了4个Memory窗口。
. i% Z! N" E; V5 P7 L: H' d  c, X. R
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

; G2 Z! ~- M) w0 G
) l8 q1 v0 ]; V* o$ `也可以从菜单View ->Memory Windows进行添加。比如要查看0x0800 0000地址开始的内容,直接输入即可,这个地址是STM32H7的Flash首地址:  F! [2 r2 c0 L& H) Z% F

9 j1 ]7 l: n, w0 S( s3 ?* i
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
# h! x) K0 C9 i( `/ a( R

  b, p3 L; @( s2 y6 T$ }$ l9 ~5.5.6      断点调试* F0 S; U. U* ~' Z7 H# ~( }
断点调试比较重要,进入调整状态后,如果大家想让程序在指定的位置停止运行,可以添加断点,通过这个小红点来添加。  t, ^0 ?9 f" w. u5 X$ t! v$ s
% d! C0 |8 A* o
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

; x6 ~& p- P* f: R
- d4 O+ u( S: l# K比如想在84行添加断点。
6 ?2 G/ M% B7 Z& V: X( {2 |- U- Y2 u: @  P0 J% [$ G
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
0 w8 p& p. Y% }0 e

9 }, M& b/ A7 q6 H/ Z0 n用户仅需在那行使用鼠标左键点击一下,可以看到前面有个箭头:
% H1 \) |% O6 d; q7 y  V; H$ s6 v. P4 k2 N# e" A" Y( L
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

) e  p9 b" ~! U& ~" z% W3 r* Y! @. _$ J% n% F1 r
然后点击那个小红点,可以看到已经添加上:9 Q2 B8 y9 t3 @1 [

# f4 H- L7 ^+ i8 V) Z" }* E
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
$ K3 n7 r2 S5 ]: H
9 y& F! R: r% y$ C
然后点击全速运行,如果程序有执行到这个地方,就会停在这里。可以看到黄色小箭头也显示在左侧了,说明程序执行这个地方了:; E( M. H; n1 O2 g
. ]9 X/ j: t$ x( U, l5 c% e7 s- A  B
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
  K: c( r- H  h+ V0 P1 c8 x7 c
/ y. r" w5 P1 p
正常情况下,断点可以加到任何程序代码可以执行到的地方。另外注意,退出调试前,点击这个按钮取消所有断点,防止MDK调试期间崩溃:1 n6 t' K2 ]3 w9 q% s' O
5 V. K* d% U" G  T; n) J$ F
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

" y' b( L9 ~3 M1 _
- X9 G; `) }7 w7 j7 E/ \7 D5.5.7      寄存器,全局变量和局部变量的动态更新
' c- Z) I4 D9 E2 O0 \% ]) z' q' d6 uMDK有个周期性更新选项,如果大家要周期性的观察一些寄存器、全局变量的更新、需要把菜单View -> Periodic Window Update选上。9 F; E1 x/ x9 u

& u6 b% N' u/ M! ?7 W* h
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
" h8 \) t- i( C
, Q; t, ?; U" N/ ~- a% l& X4 n
这个周期不能设置,大概0.5s左右更新一次。( n0 x/ K4 l$ z! ^7 G

' ]' D% |5 I3 |5.6   总结
5 Z# [, s8 a: K) h& j  c; o# t对于初学者来说,务必要实际动手操作一遍。特别是调试方法,要熟练掌握,因为以后工程代码调试时,用到的最多。
6 @: p5 O" q: C3 {' ?1 W' G: S1 m+ Y" W# W

: L9 N. `' i: C( K  d# f' c! \5 k; N% _/ R$ B! d6 x
收藏 评论0 发布时间:2021-12-19 14:00

举报

0个回答

所属标签

相似分享

官网相关资源

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