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

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

[复制链接]
STMCU小助手 发布时间:2021-10-29 22:14
7.1   初学者重要提示- w  P, A" y4 ]! H
  如果使用JLINK调试下载STM32H7,务必使用JLINK V9或V10,之前的版本已经不支持。8 F8 Z! y& g( j$ l9 {$ T8 a
  如果使用STLINK调试下载STM32H7,推荐使用最新的电脑端驱动和对应的固件,详情见第2章的2.6小节。6 y" p  N- R$ f+ T( v6 H: e+ j

- q8 D. F4 N( L* b0 N' w7.2   使用IAR调试和下载程序设置(JLINK)
- }- c4 I2 b* I* n; h调试下载STM32H7,务必使用JLINK V9或V10,之前的版本已经不支持,JLINK的驱动安装等相关文件已经在本教程第2章的2.5章节有说明。
/ k9 p3 S+ ?' J# v2 k" F( m+ G2 K3 o# N. C6 u, |4 O1 K
在上个章节里面,我们已经将Options对话框里面大部分设置选项都做了说明,本章节主要是调试下载的设置。3 \3 L& V/ \/ w0 u4 Y. l# U" w
  ^9 V3 r3 P2 `; D# x
7.2.1      开发板和JLINK的接线图! f! Z5 F0 Q+ u/ ^; {+ c
开发板接上JLINK的效果图如下,JLINK端需要插入开发板赠送的JTAG转SWD转接板:& w0 n  N, J  r) }2 w* J

2 u' [" ]0 z+ A# E! s; A' B$ ]
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

4 w8 F" @0 J4 z  U2 i0 V- n注意转接板不要插反了:
! Z7 S, [3 F" @
* S( Y) y; \+ ?: {9 O; a6 b- Z
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
' q7 h2 J/ _7 a/ h1 l7 b8 C/ V
7.2.2      设置Options里面的Degubber选项
8 V; w) J0 e: {) U+ |& yDebug选项主要用于调试设置。% z/ c4 r- f; i! R5 x9 k! S, |$ e

! U8 g$ F. X/ S, N; W
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

$ Y- s0 V" Q+ N! K( v# m设置完毕后,别忘了点击OK。6 C% i$ I( a5 X' Z% \+ A: g/ R

0 `% j% e& c1 i! [" r7.2.3      设置Options里面的JLINK选项
7 z' h1 \  i9 A9 O& b1 I  X注意,在Debugger选择里面选择了JLINK后,才可以设置此选项。Setup部分使用默认配置即可,无需修改:; N4 U, i, f$ A2 k
6 B% X3 |) O. N/ M/ u8 }
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

( b2 ?) X9 c9 P9 F2 wConnection部分要选择SWD接口:0 ~: I: n0 e6 x
3 a! Q0 f2 o. Z; T. l# w
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

' p) s' ~) d& E; M4 X. J5 S设置完毕后别忘了点击OK。
/ _. R+ E( p) d0 _  q/ w2 q8 P7 ~& ?; c
7.2.4      程序下载$ F# I% }& A7 g0 g' g4 C
前两步设置好之后,JLINK插到电脑端并跟开发板连接好,将板子上电,就可以下载了。菜单Project->download->download Active Application:6 L: T! o1 N7 m: w. B# h! g

7 @4 `( w9 g- h6 Q/ [
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

0 G6 m' Q0 A2 o: c下载成功后将开发板重新上电,可以看到开发板上的LED开始闪烁,IAR的Debug log窗口也有信息展示:
" U; z3 ^# C) Q( M
; `5 D, g# G1 u5 w* V; b! l! J
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

