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

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

[复制链接]
STMCU小助手 发布时间:2022-11-20 17:03
主要内容:5 ?& k4 m1 H" _! ]1 S+ N
1) JTAG/SWD调试原理;
; a, k. Z/ ~: T7 b( q- C; x5 T) U! u2) 软件仿真调试;5 b' o1 n5 o% F4 N+ z  @
3) ST-LINK硬件仿真调试。
. y1 O1 I! i9 F# P9 L9 v* F8 F4 e! M# L* g1 m4 A
1. JTAG/SWD调试原理简析
1 @0 W" P1 w, c6 e7 c) L, ?: i1.1 STM32F10xxx使用Cortex™-M3内核,该内核内含硬件调试模块,支持复杂的调试操作。硬件调试模块允许内核在取指(指令断点)或访问数据(数据断点)时停止。内核停止时,内核的内部状态和系统的外部状态都是可以查询的。完成查询后,内核和外设可以被复原,程序将继续执行。当STM32F10x微控制器连接到调试器并开始调试时,调试器将使用内核的硬件调试模块进行调试操作。 支持两种调试接口:1)串行接口(SWD,2根数据线) ;2)JTAG调试接口(5根数据线)。
. a: W# n- v3 ]0 f2. SWJ调试端口(serial wire and JTAG)
) L, A1 r$ D1 A6 p0 t, |2.1 STM32F10xxx内核集成了串行/JTAG调试接口(SWJ-DP)。这是标准的ARM CoreSight调试接口,包括JTAG-DP接口(5个引脚)和SW-DP接口(2个引脚);% {/ b) U# A$ i  N
2.2 JTAG调试接口(JTAG-DP)为AHP-AP模块提供5针标准JTAG接口。串行调试接口(SW-DP)为AHP-AP模块提供2针(时钟+数据)接口;& r% V8 _# n2 T- K2 x6 g
2.3 在SWJ-DP接口中,SW-DP接口的2个引脚和JTAG接口的5个引脚中的一些是复用的。
# d; M2 `2 d' H' y/ q9 i5 P$ @' ~1 j9 P1 r3 H9 y. X
20200404135626702.png
- ~$ E* c0 C  O; o) ~* |4 i1 G2 p6 ~5 }4 \0 h9 _! U. h
3. SWJ调试端口脚7 s' R* h% [; p. J, o# r, ~& x
3.1 STM32F10xxx的5个普通I/O口可用作SWJ-DP接口引脚。这些引脚在所有的封装里都存在。# U0 i. Q( X) n6 s$ r
; k; c" e; o8 s
20200404135741299.png
( T3 \/ ^0 H6 m1 X. ]$ ^
6 J0 j4 y' M. |# a6 h- l4. 灵活的SWJ_DP引脚分配
( \1 A0 ]4 `( F4 ]' x0 @$ \* h* W% Q0 [9 ?! `
2020040413591275.png
$ k5 [5 @/ X9 ?( G) j) M5. JTAG/SWD接口硬件图
" ]( W" p1 D1 F$ O3 q* P, S; _4 n4 }! f* _2 k& Y6 z. O% d
20200404140233227.png
  y. H5 C# J' D3 \6. 软件仿真调试
. a/ h. ^0 t1 U1 c  l6.1 在开始软件仿真前,单击魔术棒,在Target界面,确认芯片型号和晶振频率;' a& i0 m. P7 Y0 E9 D

