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

STM32心得:ST-LINK调试原理+软硬件仿真调试方法

[复制链接]
STMCU小助手 发布时间:2022-11-20 17:03
主要内容:
/ y; Z! h' g- I1) JTAG/SWD调试原理;3 z, ^. I8 h! r3 z
2) 软件仿真调试;
! U9 E7 d: V# n: E( W0 x3) ST-LINK硬件仿真调试。
( ~' a3 x; z, x: g$ ?
! j3 o! H# r& D/ @3 s1. JTAG/SWD调试原理简析
5 u& N+ i2 k* M9 e1 l, N3 H* c1.1 STM32F10xxx使用Cortex™-M3内核,该内核内含硬件调试模块,支持复杂的调试操作。硬件调试模块允许内核在取指(指令断点)或访问数据(数据断点)时停止。内核停止时,内核的内部状态和系统的外部状态都是可以查询的。完成查询后,内核和外设可以被复原,程序将继续执行。当STM32F10x微控制器连接到调试器并开始调试时,调试器将使用内核的硬件调试模块进行调试操作。 支持两种调试接口:1)串行接口(SWD,2根数据线) ;2)JTAG调试接口(5根数据线)。
/ A! r* u% r+ V$ ^- k  t1 w; @2. SWJ调试端口(serial wire and JTAG)
4 o; G0 @: Z( ]7 h  Y2.1 STM32F10xxx内核集成了串行/JTAG调试接口(SWJ-DP)。这是标准的ARM CoreSight调试接口,包括JTAG-DP接口(5个引脚)和SW-DP接口(2个引脚);
7 ?; p) t- _) ]+ J2.2 JTAG调试接口(JTAG-DP)为AHP-AP模块提供5针标准JTAG接口。串行调试接口(SW-DP)为AHP-AP模块提供2针(时钟+数据)接口;4 a0 _# K$ [3 G& H1 G
2.3 在SWJ-DP接口中,SW-DP接口的2个引脚和JTAG接口的5个引脚中的一些是复用的。5 @9 ?, d! ]1 o2 d
) r2 a- w5 {. I: T" W( ]$ l
20200404135626702.png ' x0 n6 d3 U+ Q; K+ K, x
6 L1 V) c( U) i- d7 o
3. SWJ调试端口脚
. L; a" G, Y5 w- U4 g3.1 STM32F10xxx的5个普通I/O口可用作SWJ-DP接口引脚。这些引脚在所有的封装里都存在。+ S5 S- V  G$ O( X: X- X
. h4 h9 x& w  o) M( t
20200404135741299.png
* \; s1 E5 _+ {5 Z# d
: ?+ a2 u6 f) g, D: I4. 灵活的SWJ_DP引脚分配* {" j5 t) e: b
5 |8 l  k. ^* O/ o( S6 q. H1 t
2020040413591275.png 4 Y  F4 `; j& Q) l! U
5. JTAG/SWD接口硬件图7 b. \4 i* ?, I9 `

% r1 A" }, }3 i. q. [5 \ 20200404140233227.png : H8 B$ |% w4 v( f
6. 软件仿真调试! i1 F6 L: h3 \+ |
6.1 在开始软件仿真前,单击魔术棒,在Target界面,确认芯片型号和晶振频率;- k/ m" }& z  u& w

5 V8 }, i( F( z6 c; p# N 20200404140935759.png
! D$ M: D7 W7 L$ `% Y& z" Q  z3 ^; A1 `/ q0 U) s& d) U
6.2 在Debug界面,选择Use Simulator,勾选Run to main(),同时在最后一行的两组Dialog DLL和Parameter分别输入DARMSTM.DLL,-pSTM32F103ZE和TRAMSTM.DLL,-pSTM32F103ZE;6 D% g6 \, O1 Y* \+ E- F
: Q0 E, N! F# @8 i8 Z% |8 f
20200404141001824.png
- z0 f% c- b$ D/ i& x6 A6 |- z
* i6 C4 s/ V1 W* I/ X6.3 先编译下工程,然后单击Start/Stop Debug Session开始仿真(退出仿真也是单击Start/Stop Debug Session)。: K7 M! P- ^$ c4 V
0 F8 _/ D; |+ j* J- e( a
7. 软件仿真调试界面工具栏解读
0 x+ w$ p6 ]5 D9 U0 H& a5 S$ }; D( t9 R$ ^- B, z) @
20200404141023280.png 5 g( n) v' ?+ ^
7.1 复位:其功能等同于硬件上按复位按钮。相当于实现了一次硬复位。按下该按钮之后,代码会重新从头开始执行;
, g6 m5 H0 Y" W; v7.2 执行到断点处(Run):用来快速执行到断点处,有时候你并不需要观看每步是怎么执行的,而是想快速的执行到程序的某个地方看结果,这个按钮就可以实现这样的功能,前提是你在查看的地方设置了断点;
% |6 N+ q; g+ C5 D) ~# x8 d* [, S7.3 停止运行:此按钮在程序一直执行的时候会变为有效,该按钮可以使程序停止下来,进入到单步调试状态;
7 J6 T. K1 H4 @+ f- F) a7.4 执行进去:用来实现执行到某个函数里面去的功能,在没有函数的情况下,是等同于执行过去按钮的;
/ }+ N" H1 B) x# h- \7.5 执行过去:在碰到有函数的地方,通过该按钮就可以单步执行过这个函数,而不进入这个函数单步执行;
' V  C1 H* S: C7.6 执行出去:该按钮是在进入了函数单步调试的时候,有时候你可能不必再执行该函数的剩余部分了,通过该按钮就直接一步执行完函数余下的部分,并跳出函数,回到函数被调用的位置;
+ y' j2 R& ^8 i7 {( e$ R7 |7.7 执行到光标处:该按钮可以迅速的使程序运行到光标处,其实是挺像执行到断点处按钮功能,但是两者是有区别的,断点可以有多个,但是光标所在处只有一个;
( u& }' e- e1 i+ ^  x/ p7.8 汇编窗口:通过该按钮,就可以查看汇编代码,这对分析程序很有用;
5 c4 Y  d' x$ A+ ]' Y7.9 观看变量/堆栈窗口:该按钮按下,会弹出一个显示变量的窗口,在里面可以查看各种你想要看的变量值;( o% Z2 v; Y4 V. \7 {- p  Y2 m
7.10 内存查看窗口:内存查看窗口,可以在里面输入你要查看的内存地址,然后观察这一片内存的变化情况;% C) a" O8 U7 d; J/ k. J# I9 ?
7.11 串口打印窗口:该按钮按下,会弹出一个类似串口调试助手界面的窗口,用来显示从串口打印出来的内容;  ~2 n& ?# ?( Q4 X6 h5 s3 ^; D
7.12 逻辑分析窗口:按下该按钮会弹出一个逻辑分析窗口,通过 SETUP 按钮新建一些 IO 口,就可以观察这些 IO 口的电平变化情况,以多种形式显示出来;
9 F9 q/ T0 r3 k2 X( d* D, ~7.13 系统查看窗口:按下该按钮,会弹出一个观看各个函数执行时间和所占百分比的窗口,用来分析函数的性能是比较有用的。
6 {) V) b6 Q# O% Y' ~
8 c/ a& @" {* j* R4 h8. ST-LINK硬件仿真调试
& T" R7 M5 ?- Q" d+ G0 a3 Y8.1 硬件连接:ST-LINK仿真器一端连接在开发版上,另一端通过USB数据线连接到电脑上(用于下载程序至开发版);另用一根USB连接线一端连接在开发版串口上,另一端连接在电脑上(用于串口调试数据查看);
# \) ~1 [; a8 v9 s* m8.2 在Debug界面,选择Use ST-LINK Debugger,其他同软件仿真设置一样;+ i; c& R) f4 h. _
+ E8 y7 j- H. I; v) b2 b# Q
20200404141051356.png 1 U7 X" S6 @/ M1 U4 f2 s
6 n# T( ^4 a& L! @9 k2 L( S, c+ O
8.3 在MDK软件中,单击Download将程序下载到开发版中,单击Start/Stop Debug Session开始仿真调试;
* h- m( _) a% O8.4 打开串口调试助手,单击执行到断点处(若没有设置断点,则程序一直运行),此时可以在串口调试助手上观察到相应数据。
' [: n: u9 X" I" f, |: J& p$ E; u  e- O' v; a& R
9. 仿真仿真中的逻辑分析模块; \: o# I4 {, k% d* h! Y  {
9.1 逻辑分析模块只对软件仿真有效,对硬件仿真无效;0 y$ b6 K/ E. E6 A1 m/ J  g
9.2 若在程序中定义了一些GPIO引脚,可在逻辑分析窗口中设置,观察该引脚的高低电平,以跑马灯为例,在设置逻辑分析窗口中,新建逻辑分析信号,输入PORTB.5,回车后如下图所示,则可以观察PB5的高低电平运行情况。* V' r+ B3 G) u$ R/ R& K4 g' G
' u# r* R5 e" u6 n) }% U
20200404141118819.jpg 6 I/ W, E% G9 I# w- I3 h9 E  a
3 W8 [* P' C+ ]+ D0 h% k( p- m
10. 菜单栏中的Peripherals模块
. Q+ C3 _6 o! n5 n$ S: w10.1 该函数模块下可查看相关寄存器的值,以跑马灯为例,单击Peripherals→General Purpose I/O→GPIOB,选择PB.5,则在仿真单步调试时,可观察GPIOB_ODR的值变化。6 o" j3 S5 C' u: H$ c; O0 n

, ]3 ^& i% I" \$ l 20200404141145662.png ' a8 I  `7 O2 I

; [% I  u, w6 K5 z( B) \# X————————————————. w, W' D( }! Z9 Q$ k' `1 f& I  V
版权声明:本文为CSDN博主「天亮继续睡
8 h' {& N, F9 d. M! i9 Y. L! q5 R' {8 ]2 j; O# E) D( R

9 K- V8 \0 Y- B( @
收藏 评论0 发布时间:2022-11-20 17:03

举报

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