( ?+ X* f( |$ p4 R6 O% L( F5 b7.3   使用IAR调试和下载程序设置(STLINK)
8 D" c, n/ @" N" L0 h& b& I调试下载STM32H7,请将STLINK固件升级到最新版,关于固件升级和驱动安装等相关文件已经在本教程第2章的2.6章节有说明。
( _0 H: }7 ~' w) z& f& L4 e3 _2 a9 L. V8 M& q" X" f
在上个章节里面,我们已经将Options对话框里面大部分设置选项都做了说明,本章节主要是调试下载的设置。
& l4 D- L% T0 l  W3 k+ o% ~9 `+ ~& X5 ?! r% X! ]# A
7.3.1      开发板和STLINK的接线图: V& Z3 B% X# G$ u; K
开发板接上STLINK的效果图如下:6 W* a1 l1 v+ T# G1 S
; t* {' v7 _0 B$ w7 a
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

3 f0 P9 A- e. V" |1 e$ i* L1 i如果是下面这种STLINK,需要接上转接板:
2 e5 z. T( n! b
) F8 C. E9 ~. O1 f
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

3 T* }: H! E' O4 z3 c
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
0 V& _  y8 m  l
7.3.2      设置Options里面的Debug选项
; _7 r+ k9 k9 {9 `5 vDebug选项主要用调试:6 L$ T) a4 A  ]  Y: z# h7 H& \" w
3 B5 K) C: @  f  ]5 ~+ p/ Q
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
! Y2 Y' g5 ?. E% d
7.3.3      设置Options里面的STLINK选项
$ D& T1 B/ u7 k+ m8 d  v注意,在Debugger选择里面选择了STLINK后,才可以设置此选项。Setup部分选择SWD接口,其它默认即可:
0 V# o4 H/ i6 M3 @# v0 R2 _  x, d& ^0 P3 i, M% E% U
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

/ e3 X* s- c. T- B1 h7.3.4      程序下载8 q% h1 Z7 Z9 {& H% ?
前两步设置好之后,STLINK插到电脑端并跟开发板连接好,将板子上电,就可以下载了。点击这里即可:; x4 D+ L6 {" h5 l8 [5 O* Y. Z
) M; M8 o3 Q% \8 u$ r% {! b
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
& `, f7 q0 a1 {
下载成功后将开发板重新上电,可以看到开发板上的LED开始闪烁,IAR的Debug log窗口也有信息展示。
. p, M) G) K+ l; r0 Z% ]) \& L( U" H
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
9 K/ b. u4 S- ~
7.4   IAR程序调试) u- X. s4 ~; I
JLINK或者STLINK设置完毕后,调试是一样的。; U- B; h- q% |% H/ i, T

6 t% O/ t$ L- i& z$ w  T7.4.1      全速运行和单步调试
( S* I9 n" I( D: E% X: F0 m# r; r点击如下按钮可以进入调试状态(下载程序到芯片同时开启调试):
# H* x3 ?" [& ?8 a: p, E& O
$ c8 n; u$ O- f; }1 w
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
+ l3 u/ ^" Z$ M+ n9 k
进入调试状态后的效果如下:
9 J+ i$ Q7 d/ A& F5 S: w1 r0 x0 L9 y6 \! ]: o; U
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
. V- h0 ]( S" c" J% R1 ?
首先要认识下这11个图标的含义(进入调试状态后,鼠标放在这几个图标上会有提示):
# J  {- @& V5 v, `1 _. c2 q7 J, a, T
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
7 Q; \( T. p# G/ u
  第1个图标是重新编译例程并进入调试状态。( h! I: n) i0 o+ M8 i* ]
  第2个图标是重新进入调试状态。4 v$ p8 V# p+ V/ c) I0 i
  第3个图标是停止调试。
) w+ L! r$ z2 Z" y0 q  y# ~1 W  第4个图标是Step Over(Step over the current step point),每次点击以函数为单位运行,不会进入函数内部。
; E% c% i- k# y' f6 E7 b, I8 n) f+ U! Q  第5个图标是Step Into(Step into the current step point),单步调试,每次点击运行一行代码,所以只要有子函数就会进入。
0 k: d2 I+ g) h  第6个图标是Step out(Step out of the current line),点击后退出当前运行的函数,执行下一个函数。+ l4 C$ Z+ O! d0 d! I# t! e
  第7个图标是Next Statement(Step to the next statement),进入下一个状态,跟第4个图标功能差不多。+ D8 A" _) ^, ?  k, B( G- y
  第8个图标是Run to Cursor(Execute to the current cursor position),直接运行到用户设置的行,设置方法比较简单,用户仅需在那行使用鼠标左键点击一下,可以看到前面有光标即可(注意,程序不能倒着执行,也就是能往回设置)4 _) F5 }. d  F6 C; B* |: S' K