; v1 g; {& t- P' p- k+ l 20200404140935759.png
2 _$ P. f3 K! X; B# F5 w* x2 L7 `) O+ I7 ]( i. y. i0 o
6.2 在Debug界面,选择Use Simulator,勾选Run to main(),同时在最后一行的两组Dialog DLL和Parameter分别输入DARMSTM.DLL,-pSTM32F103ZE和TRAMSTM.DLL,-pSTM32F103ZE;7 C  X1 f4 b7 c
  A2 v5 ^. H( ~/ J$ y- y! Q: @4 \
20200404141001824.png
  D' j5 C1 \7 f( a
8 J  H) n  S, x/ F% ^6.3 先编译下工程,然后单击Start/Stop Debug Session开始仿真(退出仿真也是单击Start/Stop Debug Session)。
# b0 j9 W+ m" n9 k. N* {. g9 w- i- R+ Q  \. |
7. 软件仿真调试界面工具栏解读
* y/ Z. z) S) n, J4 m2 H% L6 Z# r1 h& v$ D+ y
20200404141023280.png ) H; g' x  E6 d0 w& N# p1 T' S5 Z
7.1 复位:其功能等同于硬件上按复位按钮。相当于实现了一次硬复位。按下该按钮之后,代码会重新从头开始执行;
# \, t" t5 j0 K) \7.2 执行到断点处(Run):用来快速执行到断点处,有时候你并不需要观看每步是怎么执行的,而是想快速的执行到程序的某个地方看结果,这个按钮就可以实现这样的功能,前提是你在查看的地方设置了断点;
3 W- H5 _7 q* p5 ?* n, h" P9 v, p7.3 停止运行:此按钮在程序一直执行的时候会变为有效,该按钮可以使程序停止下来,进入到单步调试状态;
: C% ~/ y2 M( J- I4 N7.4 执行进去:用来实现执行到某个函数里面去的功能,在没有函数的情况下,是等同于执行过去按钮的;5 ~: m, F/ c6 h) a+ d
7.5 执行过去:在碰到有函数的地方,通过该按钮就可以单步执行过这个函数,而不进入这个函数单步执行;5 J; N: z1 L  @/ I( u! W
7.6 执行出去:该按钮是在进入了函数单步调试的时候,有时候你可能不必再执行该函数的剩余部分了,通过该按钮就直接一步执行完函数余下的部分,并跳出函数,回到函数被调用的位置;. w. d' M. e; ?3 x, Y3 `7 N
7.7 执行到光标处:该按钮可以迅速的使程序运行到光标处,其实是挺像执行到断点处按钮功能,但是两者是有区别的,断点可以有多个,但是光标所在处只有一个;- m. Y) K; [; f: ?1 C3 E
7.8 汇编窗口:通过该按钮,就可以查看汇编代码,这对分析程序很有用;
6 h/ t6 w, Y6 R7.9 观看变量/堆栈窗口:该按钮按下,会弹出一个显示变量的窗口,在里面可以查看各种你想要看的变量值;1 M- Z$ S+ N3 |4 r0 k; M/ I
7.10 内存查看窗口:内存查看窗口,可以在里面输入你要查看的内存地址,然后观察这一片内存的变化情况;/ x7 v' u) N# B- q9 {" b& n! Q- ^, }
7.11 串口打印窗口:该按钮按下,会弹出一个类似串口调试助手界面的窗口,用来显示从串口打印出来的内容;
9 E4 b5 F. y4 Q1 W7.12 逻辑分析窗口:按下该按钮会弹出一个逻辑分析窗口,通过 SETUP 按钮新建一些 IO 口,就可以观察这些 IO 口的电平变化情况,以多种形式显示出来;
* g0 \& ~7 m) I8 b: j6 p7.13 系统查看窗口:按下该按钮,会弹出一个观看各个函数执行时间和所占百分比的窗口,用来分析函数的性能是比较有用的。: O+ U5 x0 n0 u9 {: @8 O
: T% J" [- }2 S$ R: p: X( ]
8. ST-LINK硬件仿真调试
5 [8 H# L2 `6 U7 H: g# N8.1 硬件连接:ST-LINK仿真器一端连接在开发版上,另一端通过USB数据线连接到电脑上(用于下载程序至开发版);另用一根USB连接线一端连接在开发版串口上,另一端连接在电脑上(用于串口调试数据查看);9 p3 H2 G( Q) j( K) e, f+ o
8.2 在Debug界面,选择Use ST-LINK Debugger,其他同软件仿真设置一样;4 p! b, Y! O# G( I! ]. y7 h
$ |9 _. U( c9 W# P5 F# H; e$ C
20200404141051356.png
: ?& w: z; K7 `; R9 h1 F5 p! k- ^5 L6 i: o' S
8.3 在MDK软件中,单击Download将程序下载到开发版中,单击Start/Stop Debug Session开始仿真调试;( ]$ m3 @* `. F8 _# C% u
8.4 打开串口调试助手,单击执行到断点处(若没有设置断点,则程序一直运行),此时可以在串口调试助手上观察到相应数据。
, h9 f* s, t) B# n% i* m. u9 e' L& q, ?  Z% C" t5 A* H
9. 仿真仿真中的逻辑分析模块, U1 ?( p& p. c
9.1 逻辑分析模块只对软件仿真有效,对硬件仿真无效;0 p/ o- z# u0 z
9.2 若在程序中定义了一些GPIO引脚,可在逻辑分析窗口中设置,观察该引脚的高低电平,以跑马灯为例,在设置逻辑分析窗口中,新建逻辑分析信号,输入PORTB.5,回车后如下图所示,则可以观察PB5的高低电平运行情况。9 l% }8 O  @; W

) G5 M5 `+ z$ Z/ G) u 20200404141118819.jpg
7 W7 k! ]; ^' ]/ q! m! F9 h: q. V2 V
10. 菜单栏中的Peripherals模块
9 S' q! m4 N( u, c10.1 该函数模块下可查看相关寄存器的值,以跑马灯为例,单击Peripherals→General Purpose I/O→GPIOB,选择PB.5,则在仿真单步调试时,可观察GPIOB_ODR的值变化。
( j# C% i5 D# s  U9 T/ {( V- k3 z
6 ^* Z  {& R; p4 B7 d  ^: L 20200404141145662.png
" e; n9 P9 J9 U' D, o- H: }0 n" o4 j3 I6 |& P. l
————————————————# }3 A4 C% c$ ]4 d7 g9 K
版权声明:本文为CSDN博主「天亮继续睡4 z4 C2 L* O, ^0 W, H3 x% s  t# M
( O6 g  t. t/ {/ I" e; X
; f& [: Q0 Q% ]1 m
赞 收藏 评论0 发布时间:2022-11-20 17:03

举报

0个回答

所属标签

相似技术帖

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