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

STM32L4系列三之程序下载与调试

[复制链接]
STMCU小助手 发布时间:2022-11-18 18:00
主要内容:
/ J# R8 Q% p6 T9 O( L1、STM32L4 程序下载并运行;
4 e7 O- q% x1 R$ W1 {2、STM32L4 在线调试。
& V$ I" f6 G- `8 S
8 T0 ]7 ^8 c( Y$ P) C, A一、STM32L4 程序下载
3 B& ?, g, e8 R9 g. r' c
ST LINK支持JTAG和SWD两种通信接口,同时STM32L475也支持JTAG和SWD。所以有 2 种方式用来下载代码,由于JTAG模式占用的 IO线比较多,且板载的ST LINK与 MCU(STM32L475VET6)通过 SWD 连接,所以选择 SWD 模式来给STM32L475下载代码。8 a- q8 \( d) D' i
首先,需要安装ST LINK 的驱动(这里不做过多介绍)。
; |4 w7 I- b5 V3 H) i. z; s6 q$ E. K安装ST LINK驱动后,只需一根Micro USB线将开发板的ST_LINK USB接口与电脑进行连接就可以了。3 g2 t5 M1 \! a* O
打开Keil MDK软件,单击Options for Target,在Debug栏选择仿真工具为ST-Link Debugger,如下图所示:
2 s% d- |8 u0 F% D7 j0 k 20201205214331650.jpg ! s; C+ R0 X: Z2 r

+ X6 j1 o/ j4 c, ?4 {上图中,勾选Run to main()的目的是:只要点击仿真就会直接运行到 main 函数,如果没选这个选项,则会先执行 startup_stm32l475xx.s 文件的Reset_Handler,再跳到 main函数。" Q* g: t6 n. S4 @5 x! M$ B2 t: ]
点击 Settings,设置ST LINK的参数,如下图所示:
1 D7 X" w0 ~+ c" T% n( b9 c+ s5 o- _3 E) `1 Z2 o2 C7 N
20201205214523803.jpg
' x! o% ]: k6 j6 w
" }0 a! |- d0 v使用ST LINK的 SW 模式调试(一定要选择SW模式!)Max Clock设置最大,即4Mhz。(如果USB 数据线比较差,可能会出问题,此时,可以通过降低这里的速率来试试。)单击OK,完成设置。" k6 d' a$ d  U( e: f
接下来,在Utilities选项卡里面设置下载时的目标编程器,如下图所示:
' I; d; k$ x+ e: ]+ s7 r6 Q. D, `. y4 L
20201205214900677.jpg
) d9 i% x' ?: U. E
, g1 h) w4 B/ O& p  d直接勾选 Use Debug Driver,即和调试一样,选择ST LINK来给目标器件的FLASH 编程,然后点击 Settings,设置如下图所示:
! l0 p  j4 b* K9 z/ M9 R0 ^7 c3 F- f  Y" S
20201205215015811.jpg
2 h  Q8 n. G# [$ |' p4 U
0 y. u1 D: U9 r4 }$ k# E0 CMDK5 会根据新建工程时选择的目标器件,自动设置 flash 算法。本例程使用STM32L475VET6,FLASH 容量为 512K 字节,所以 Programming Algorithm 里面默认会有512K型号的STM32L4xx_512KB FLASH 算法。9 S& H" _+ w- T( Q, ]# p  j( A
注意:这里的512K flash算法,不仅针对512K容量的 STM32L475,对于小于 512K FLASH 的型号,也是采用这个flash算法。# j; M8 R" J& A& C" ^6 V
最后,选中Reset and Run选项,以实现在编程后自动运行,其他默认设置即可。
" b) ]. W  z+ F8 T
, C: R2 }  K/ O! |4 \回到IDE界面,编译一下工程。然后点击Download,就可以下载代码到 STM32L475上面了,如下图所示:  _6 b: V) }, _9 [6 r. S% n0 [, j
" b& s8 M& u1 L; X& ?9 P/ `
20201205215346356.jpg ) w1 ]4 g& x4 ?( N! s

) e# e9 b( P1 x( G: F& P6 M" ]" r, H下载完后,会自动运行刚刚下载的代码,接下来可以打开串口调试助手,验证是否收到了 STM32L475 串口发送出来的数据。5 v+ m  r. I4 {! M2 U0 M
由于开发板上的ST LINK也具有串口功能,程序下载和串口功能只需要一根线就可实现,如果电脑上没有安装STM32虚拟串口驱动,需要先安装驱动后电脑才能识别到串口。/ M% f! e" d- L, \7 b% k4 w% D' m

