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

STM32分享笔记之新建工程模板下载与调试

[复制链接]
STMCU小助手 发布时间:2023-3-10 11:53
前言
' e2 V& K" G/ u$ B4 o/ _  B该文档主要讲解内容有:
* H9 X2 Y+ L# b8 d2 h在Keil环境下新建工程——基于寄存器版本& L, R% \! J2 f5 M. G2 G; e& {
程序下载方法1——ISP串口下载" T8 ^8 k2 Q3 S- D1 x
程序下载方法2——JLINK程序下载" s1 s6 w) T" \4 A) H8 ^
JLINK在线调试+软件调试方法
0 K; S! Z' d5 v# P$ w3 a; n
一、新建工程
9 c( I$ `! s) u; O. C- E% S: I& u0 n建立存放工程的文件夹:包含三部分
  \$ p  p0 M5 m1 T& R% P  Y& |! Z. |5 M! [7 X
4ca8dcc1db5a4f09aa93eb5d3c185203.png # ]- n2 Z( \2 ^2 M7 Y. t
* b2 e9 I" N+ ?, d( j% W
打开keil软件(MDK5),点击新建工程:
, Q8 U: g/ Q6 h5 P5 x5 q7 Q. X
# W* }0 Q+ t/ _1 @
12effd611a0a4ef99a3b39d061f16160.png
' e8 R' y: q1 E' \+ l
, i$ f5 [5 N& L3 Q- t% G保存新建工程
/ ~, F. h: w% V. h" p! \# C$ \+ P! K找到刚才建立的工程文件种的USER文件,选中并保存:
$ l& l/ f; N/ O7 y: `7 A  E' F; C" V9 }2 ?
eabeefa690c944fe9400ca6ecfeb7184.png
; b  i' Q8 G0 q* F7 F7 u8 d8 Z+ ]" X7 A& n
选择芯片型号- |8 G2 Y9 ~. J4 t
这里本人使用的信号型号为:STM32F407ZGT6,找到点击ok选择即可。
' ?7 K$ f8 T* r$ x! a, A$ c. V3 C- H
2 D8 M/ Z& d9 c7 B" f( B
ec1143c365b34f01bebee42a09ec77d2.png
/ a2 ^9 @1 l4 D

$ ~7 l# |& k9 m/ T6 p$ e 添加功能组件6 D' W: e: x/ P
这里会提示你是否添加功能组件,由于这里是建立工程,先不需要添加直接关闭即可。
; V1 b0 u+ i) P8 Q# S2 Y9 l- Y
0 R4 K4 H& l( t5 r8 L
a65b28b85da842ae9b5ee8fe563c98ee.png
2 V4 Q, R6 i) Z9 c) t( a) F) y

