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

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

[复制链接]
STMCU小助手 发布时间:2022-11-18 18:00
主要内容:
7 B: d2 W' \9 E$ U7 j7 d( z& `1、STM32L4 程序下载并运行;4 J: W9 K6 J+ h3 ~
2、STM32L4 在线调试。
4 f. O, [) }0 g8 h0 w7 [- ^% q! c$ X  W# I" K' \
一、STM32L4 程序下载

7 g1 j: y. @% H# C( TST LINK支持JTAG和SWD两种通信接口,同时STM32L475也支持JTAG和SWD。所以有 2 种方式用来下载代码,由于JTAG模式占用的 IO线比较多,且板载的ST LINK与 MCU(STM32L475VET6)通过 SWD 连接,所以选择 SWD 模式来给STM32L475下载代码。
2 R2 T; h1 ]# x6 D7 F1 w9 ~首先,需要安装ST LINK 的驱动(这里不做过多介绍)。
: M6 T! k# U1 m. Q* D  J. a) n安装ST LINK驱动后,只需一根Micro USB线将开发板的ST_LINK USB接口与电脑进行连接就可以了。
5 A9 g  X8 k, ^打开Keil MDK软件,单击Options for Target,在Debug栏选择仿真工具为ST-Link Debugger,如下图所示:0 @' X* l/ b8 s4 p6 T
20201205214331650.jpg
& Z9 W9 ?/ G- g
7 }0 y8 v1 v" M* _. f! z2 E2 o" A上图中,勾选Run to main()的目的是:只要点击仿真就会直接运行到 main 函数,如果没选这个选项,则会先执行 startup_stm32l475xx.s 文件的Reset_Handler,再跳到 main函数。
$ e7 _$ V/ k$ D7 m, W点击 Settings,设置ST LINK的参数,如下图所示:
) z/ G: A& o( X1 h
7 U! B3 g, s- A( i 20201205214523803.jpg 6 y1 B  @1 Y- W2 ^

3 d& \! `& `& j1 v7 X& j使用ST LINK的 SW 模式调试(一定要选择SW模式!)Max Clock设置最大,即4Mhz。(如果USB 数据线比较差,可能会出问题,此时,可以通过降低这里的速率来试试。)单击OK,完成设置。
$ s3 C& C# E8 }/ |( m接下来,在Utilities选项卡里面设置下载时的目标编程器,如下图所示:& N& Y# k. b8 R' m! k8 ]# j

8 a6 c- h0 e3 M! F5 h# q 20201205214900677.jpg 9 H$ T1 d/ F4 W( N

1 `; i. D( a  g直接勾选 Use Debug Driver,即和调试一样,选择ST LINK来给目标器件的FLASH 编程,然后点击 Settings,设置如下图所示:5 T: g5 S3 L+ T/ t: m9 y. P  i. k
6 C7 V: s( n* Y$ M; ?. e9 X
20201205215015811.jpg   b+ @' B( l& j6 `* ^" p( c
$ Z7 D- H% s, C1 k+ k
MDK5 会根据新建工程时选择的目标器件,自动设置 flash 算法。本例程使用STM32L475VET6,FLASH 容量为 512K 字节,所以 Programming Algorithm 里面默认会有512K型号的STM32L4xx_512KB FLASH 算法。) P: e7 d3 O5 t5 ]( ^* e
注意:这里的512K flash算法,不仅针对512K容量的 STM32L475,对于小于 512K FLASH 的型号,也是采用这个flash算法。
& |3 d% ]/ A2 z  A- s最后,选中Reset and Run选项,以实现在编程后自动运行,其他默认设置即可。: ?0 B- Z3 T8 A% X7 I
. n! V4 S( u. q7 b
回到IDE界面,编译一下工程。然后点击Download,就可以下载代码到 STM32L475上面了,如下图所示:+ t0 G3 w8 `7 H( n. K/ I0 \* Q
1 x9 f; A( V; [* q9 u( J
20201205215346356.jpg , G6 q. D4 ?6 ?+ m  d; i: g
/ a" {$ f: y0 Q6 }7 [! O
下载完后,会自动运行刚刚下载的代码,接下来可以打开串口调试助手,验证是否收到了 STM32L475 串口发送出来的数据。
, d" l( e- f" g0 {由于开发板上的ST LINK也具有串口功能,程序下载和串口功能只需要一根线就可实现,如果电脑上没有安装STM32虚拟串口驱动,需要先安装驱动后电脑才能识别到串口。- A- k  Q& j8 ~$ G

' A6 E( F2 o5 X8 T5 f7 Z本例程实验实现功能是不停地向PC发送递增数据,如下图所示:
/ d5 O7 _7 P! G" M2 ~2 m" n; ^- A* o" c6 m* L8 I
20201205221159642.jpg
% n* q% i* p  E( y9 r; h# i1 x; q2 Y3 X# |5 F7 w* }/ Y7 |/ l) x& ^
二、STM32L4 在线调试
1 r# B. |6 s: B4 S$ M6 U用调试工具,如JLINK(注意:必须是JLINK V9或以上版本!)、ULINK、STLINK 等,可以实时跟踪程序,从而找到程序中的bug。以ST LINK为例,介绍如何选择SWD方式在线调试STM32L475。
1 g% W3 _) P' I在MDK的IDE界面,编译工程。然后点击Start/Stop Debug Session按钮(如下图红圈所示),开始仿真:: V0 D8 ]' t, b% o

, R8 Z$ I% X& O 20201205221928817.jpg 4 M0 F/ e! \8 i! B/ m$ ^5 x+ J

) w1 R( M$ I" Q* g! y4 I因为之前勾选了 Run to main()选项,所以程序直接就运行到了 main 函数的入口处。 另外,此时 MDK 多出了一个 Debug工具条,其部分按钮的功能如下图所示:, ?' L' M$ l9 ~% N2 L! C
' d: _' R: C$ Y  ]; C/ k
20201205222253904.jpg
5 D0 c2 m% v7 [3 Z3 I+ l5 `6 n) e) @/ N2 H& p) D6 U. l
1)复位:其功能等同于硬件上按复位按钮。相当于实现一次硬复位。按下该按钮之后,代码会重新从头开始执行;8 w* H, r1 i$ x+ m, r+ h- i
2)执行到断点处:用来快速执行到断点处,前是你在查看的地方设置了断点;
7 S* r+ t) u$ v7 Y5 e  M# S( i3)停止运行:此按钮在程序一直执行的时候会变为有效,通过按该按钮,可使程序停止下来,进入单步调试状态;
1 q$ y, v, D9 A  l( u4)执行进去:用来实现执行到某个函数里面去的功能,在没有函数的情况下,是等同于执行过去按钮的;
* F5 L! |2 ~# M' V5)执行过去:在碰到有函数的地方,通过该按钮可单步执行过这个函数,而不进入这个函数单步执行;
# ~; O6 Y0 s3 @' R6)执行出去:在进入函数单步调试时,当不必再执行该函数的剩余部分,通过该按钮直接一步执行完函数余下的部分,并跳出函数;
: S$ H. g. ~, _7)执行到光标处:可迅速使程序运行到光标处,类似执行到断点处功能,区别是:断点可有多个,但光标所在处只有一个;. w& T  T8 P; r' o0 J! `3 ~# g
8)汇编窗口:查看汇编代码;4 H  b8 x- l% j
9)堆栈局部变量窗口:显示 Call Stack+Locals 窗口,显示当前函数的局部变量及其值,方便查看。% O. U, ~& ]+ C( Z
10)观察窗口:该按钮按下,会弹出一个显示变量的窗口,输入想要观察的变量/表达式,即可查看其值;
9 P  X% o' O& g' @9 {11)内存查看窗口:该按钮按下,会弹出一个内存查看窗口,可在里面输入你要查看的内存地址,然后观察这一片内存的变化情况;/ E9 O& T6 f. j
12)串口打印窗口:该按钮按下,会弹出一个类似串口调试助手界面的窗口,用来显示从串口打印出来的内容;5 _7 L5 k8 C& e+ A
13)逻辑分析窗口:一般用逻辑分析窗口(Logic Analyzer),通过SETUP新建一些IO口,观察这些IO口的电平变化,以多种形式显示;; W8 e& P6 z# a/ t* X* q# q
14)系统查看窗口:提供各种外设寄存器的查看窗口,选择对应外设,即可调出该外设的相关寄存器表,并显示这些寄存器的值;; t& x, }/ I  ~
Debug工具条上的其他按钮用的较少,这里就不介绍了。9 x7 ^& n2 v2 E
注意:串口打印窗口和逻辑分析窗口仅在软件仿真的时候可用,而 MDK5 对STM32L475 的软件仿真,基本上不支持,基本上这两个窗口用不着。但是对 STM32F1 的软件仿真,MDK5 是支持的,在 F1 开发的时候,可以用到。
1 H4 Y6 e$ C3 b+ I, c3 w9 c
* p# [. k2 @$ y8 j在仿真界面里面调出:堆栈局部变量窗口。如下图所示:0 a# }4 ~3 `- L9 U