1 m! p- x7 T6 K  L$ y
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

! z" F* p0 H* D8 R: [然后点击此图标即可,可以看到前面多了一个绿色的小箭头,说明已经运行到此行* P, u! \# [: c

  G% T8 }1 ?+ }
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
& n& |# G  Z9 @9 W9 n+ \  ~
  第9个图标是全速运行。
# q+ V$ S3 f' F. m- V7 A  第10个图标是用于暂停全速运行。2 {$ B1 A: ~1 o" b
  第11个图标是复位调试,重新回到main函数开始执行。
$ f! q" _" x# P0 h. j7 b* C& D  S9 s; P1 d! V( b; }& S; I, p5 ?
$ W- E, I# [2 x) t3 b2 S3 X5 i3 t
前面几个图标的功能,大家多测试几次就熟练了。5 X# O8 e5 \7 y( U+ p

$ n: d9 o! F2 ^5 z" x2 R7.4.2      外设寄存器的查看
6 X% c  c" I0 m9 f初次使用IAR8的话,容易出现找不到在哪里查看寄存器的问题,首先需要点击这里View ->Register* M/ t; D" U$ V: Q0 H

5 U3 g+ J7 T1 r  Z' K->Register 1(共提供了四个register窗口,打开那个都行,要查看多个外设时,可以同时打开多个窗口查看):9 b* S+ R3 n: v* X& c3 V4 {8 T

8 D0 m. u) p/ g% `8 K: m" |$ M' V
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

, F/ {9 ]6 j% G# x给出的都是CPU寄存器:
) A3 q9 Y( d' W" z$ [- d3 P/ Z( C' x. w* u
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

, A% q+ d4 u& E* D5 V这个并不是我们想要的,还有继续下一步,在红色的方框区域右击:1 @3 D- A$ U+ V8 I6 {

' n/ S% N- f  |
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
+ K, F; w: S7 @( E
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
; b7 }9 ]0 ^& B* }5 ?6 R
比如查看DAC:& L( r7 S% D# l8 g0 r$ `
: r) i+ k, t2 m4 c
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
: f! O8 F* k; `7 X* s( d# n; w$ P. v
7.4.3      全局变量的查看
8 w5 i3 N& o1 P! w9 q针对全局变量,IAR提供了专门提供了Watch1, Watch2,Watch3和Watch4窗口,每个窗口可以添加很多变量。从菜单View ->Watch进行添加:+ M2 q6 M2 h; t1 t

/ j* ], A! A2 f+ M6 G) p- K
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
: R* r% p5 o# [0 P: N4 }6 O; v. E. D
比如定义了一个全局的32位变量count,用户可以直接在Watch1窗口里面输入此变量:3 f, C5 _0 }/ N: R" d, G" A$ |( Z

' l% u! M; |1 G' @# F
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
3 h) i7 x' l, S% L0 k
也可以在源文件里面,鼠标右击此变量进行添加。调试过程中,这些窗口里面添加的变量是会更新的。但是全速运行状态,这些变量就不会更新,为了解决这个问题,IAR有一个Live Watch可以在全速运行状态查看变化:; }: \% Y* O; U% T
" o7 Z: e2 ]7 `; T, E
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
5 e# u2 U7 X% h9 I& s4 F' C
用户可以直接在Live Watch窗口里面输入变量查看,如果程序里面做了一个简单的加法计数,就可以在全速调试状态查看此变量的动态变化:/ x! J0 ^. Z0 w# o0 J7 i  I