9 b9 t3 o' O2 A8 d本例程实验实现功能是不停地向PC发送递增数据,如下图所示:
; @( Z' T9 r. g* W
: l4 e" t; z# e" K 20201205221159642.jpg : `9 c/ K# [) V9 Y, T* n6 [- I
( I/ m6 N4 O  u8 s" H0 r
二、STM32L4 在线调试
( E1 x6 O  Y1 `6 r$ J2 M; Z用调试工具,如JLINK(注意:必须是JLINK V9或以上版本!)、ULINK、STLINK 等,可以实时跟踪程序,从而找到程序中的bug。以ST LINK为例,介绍如何选择SWD方式在线调试STM32L475。, J( I/ m+ c1 S0 c! v$ b
在MDK的IDE界面,编译工程。然后点击Start/Stop Debug Session按钮(如下图红圈所示),开始仿真:
- ~! V' H+ e' ~( ^* m; N5 ]' e; }' e& U
20201205221928817.jpg 1 E6 j+ k6 y$ i1 J& z

! o6 ~6 W' z; ?: T8 O: w* n( A因为之前勾选了 Run to main()选项,所以程序直接就运行到了 main 函数的入口处。 另外,此时 MDK 多出了一个 Debug工具条,其部分按钮的功能如下图所示:( O4 r) j* d* X: F+ u
8 i* G8 a  e, f% z2 r
20201205222253904.jpg
2 m4 a. u- V1 l7 V0 V- U% ~6 ~4 u, t1 h% n. S
1)复位:其功能等同于硬件上按复位按钮。相当于实现一次硬复位。按下该按钮之后,代码会重新从头开始执行;
3 e3 w7 X8 I. n- ?, F2)执行到断点处:用来快速执行到断点处,前是你在查看的地方设置了断点;
( o  o& V; h! S$ X6 k; m" G2 ]9 _3)停止运行:此按钮在程序一直执行的时候会变为有效,通过按该按钮,可使程序停止下来,进入单步调试状态;
" N. i" c, t4 G; D4)执行进去:用来实现执行到某个函数里面去的功能,在没有函数的情况下,是等同于执行过去按钮的;+ s' [# q/ s0 M7 X) K. p' o. I- Y
5)执行过去:在碰到有函数的地方,通过该按钮可单步执行过这个函数,而不进入这个函数单步执行;
* z7 K. b) q. j2 j4 Z  L9 q& e: b6)执行出去:在进入函数单步调试时,当不必再执行该函数的剩余部分,通过该按钮直接一步执行完函数余下的部分,并跳出函数;6 p% ]8 a9 Z* X5 e) X# x+ w
7)执行到光标处:可迅速使程序运行到光标处,类似执行到断点处功能,区别是:断点可有多个,但光标所在处只有一个;
" W: J+ [6 C9 }. ^2 J8)汇编窗口:查看汇编代码;* V9 C2 N7 E& r0 Q8 L% ~& m
9)堆栈局部变量窗口:显示 Call Stack+Locals 窗口,显示当前函数的局部变量及其值,方便查看。; Q- U' `2 C4 ~. U( G
10)观察窗口:该按钮按下,会弹出一个显示变量的窗口,输入想要观察的变量/表达式,即可查看其值;9 e3 U( O0 X0 S3 r$ e
11)内存查看窗口:该按钮按下,会弹出一个内存查看窗口,可在里面输入你要查看的内存地址,然后观察这一片内存的变化情况;
( B  }0 q8 z; v7 z, n12)串口打印窗口:该按钮按下,会弹出一个类似串口调试助手界面的窗口,用来显示从串口打印出来的内容;7 M+ w6 ~) G! f8 v* O9 W3 w# `; {
13)逻辑分析窗口:一般用逻辑分析窗口(Logic Analyzer),通过SETUP新建一些IO口,观察这些IO口的电平变化,以多种形式显示;
; o" Y3 ~! v; i  A; l14)系统查看窗口:提供各种外设寄存器的查看窗口,选择对应外设,即可调出该外设的相关寄存器表,并显示这些寄存器的值;
1 |) k% V+ I6 }4 Q. k& tDebug工具条上的其他按钮用的较少,这里就不介绍了。4 w  {3 m/ P* U
注意:串口打印窗口和逻辑分析窗口仅在软件仿真的时候可用,而 MDK5 对STM32L475 的软件仿真,基本上不支持,基本上这两个窗口用不着。但是对 STM32F1 的软件仿真,MDK5 是支持的,在 F1 开发的时候,可以用到。4 a" W! ?2 x/ K) B$ e5 P, l

" f( o' F1 m' E/ {6 k/ I% M5 B在仿真界面里面调出:堆栈局部变量窗口。如下图所示:5 g9 i4 _3 b3 E( X3 {( U  {2 ]) d; v
# Z' y% T8 t9 @- {$ Q* l" J* N
20201205223629603.jpg 3 U1 ~# F% C+ a& C

9 v2 h  Z. b5 @% [% |+ F把光标放到 main.c 的第33行左侧的灰色区域,按下鼠标左键,放置一个断点(红色的实心点,也可以通过鼠标右键弹出菜单来加入),再次单击则取消。然后点击,执行到该断点处,如下图所示:: P7 @* |8 g2 t# i* ]/ X- h
7 e8 k8 x! T2 ]* c# d0 d
20201205223922487.jpg
! D( x. n, a0 S* k/ Y+ B* u! t: K' c$ I* A( F% m; ~8 v
点击菜单栏的 Peripherals→System Viewer→USART→USART1。可看到有很多外设可以查看,这里查看串口 1 的情况,如下图所示:* B! X+ i, t+ G. n/ K: w
7 l2 y4 x2 ^6 H' H$ w
20201205224059638.jpg
8 V% Y/ {6 G* |  I- B# `- |) [0 P! g" G
单击 USART1 后会在 IDE 右侧出现一个如下图所示的界面:4 I! Y5 m$ n  r9 i) k) r
9 P" W3 ?* J# S; c9 v; S
20201205224239693.jpg - P* F, ^- W! B, i6 ]/ K* _
7 g" v, J. u/ k. f
上图是STM32的串口1的默认设置状态,可以看到所有与串口相关的寄存器全部显示出来。
" y6 g* c" V( M  f单击一下执行过去,执行完串口初始化函数,得到如下图所示的串口信息:
8 f/ n2 |4 j. j  @; U4 F* Q6 t' w7 K% X* Y7 A8 C! c1 L
20201205224616663.jpg
$ i8 c) [1 R# z  a3 w* s5 Q4 ^
9 _* c# D. J+ v2 L% I对比上面两张图,可以查看串口1的各个寄存器设置状态的变化,从而判断所写的代码是否有问题。
, a4 v) Y0 r3 v————————————————) c2 @$ p. `$ @
版权声明:天亮继续睡* _% v7 z7 A9 F+ }$ _
4 f: N; M( t( ]/ o' r& T5 t

3 F( f- `! O  ^
收藏 1 评论0 发布时间:2022-11-18 18:00

举报

0个回答

所属标签

相似分享

官网相关资源

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