: P1 u8 R  _; h9 Z 20201205223629603.jpg
5 z5 B, M% ~, P. T9 S; C1 x9 h5 W
# s. x; d% _4 n7 B把光标放到 main.c 的第33行左侧的灰色区域,按下鼠标左键,放置一个断点(红色的实心点,也可以通过鼠标右键弹出菜单来加入),再次单击则取消。然后点击,执行到该断点处,如下图所示:9 l5 Y" M) T; L

* S9 l& B1 n4 ^ 20201205223922487.jpg
/ y% t# z8 H% H. [+ ?# x2 j% Q) n+ b7 e0 _) Q/ ~  a3 J( n' V# N
点击菜单栏的 Peripherals→System Viewer→USART→USART1。可看到有很多外设可以查看,这里查看串口 1 的情况,如下图所示:8 _  L) j$ o- u% l$ ]) _* R/ b

4 O7 ]2 _' g7 P( H 20201205224059638.jpg 1 x7 B! I2 s9 R8 @7 ^/ _9 ], ^; M
4 }. x8 m8 J$ q. Z2 V. V" O3 g
单击 USART1 后会在 IDE 右侧出现一个如下图所示的界面:4 {: |( n( |& y; n. W: _9 l& Q

  N2 b- T, J* {; q" x 20201205224239693.jpg # l, O  d$ i2 ~( z, M$ x

9 D! y5 {. R9 I上图是STM32的串口1的默认设置状态,可以看到所有与串口相关的寄存器全部显示出来。  y8 X5 S  h, ~' {: X
单击一下执行过去,执行完串口初始化函数,得到如下图所示的串口信息:
7 F9 z$ {/ d4 V% Q# ~7 ]! b' {5 b$ U) h
20201205224616663.jpg 8 M" v. w, }4 E- k5 o: q

0 h/ s: V' [2 f8 k) [对比上面两张图,可以查看串口1的各个寄存器设置状态的变化,从而判断所写的代码是否有问题。
! j  P3 c' G7 {% D6 l————————————————1 O- ^. K$ l, j$ {
版权声明:天亮继续睡% ~4 |  E/ t$ B4 X

6 A% I$ b" L5 P' s( y$ S8 V5 f* v
% |/ Q/ ^0 I9 o8 {7 G* Y
赞 收藏 1 评论0 发布时间:2022-11-18 18:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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