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

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

[复制链接]
STMCU小助手 发布时间:2022-11-20 17:03
主要内容:: ]! _3 M) Z* F. A* i
1) JTAG/SWD调试原理;. ?$ Q9 Q- k4 B
2) 软件仿真调试;$ C6 }9 A( |5 b% o9 w( N9 N2 M
3) ST-LINK硬件仿真调试。
- V$ O0 B! q( h( V# P8 V$ V( _. l% k1 Z' j# r) t) U
1. JTAG/SWD调试原理简析
. k. Y" m% o! ^) c+ P! q0 @1.1 STM32F10xxx使用Cortex™-M3内核,该内核内含硬件调试模块,支持复杂的调试操作。硬件调试模块允许内核在取指(指令断点)或访问数据(数据断点)时停止。内核停止时,内核的内部状态和系统的外部状态都是可以查询的。完成查询后,内核和外设可以被复原,程序将继续执行。当STM32F10x微控制器连接到调试器并开始调试时,调试器将使用内核的硬件调试模块进行调试操作。 支持两种调试接口:1)串行接口(SWD,2根数据线) ;2)JTAG调试接口(5根数据线)。
* Z+ N& {3 ~& }2. SWJ调试端口(serial wire and JTAG)1 R, K6 _/ {% A) S7 V
2.1 STM32F10xxx内核集成了串行/JTAG调试接口(SWJ-DP)。这是标准的ARM CoreSight调试接口,包括JTAG-DP接口(5个引脚)和SW-DP接口(2个引脚);
1 n% B2 B6 Z9 L3 k! T  l9 r2.2 JTAG调试接口(JTAG-DP)为AHP-AP模块提供5针标准JTAG接口。串行调试接口(SW-DP)为AHP-AP模块提供2针(时钟+数据)接口;
% L8 w* f0 v9 x6 _% t2.3 在SWJ-DP接口中,SW-DP接口的2个引脚和JTAG接口的5个引脚中的一些是复用的。
; l; b; |8 a1 @+ W( e3 u# g% x7 ]& e- Q' _; }* D
20200404135626702.png ' g& L. J8 y: G4 G/ y
. _7 W& S! ?- H3 c1 K; [  `  Z
3. SWJ调试端口脚6 \- A, M; P5 Q  L5 R1 S1 t: i
3.1 STM32F10xxx的5个普通I/O口可用作SWJ-DP接口引脚。这些引脚在所有的封装里都存在。9 b" Z: E+ y* z, b
* t0 g8 \( l0 Q8 w3 k
20200404135741299.png
; l- Y) I; x# l: y+ a# M6 s8 X! G. q  H4 k0 `" l# o
4. 灵活的SWJ_DP引脚分配
1 f; p2 h, B. a$ E8 u# ~7 ?1 X# H' a
2020040413591275.png % X0 O! e9 f; z) _
5. JTAG/SWD接口硬件图- c7 `* s' R6 \) a/ m) W5 s
/ l5 p4 y2 g& z) C0 L7 h8 s$ W, Y
20200404140233227.png
% E( D9 P! Z0 l* F1 T: c: T6. 软件仿真调试
# d( }* J6 x2 m$ \: l8 U9 g; E6.1 在开始软件仿真前,单击魔术棒,在Target界面,确认芯片型号和晶振频率;
0 c0 ^) ?5 W/ W% ~
' S% H( [& o% c* L 20200404140935759.png
: a/ Q& ~; E. p/ X1 h# |- i% Z7 W' i4 w. Y; \
6.2 在Debug界面,选择Use Simulator,勾选Run to main(),同时在最后一行的两组Dialog DLL和Parameter分别输入DARMSTM.DLL,-pSTM32F103ZE和TRAMSTM.DLL,-pSTM32F103ZE;
; F0 x4 U) G, B6 p2 X5 {8 G9 _
4 j( C- t! y0 H 20200404141001824.png
. c1 g+ g+ a# ~9 \
: E* R4 t! [6 G; S6 L5 I4 D7 T  ~6.3 先编译下工程,然后单击Start/Stop Debug Session开始仿真(退出仿真也是单击Start/Stop Debug Session)。
% S2 o! o" ~. L3 O0 E+ ^8 S1 b) A! W  U6 P) T
7. 软件仿真调试界面工具栏解读7 k) E' [8 p& m5 I( ?! b# N

  n9 f8 D" T8 F0 r# `9 |* k# N4 A, p 20200404141023280.png + C2 r: z4 E) t  ]
7.1 复位:其功能等同于硬件上按复位按钮。相当于实现了一次硬复位。按下该按钮之后,代码会重新从头开始执行;
% o) A( [9 t& Y/ z' U7.2 执行到断点处(Run):用来快速执行到断点处,有时候你并不需要观看每步是怎么执行的,而是想快速的执行到程序的某个地方看结果,这个按钮就可以实现这样的功能,前提是你在查看的地方设置了断点;
+ C" D6 @2 v; C+ ~% U7.3 停止运行:此按钮在程序一直执行的时候会变为有效,该按钮可以使程序停止下来,进入到单步调试状态;
) ^8 V$ I8 J2 m: r" s- b7.4 执行进去:用来实现执行到某个函数里面去的功能,在没有函数的情况下,是等同于执行过去按钮的;- X1 i; y' y8 ?" D
7.5 执行过去:在碰到有函数的地方,通过该按钮就可以单步执行过这个函数,而不进入这个函数单步执行;5 _( m- e7 h4 B) S( p; y, b  z
7.6 执行出去:该按钮是在进入了函数单步调试的时候,有时候你可能不必再执行该函数的剩余部分了,通过该按钮就直接一步执行完函数余下的部分,并跳出函数,回到函数被调用的位置;3 G* I% M4 T6 t! c$ o& K
7.7 执行到光标处:该按钮可以迅速的使程序运行到光标处,其实是挺像执行到断点处按钮功能,但是两者是有区别的,断点可以有多个,但是光标所在处只有一个;
( v  m$ J' I6 X) B; U) C7.8 汇编窗口:通过该按钮,就可以查看汇编代码,这对分析程序很有用;7 A/ b2 q7 T8 ?  M: v: y
7.9 观看变量/堆栈窗口:该按钮按下,会弹出一个显示变量的窗口,在里面可以查看各种你想要看的变量值;& @1 H! D# N( u- F. {
7.10 内存查看窗口:内存查看窗口,可以在里面输入你要查看的内存地址,然后观察这一片内存的变化情况;
3 h9 ]: _4 x- m* s" k* f( ?) {# U/ @7.11 串口打印窗口:该按钮按下,会弹出一个类似串口调试助手界面的窗口,用来显示从串口打印出来的内容;
9 Z& v& W* L/ z7.12 逻辑分析窗口:按下该按钮会弹出一个逻辑分析窗口,通过 SETUP 按钮新建一些 IO 口,就可以观察这些 IO 口的电平变化情况,以多种形式显示出来;
" {- a9 K& Y: z! H7.13 系统查看窗口:按下该按钮,会弹出一个观看各个函数执行时间和所占百分比的窗口,用来分析函数的性能是比较有用的。# M. Y5 s+ B6 C" y- t
3 m6 \4 ]# M+ J1 T
8. ST-LINK硬件仿真调试
4 I! V0 N& v5 _# q$ o8.1 硬件连接:ST-LINK仿真器一端连接在开发版上,另一端通过USB数据线连接到电脑上(用于下载程序至开发版);另用一根USB连接线一端连接在开发版串口上,另一端连接在电脑上(用于串口调试数据查看);2 ?) m0 t, d# |+ B' Z
8.2 在Debug界面,选择Use ST-LINK Debugger,其他同软件仿真设置一样;; E7 p- J+ a3 L1 u" K
3 {8 M3 F( K, H# u3 k
20200404141051356.png
: [! B8 h) L% r! X* ]/ R- s) Q* [6 K# `
8.3 在MDK软件中,单击Download将程序下载到开发版中,单击Start/Stop Debug Session开始仿真调试;7 b! x7 s. o3 p- r& K
8.4 打开串口调试助手,单击执行到断点处(若没有设置断点,则程序一直运行),此时可以在串口调试助手上观察到相应数据。  r2 U) J3 N4 T4 _1 g' Y4 s$ h" K

% m  X( a7 Q) X  X9. 仿真仿真中的逻辑分析模块0 j4 _3 s6 P8 D6 J' L0 g6 O& |
9.1 逻辑分析模块只对软件仿真有效,对硬件仿真无效;) S6 u# O! f+ b8 }: s: z
9.2 若在程序中定义了一些GPIO引脚,可在逻辑分析窗口中设置,观察该引脚的高低电平,以跑马灯为例,在设置逻辑分析窗口中,新建逻辑分析信号,输入PORTB.5,回车后如下图所示,则可以观察PB5的高低电平运行情况。9 M3 r6 r( I" G" g; I

2 w8 q* e* ^2 l+ x& g( m 20200404141118819.jpg
+ u5 v. u6 |5 c$ B9 _
* Z6 @6 Y" B( M% ^) D- I9 u/ j10. 菜单栏中的Peripherals模块
8 p' T. \0 g0 C! Z) T0 y! k. }  y10.1 该函数模块下可查看相关寄存器的值,以跑马灯为例,单击Peripherals→General Purpose I/O→GPIOB,选择PB.5,则在仿真单步调试时,可观察GPIOB_ODR的值变化。+ Z, }8 q# S' @  A% u
4 J3 `9 l% t7 X8 u0 Y$ P( \3 h
20200404141145662.png
  d& V6 {2 ]) B1 k, Q- h- P
: n6 P& Z" U# a; q5 [————————————————
1 v5 v" U. ~( T4 G- Z版权声明:本文为CSDN博主「天亮继续睡9 G$ r/ j" h0 c

2 u# Q) f% f0 F$ Z6 R8 b" h' \5 p2 O0 }" C& F& i3 S) f
收藏 评论0 发布时间:2022-11-20 17:03

举报

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