0 \0 a  t3 {6 |0 _' T& \4 p建立好的工程目录
5 X/ _* F; r: p" z7 a$ L+ r; c; _( O% q
1c2a846f667e47d08abc7d55849ab81f.png
  U0 @- U5 I. C7 k. t$ w' A: t, S8 }( k2 f, `
4 I- B6 P  z/ U# d5 |1 f/ ~: O
启动文件设置
5 o5 N. E: n: e: H启动代码是一段和硬件相关的汇编代码,主要作用:1、堆栈(SP)初始化;2、初始化程序计数器(PC);3、设置向量表异常事件的入口地址;4、调用函数main函数。; K2 X" b0 M" S

' z9 D; r% [' L5 t) MST公司对于STM32F40X和STM32F41X系列统一使用:startup_stm32f40_41xxx.s启动文件。+ [- |: y; o$ t& s! G
# o  k. x3 Y  t% D! e7 \. x" _8 w
由于使用STM32F407ZGT6开发板因此上述启动文件正常使用,但是需要对启动文件做一下修改,这里将寄存器版本代码用不到的代码屏蔽掉,主要是Reset_Handler函数修改。( F% L" {2 P5 @3 ^4 L1 [7 S: o  S8 e
  1. Reset_Handler PROC
    * Z( w5 t' L9 S, W. k
  2. EXPORT Reset_Handler [WEAK]
    6 a4 l/ L% ?' y
  3. ;IMPORT SystemInit ;寄存器代码,不需要在这里调用 SystemInit 函数, 7 k" K$ T: z" r- A
  4.                     ;故屏蔽掉,库函数版本代码,可以留下6 i' }7 n/ P# _- l. c' l
  5.                     ;不过需要在外部实现 SystemInit 函数,否则会报错.3 @" h$ i) b* u$ |9 _+ j
  6. IMPORT __main  v! u  H' e& P6 H. U
  7.          LDR R0, =0xE000ED88     ;使能浮点运算 CP10,CP113 L6 o& w3 e- i! C4 a9 D
  8.          LDR R1,[R0]
    6 X+ c# }- U: a( z
  9.          ORR R1,R1,#(0xF << 20)6 ?. c6 n! C9 Y& v" k
  10.          STR R1,[R0]( B% G5 `( L: {! S  H; Y5 w4 G
  11.          ;LDR R0, =SystemInit    ;寄存器代码,未用到,屏蔽
    : v# a& r8 H# l( k# i1 m5 _- x4 ]
  12.          ;BLX R0                 ;寄存器代码,未用到,屏蔽6 o5 J; p/ y  m9 O
  13.          LDR R0, =__main% ~6 J* c# j5 N6 v: N) V( G
  14.          BX R0
    : h. j. E. u8 w# _$ K
  15. ENDP
复制代码
6 l0 S9 w* g2 @, d1 B; Q
上述代码:$ y' \/ ?8 |9 ^. J0 ?4 ^, ~
1、开启了STM32F4硬件FPU的代码,以使能浮点运算单元。其中0xE000ED88就是协处理器控制寄存器(CPACR),该寄存器第20~23位用来控制是否支持浮点运算,这里全部设置为1。
9 B) |: e, g" g$ p2、由于使用的是寄存器版本的代码,这里屏蔽了SystemInit函数。9 Z4 J6 ?/ E1 ?7 s3 s- `

& W, g5 S- g5 R5 ~, g9 I0 O; i由于使能了FPU,在MDK里也需要对FPU进行设置,否则代码无法运行,设置方式:打开Options for Target,如图进行设置
  o1 L( x$ D$ j( n

5 O2 C; E/ ~  y  R2 R5 U由于开发板上晶振为8MHz所以这里将其改为8 - |# Q& C  U; s( x, M
1 a$ s+ r* d0 u4 a: k
da55b094c40e495b8cd9c9ab53f0580b.png
1 [+ A% i( g$ ]! G9 `
5 `+ |. l5 p6 ^) z/ W, I

& F$ N/ _8 q4 q% Z; e$ C- ` 添加启动文件
3 y: _. v+ T' F1 x: X7 C! I将启动文件startup_stm32f40_41xxx.s启动文件拷贝到刚刚新建立的USER文件里面。' j9 ~" E8 P. t

5 L; L3 I  `- x8 o* }
f4e9a947f0814eb4a045a6dc529e920a.png 1 V. B0 Y8 w$ k5 G6 X) d5 z3 D
$ |6 M8 K3 r" m2 O7 X+ h: Z
编译启动代码
& o3 Z% a- v& A- l, c! S1、目标编译,只编译打开的文件;2、全部编译,编译整个工程文件(事件较长) 0 u! K$ P& q& j; ?2 r& \& b8 U

* T6 o8 Y: i7 r  Q' D) B
1d4f078950b345178e063d28de26f8c7.png 0 [  \9 n7 L. {8 g, U

( G, R: m5 i- W: A, o# w2 i 24d34e8de9b047f4ac22973d9c4ec975.png
. ^% g. i5 j4 F! u
8 b6 Y. M, @. Z6 S% d
添加系统代码
* R4 l0 o: g- c& d$ d3 g! S 在USER文件种MDK5会自动生成2个文件,用来存放MDK编译过程中产生的文件,在正点原子中会建立OBJ 文件夹单独存放,这里我们不对其进行调整,仅给出调整方式。: r) @( \! o$ i1 v" {
; S5 q& |3 `, `
12b09d4a274b46619278a41c78cfd256.png 7 t; A1 {; p. G8 R" x# x
+ `8 J! `1 H/ b2 e, a
de19110a784e4b02a1c1f19225c3885b.png
' d( }: v+ ?' k' R# P6 Z, r' |
$ `0 Z1 }/ X; S) |
ec9f5c99cbbd43e7bcc9ac8e1532b298.png * g0 c* P( F; V3 V: Z" w, J# {

8 U  `$ `8 t0 d# @+ w将系统代码(即 SYSTEM 文件夹,该文件夹由 ALIENTEK 提供,可以在光盘任何一个实例的工程目录下找到,不过不要拷贝错了!不要把库函数代码的系统文件夹拷贝到寄存器代码里面用,反之亦然!这些代码在任何 STM32F40x/STM32F41x 的芯片上都是通用的,可以用于快速构建自己的工程,后面会有详细介绍)
* W( I! b3 D3 O' w8 |' T  T) g" H- y! O9 m) `
fc6f43370f5c4bd9aafd54f52321a8b7.png % {4 g3 g. I6 k, }+ L

7 P: W$ O4 ]" I7 r. b/ Y

# ~7 \4 i+ @2 z2 ^& z8 g, _MDK中添加相关文件) u. X/ r0 U8 r- X' D

. T3 e% j. I' p7 {& i, o
e88643c2ce1e42a4b0cf283fefb6de5c.png % `. g0 ?7 d4 @2 Z/ t+ n) m  s( L

8 A1 g: F: p5 g7 v, {还需要再USER目录下添加main函数文件,test.c文件。  E. T, n. X* ~/ w( T  `

1 f% `4 l& X8 v# K- X& V8 Z
301115d0d87f4b81b31c485b3b6fd004.png 5 H/ o  G9 G# \. w

% R3 C" B2 [. Q  t$ @/ A建立完成后双击1,可以添加建立的test.c文件。 & I% H8 @; U; x) W
+ a& N% {4 f# ^# C. V1 W
364b9022abba4d74bef1b596c2b7d3c8.png
5 O. n$ z, a: L: I2 \
8 J* C; w, c. k" s  r
再编写test.c文件后会发现有错误,这是由于还没有添加.c的头文件.h文件
. S' l" l# j' O/ d( `# Q; O4 S4 @" r/ T# \# L5 v# r5 k) |  d
816022d930184dcea719174246c172fb.png : i2 P9 K: I% A3 Q

9 }3 a6 e+ T+ P7 X/ x2 u
$ \9 R. z: o8 B+ G
添加.h文件
% D* b, r# F( E3 w4 I6 x5 N' w0 @图中 1 处设置的 STM32F40_41xxx 宏,是为了兼容低版本的 MDK(比 如 MDK4/MDK3 等)才添加的, MDK5 在你选择器件的时候,就会内部定义这个宏,因此在 MDK5 下面,这里不设置也是可以的。但是为了兼容低版本的 MDK,我们还是将这个宏添加进来。
/ o& z9 d+ k- ^; I( _, t8 G图中 2 处是编译器优化选项,有 -O0~-O3 四种选择( default 则是 -O2),值越大,优化效果越强,但是仿真调试效果越差。这里我们选择 -O0 优化,以得到最好的调试效果,方便开发代码,在代码调试结束后,大家可以选择 -O2 之类的优化,得到更好的性能和更少的代码占用量。4 k6 F7 H0 z1 h; E# v
图中 3 处,One ELF Section per Function 主要是用来对冗余函数的优化。通过这个选项,可以在最后生成的二进制文件中将冗余函数排除掉,以便最大程度地优化最后生成的二进制代码,所以,我们一般勾选上这个,这样可以减少整个程序的代码量。
( Y  q" k. ~4 |$ ?2 l: L然后在 Include Paths 处(4 处),点击 5 处的按钮。在弹出的对话框中加入 SYSTEM 文件夹下的 3 个文件夹名字,把这几个路径都加进去(此操作即加入编译器的头文件包含路径,后面会经常用到)9 h! ^2 w9 n5 u

* |, {% b( W  D; F
f237b9718509465588a7341c8bc1016f.png - v. ]2 z$ s1 ^2 Z8 w1 W

) A- d$ W/ E) @( z/ `
" G  g" M4 F1 F) ^' j
添加完成后重新进行代码编译,如果代码编译出现错误提示:..\SYSTEM\usart\usart.c(38): error:  #260-D: explicit type is missing ("int" assumed)
! G/ q( f% z) G: H% m" \
( [1 b% X1 K. X" q
双击打开定位到38行,这里由于形参为int,且没有返回值,所以添加一个void即可。" T: r) ]! H; ^3 W' D

( v1 Q) @+ t  k3 A; y
615c1bcb055f441ebf638674a6c806d5.png
0 X' U% c, w; S8 ]7 k
# l8 N" ]* L1 J+ H

, |* m; ]$ B* N, k; \二、ISP串口程序下载( q/ Q; t* C& D6 m; Z* Q+ n9 }1 v
再使用串口下载之前需要再电脑上安装串口驱动:CH340G,链接后任务管理可进行查看。2 q! k7 C- P9 x1 s/ l1 r; k7 [* O, Z8 \
! k: j; @0 g$ w; t) ]; v- H& S
82e5ded19d204755a477783ce033f21b.png
2 x: y/ e* R8 w
# }5 A. i8 s- ^' W( ?; j

$ T5 ~4 L0 i8 T, f8 U8 w/ E8 c在安装好USB串口驱动后,打开串口下载软件FlyMcu,该软件是 mcuisp 的升级版本(flymcu 新增对 STM32F4 的支持),由 ALIENTEK提供部分赞助,mcuisp 作者开发,该软件可以在 www.mcuisp.com 免费下载。$ {' b% h! X2 b

% S! e" a& L. U7 [0 m
3385fb5ef83444e88693a42e875c1673.png
- }, @1 j8 Y+ @) e
7 g' R4 ?. i" ?  D串口的一建下载功能
5 c; e  f- }8 k- `2 [  D由于使用传统串口方式下载需要调整BOOT[1:0]的状态,比较繁琐。所以采用了一键下载电路。
/ I& T' l- G; n; m0 |
% f$ u3 y' k( i3 t一键下载电路利用了串口的DTR和RTS信号,分别控制STM32的复位和B0,配合串口上位机软件FlyMcu,设置:DTR的低电平复位,RTS高电平进入BootLoader,这样,B0和STM32的复位,完全可以由下载软件自动控制,从而实现一键下载。
" D7 B# F5 z; z" E. w6 c# I4 I  _$ y% R, \3 d
设置在编译前设置输出.hex文件
& h! q: b% s; z; k1 ^  {0 {# z9 Y' Y& r
44f08d1956a24a4abaddaf6877759c62.png
' \1 l0 c9 P) G( A% n5 v1 ~' ^6 \
重新编译后在Objects文件中就会生成机器二进制代码文件.hex
+ U, Z; l, T: ~" \& _
  y" Q' y- Q8 E" V
417a6b2c942a4fb59205c6cdbff9e93c.png
; w5 e* I, J& D8 h4 C; ~' ~
* o1 Y% @* G, I5 J2 i8 H
d62aaddf952547639bd6970338bac2d6.png . `" D6 L. i9 M" {# z
. v/ y9 {/ x0 h5 x& Q, `
在串口助手中添加工程的.hex文件,和设置窗口下载: n) K: \* g* q

0 N7 u" i; m  M1 |- I! K( ?5 o
6d50992ec67f4bc3a84f8e495063f163.png
! h5 D3 q8 }4 ]6 \/ A3 J0 U9 m# a4 n; {, U( e& H2 R- M
# b2 h9 {2 h( P" Y  U
设置编程后执行,否则需要按一下复位键才能重新执行代码。
$ |5 j; ]! L' B  _# c3 \; a" X编程前重装文件,该选项也比较有用,当选中该选项之后, flymcu 会在每次编程之前,将
) m  D  C' x* Thex 文件重新装载一遍,这对于代码调试的时候是比较有用的。 特别提醒: 不要选择使用 RamIsp ,否则,可能没法正常下载。: _3 a" t3 f' n! m, E6 \! Y

" H4 Q3 z7 t9 \, z4 W8 v: C
点击开始编程" _7 H; l3 x$ X8 P- K

6 U: A- |8 s, F5 C
f11342bd23b044b78486eab04a54145c.png $ m9 t! Y( f& Z8 T1 `& t4 d
3 M7 W$ q' c! o2 `) m6 H+ Z
打开串口助手发现移植接受到数据
9 I' V# q3 ~6 C1 f: U说明程序已经下载到板卡内,且正常运行
% R) m' [$ I5 V& K5 V; ~' [8 l* @( K* x5 \* A  E' z
cf65d417529740479405bb1344ff528e.png + p% i8 h; F- p( S
1 o' j; d- o4 n, k1 Z
+ C3 F9 u+ b  k# L8 c
三、LINK程序下载与在线调试
7 r- x6 Y: R) n# V3.1 JTAG/SWD调试原理简析
& a7 o1 C3 S9 O; \+ W! ~
* }; k3 q3 }$ Z- D# t
874dcea7cb0b4ea0bf34863f59d981d4.png
3 ^8 O1 H# F5 U) B: s
! X8 B8 E) R5 V, c8 ~6 ^. _8 x2 g) k( r
000f5763a6934ea3b2509d208280f20b.png
, ?8 G# J3 e1 \' [0 Y! \) Y! v+ z' G
5100db7c88b540b798d1d8eb2890e728.png
, n% q8 j6 R# G7 t
% r$ X2 ?( Q. Z4 I9 D8 Y
复位后JTAG对应的IO引脚默认为JTAG模式,有时候配置相应的引脚无法使用GPIO功能,PB3/4
- b3 F  C2 K1 G1 m+ e/ x4 ^* V: @* ]/ s; Y$ O" [
b4c6d13410164f8e8a4a12f15b008460.png   ?9 f8 j- u8 t( h: f* C* V8 h
3 D- _" [% R7 F' s
! Z# U9 s& A! M! w" ]9 h+ @  q
3.2 硬件连接
9 R0 F$ r6 K  Y: F
5 A+ p7 Q1 B0 z" l- u
551ae3f5a94048c5bc21ebdfd85a864d.png
( n0 P- t; O6 l. f; g# o1 ?! f4 _3 D4 |6 Q
f5478c375ebf4219bed8eec28c7db7fb.png ) P* ]9 G; m" m5 I/ B: [
! o- `( z6 Z3 w' d- H
3.3 JTAG/SWD模式配置8 k7 M8 l4 ~% A+ @
当用到PB3/4的GPIO功能是需要对其模式进行重新设置,在文件stm32f4xx_gpio.c中,void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF);
. t! l. [, J8 z. W, Z" J" z5 P: @. O
默认复位状态,这些引脚都是JTAG/SWD调试功能开启。 如果需要关闭,只需要相应的IO口设置为相应模式。$ x. B2 H4 ]2 U9 u# h

3 K4 G7 D7 @6 i
565c6415a9fc458193aa193da3b5637c.png ) }3 p( i" K/ l5 S/ D: O5 j: k/ [
, Y3 v* o" r: e
3.4 程序下载
. J2 c0 Z2 {) b7 q4 P) w1 p由于串口只能实现下载程序功能,而不能实现跟踪调试,而调试工具,JLINK/ULINK/STLNK等实现程序的跟踪。SWD下载调试仅需要占用两条IO口
7 h$ F- H1 Z; Y, n/ g0 {
- {, |/ f" Z* W2 k8 Y4 f本人使用的是STLINK进行在线调试。
; Y& G3 q, f3 m" T! @. @% ]/ M
) S3 o) V3 [) f
调整Options for Target中的Debug选项卡; {5 ]- b' X' J* t8 E! {

' |$ p0 n3 |! C- G, m
b1730eb0c9594bb0b5f29be354d3d1d2.png ; \. _4 ~; q% @: |

5 v# }3 f; _) n& L% O0 S( K上图中我们还勾选了 Run to main(),该选项选中后,只要点击仿真就会直接运行到 main 函数,如果没选择这个选项,则会先执行 startup_stm32f40_41xxx.s 文件的 Reset_Handler,再跳到main 函数。& C: Q/ f" V8 f( A

9 D% O5 e" W& G& B2 @* _ 点击Setting设置+ T4 T, [: x, G1 |: ]( _

* d5 G. I) s" u- U% k! J
92f1b6edfb7e4f529c6a0964121fdde7.png
& S1 w2 [6 J) W' q5 P8 A6 n3 g
: g) X6 n) ?) t; D, i" g使用SWD接口方式,右边已经显示检查到SWDIO接口$ h, ~- ~5 i: l- h' }' I
$ [/ n6 E) e7 k) t8 q
下载设置0 }- h. X# W+ d7 v- f

( M" z0 J3 A4 x1 F" ?. x: ]
099a285a5f294ca597dd097fb9559988.png
+ }0 m# N# A0 L: b0 B
5 }7 W" |* G) J8 {/ Z2 {
代码程序的下载8 M! G* b  W4 G% o
重新编译后直接点击下载按钮就可以了
& B3 F+ X0 _; m" ^1 f. Z9 `: l
& K4 `, J, F+ ~+ e) O8 ]
fda8ebe6017948beba48b49665aab9b8.png
: _0 a4 A9 s8 F% n, c/ e

1 J- ?- D/ k3 @" h下载完成 ( G( @- j/ S- G- A- y( `/ e0 h- |  {+ w7 [
# \, g" C/ j) n# t' c& Z# e
b68ac43834f44a66a907617d954657f1.png
5 ]' E6 L  G9 P/ `3.2 在线调试
7 P# ^* x, {, v# U. QMCU内部已经被下入程序,接下来可以点击(开始/暂停仿真按钮)进行在线仿真。,点击  r# C1 t, {& O. Z. P
后出现仿真界面,其中上面由调试的工具条:& J2 f: V* z( M: l

) N1 A6 u  T1 n) G
496c6dfeaa20446c9f39390fb06c67fd.png $ B! e9 o/ P5 s; x" F0 A% Y8 J

* a6 S- j: B0 L2 t' W2 L( H复位:其功能等同于硬件上按复位按钮。相当于实现了一次硬复位。按下该按钮之后,代码会重新从头开始执行。
5 C" O7 m( W3 S! @执行到断点处:该按钮用来快速执行到断点处,有时候你并不需要观看每步是怎么执行的,而是想快速的执行到程序的某个地方看结果,这个按钮就可以实现这样的功能,前提是你在查看的地方设置了断点。
) ^, K. i% m% R停止运行:此按钮在程序一直执行的时候会变为有效,通过按该按钮,就可以使程序停止下来,进入到单步调试状态。
1 c* ^8 `$ Z  _# q6 ]执行进去:该按钮用来实现执行到某个函数里面去的功能,在没有函数的情况下,是等同于执行过去按钮的。6 k* q2 R& n6 \$ x2 ?
执行过去:在碰到有函数的地方,通过该按钮就可以单步执行过这个函数,而不进入这个函数单步执行。
! m! l; K" [) [* K* J执行出去:该按钮是在进入了函数单步调试的时候,有时候你可能不必再执行该函数的剩余部分了,通过该按钮就直接一步执行完函数余下的部分,并跳出函数,回到函数被调用的位置。) u0 W; C/ R  w2 [
执行到光标处:该按钮可以迅速的使程序运行到光标处,其实是挺像执行到断点处按钮功能,但是两者是有区别的,断点可以有多个,但是光标所在处只有一个。) ~. Q3 W- q/ c9 K: C
汇编窗口:通过该按钮,就可以查看汇编代码,这对分析程序很有用。( P/ S$ b- r" a5 \# e& S$ }
堆栈局部变量窗口:通过该按钮,显示 Call Stack+Locals 窗口,显示当前函数的局部变量及其值,方便查看。: f3 m% X$ w0 ?: ?+ Y
观察窗口:MDK5 提供 2 个观察窗口(下拉选择),该按钮按下,会弹出一个显示变量的窗口,输入你所想要观察的变量/表达式,即可查看其值,是很常用的一个调试窗口。. B8 X$ J6 V: h1 a7 a% G6 {6 s: B/ S
内存查看窗口:MDK5 提供 4 个内存查看窗口(下拉选择),该按钮按下,会弹出一个内存查看窗口,可以在里面输入你要查看的内存地址,然后观察这一片内存的变化情况。是很常用的一个调试窗口
0 ~' N+ Y! E( r2 i  Q串口打印窗口:MDK5 提供 4 个串口打印窗口(下拉选择),该按钮按下,会弹出一个类似串口调试助手界面的窗口,用来显示从串口打印出来的内容。
9 ?6 a. R3 n8 h4 P- Q- I! z# |* ?  F! a逻辑分析窗口:该图标下面有 3 个选项(下拉选择),我们一般用第一个,也就是逻辑分析窗口(Logic Analyzer),点击即可调出该窗口,通过 SETUP 按钮新建一些 IO 口,就可以观察这些 IO 口的电平变化情况,以多种形式显示出来,比较直观。
. b) K: e8 f+ r2 H0 W" {系统查看窗口:该按钮可以提供各种外设寄存器的查看窗口(通过下拉选择),选择对应外设,即可调出该外设的相关寄存器表,并显示这些寄存器的值,方便查看设置的是否正确。7 ~7 d/ O" _& a& D
! x" j* Y5 m0 Y; D: ^3 A) a  C' D7 E
  Q+ m( G/ s5 R. E
现在先不忙着往下执行,点击菜单栏的 Peripherals  System Viewer  USART  USART1 。
' k& }% O; h( h- l3 T' F可以看到,有很多外设可以查看,这里我们查看的是串口 1 的情况。如图 4.2.9 所示:+ j& J9 s/ x+ K+ b: o

2 k7 ~; h2 M, g8 j9 T' C0 F* T
fc0a0a32afc641d69cb45b239d11598e.png
/ L8 \+ f8 {- f( r7 G& n& k% c7 V) ?& s7 @. L3 O
这里先点击复位按钮,然后打一个断点,且点击将程序执行到该断点处。就会发现相关的区域就会出现相应的变化。2 u; {) z6 z- K: u( h* Q" j

3 j8 c5 @- K  L( a1 X# T
f44ac1b23e604f7c82046ebb6b811eec.png
" H$ T* X9 _! G

' ]+ |! F& E+ _ 该文档到这里就结束了主要讲了如何建立工程、下载程序和程序的在线调试" H  l7 m5 A4 W+ z; H. e
————————————————  D- _/ K8 m5 ~( D# q/ D3 b
版权声明:追逐者-桥
, B% V) ^  k2 m- K如有侵权请联系删除
$ V) D% p% L! w+ Y  P- h/ u* N
  G2 L7 O) O) K% T4 i
9 q9 Q$ |$ u. r2 e& u/ U' I* v9 F- |+ S  A" \) ]  X
75348a2fcd1243639c94fc5cfeb92937.png
收藏 评论0 发布时间:2023-3-10 11:53

举报

0个回答

所属标签

相似分享

官网相关资源

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