' b* P' k/ Y  ^* z

" q% ^3 e  l. y( d" ^8 |7.4.4      局部变量的查看
0 [  `. d. c/ G8 [针对局部变量,IAR专门提供了一个栈窗口,用于查看函数中各种局部变量,这个不需要用户添加,IAR会自动添加。从菜单View ->Locals进行添加窗口:
4 b  |0 h; G* g" ]4 p/ C' W; I& X. b4 i3 G1 d
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
7 k/ y5 p' a! k
局部变量需要进入到那个函数里面才可以查看,这点要特别注意,因为局部变量是来自栈空间的,进入函数申请栈空间,函数退出后,栈空间就会被释放掉。比如main函数里面一个num局部变量
2 o/ l7 {# B+ e% Q5 _$ V; u4 Y6 D
$ e4 ]7 W* @( ~/ r8 M
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
+ y1 Y5 Y3 T2 J
7.4.5      Flash区或者RAM区的查看1 E) f: T& @0 X" u: \
如果要查看Flash区或者RAM区的内容,IAR提供了4个Memory窗口。从菜单View ->Memory进行添加:& {8 e1 n$ ~4 I: U" `3 x( W

3 A  J5 I* G" e# R" Y
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
# V2 k: }5 }& `$ \1 G
比如要查看0x2000 0000地址开始的内容,直接输入即可,这个地址是STM32H7的DTCM首地址
0 S% f6 F+ J; x
: @' F- p7 D% F4 Q* N
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
* V. I0 l1 _& {
7.4.6      断点调试- Z. o' x& K) @& ?- c
断点调试比较重要,进入调整状态后,如果大家想让程序在指定的位置停止运行,可以添加断点,通过这个小红点来添加(注意,取消断点也是用的这个图标)。
, S' ?( o) G7 H' W" N5 }8 O. }# s8 M: P4 i: ~
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

4 Z" S7 I3 ]( a; m2 h比如想在79行添加断点。6 c+ N# k* ~% m/ o) R4 h

% x( W. H7 q$ t6 x" p2 x3 E8 P* z
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
0 |' O& D1 M% o& h
用户仅需在那行使用鼠标左键点击一下,然后单击断点图标即可,断点设置好的效果如下:
- w" t  O4 w. P
7 \. l2 T/ O( C9 j' c8 `# b5 z
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

2 U9 ?( x/ t2 X* q, l7 w0 V9 p, d: s然后点击全速运行,如果程序有执行到这个地方,就会停在这里。可以看到绿色小箭头也显示在左侧了,说明程序执行到这个地方了(此时还没有执行该语句):6 `8 Z" h9 e  Z9 s- L1 `
  d+ @* o. H- _# b3 X5 f
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
8 Y* I$ G6 e8 N3 M1 f3 |% m
7.4.7      动态更新频率设置
* ?$ r( m4 W( S1 g1 r! tIAR有个周期性更新频率设置选项,菜单Tools->Options:" f6 ^: S( y' F& t8 C' w6 `, ^' D
  n2 ?) L3 b7 p6 y4 T  C
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

& y6 Y; r& L1 H5 i  H单位都是毫秒,最小1ms:; h9 _4 o- H. l/ h% ^% i+ M

4 Y$ y  q6 r* h; D3 E! _& m
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png

2 c) L; k' {9 o/ i  a7.5   总结
. ^) Q: {5 o5 Y6 ~  Y对于初学者来说,务必要实际动手操作一遍。特别是调试方法,要熟练掌握,因为以后工程代码调试时,用到的最多。
) F, ?9 A' }/ c% C% r7 @
1 [7 m0 \( F4 G4 I. d6 C& J  Z2 d! U" R$ P1 c1 Q

; o- x0 W' l) N: v! z5 g" q# u. Y6 j, S  L- S
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDQvMTM3OTEwNy0yMDE5.png
赞 收藏 评论0 发布时间:2021-10-29 22:14

举报

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