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

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

[复制链接]
STMCU小助手 发布时间:2022-11-20 17:03
主要内容:
! x, b- h, M' F) J, A1) JTAG/SWD调试原理;
8 z% c9 _# e5 q# u8 R2) 软件仿真调试;
% f+ r7 ]4 E& b/ `2 g3) ST-LINK硬件仿真调试。% q, T! d, [+ U: S. b# V
( W* k  x* H7 U5 y9 d
1. JTAG/SWD调试原理简析
7 F- q; h4 S  y9 w/ b0 l. S1.1 STM32F10xxx使用Cortex™-M3内核,该内核内含硬件调试模块,支持复杂的调试操作。硬件调试模块允许内核在取指(指令断点)或访问数据(数据断点)时停止。内核停止时,内核的内部状态和系统的外部状态都是可以查询的。完成查询后,内核和外设可以被复原,程序将继续执行。当STM32F10x微控制器连接到调试器并开始调试时,调试器将使用内核的硬件调试模块进行调试操作。 支持两种调试接口:1)串行接口(SWD,2根数据线) ;2)JTAG调试接口(5根数据线)。4 f! y$ z% u$ F0 P7 R* _; J) |
2. SWJ调试端口(serial wire and JTAG)
  S  R3 z. y. J; T8 _( g: y2.1 STM32F10xxx内核集成了串行/JTAG调试接口(SWJ-DP)。这是标准的ARM CoreSight调试接口,包括JTAG-DP接口(5个引脚)和SW-DP接口(2个引脚);
) C4 f( S9 h- f. I  I4 {2.2 JTAG调试接口(JTAG-DP)为AHP-AP模块提供5针标准JTAG接口。串行调试接口(SW-DP)为AHP-AP模块提供2针(时钟+数据)接口;
4 t. @+ X, P% z7 q, ?: Z( @. V2.3 在SWJ-DP接口中,SW-DP接口的2个引脚和JTAG接口的5个引脚中的一些是复用的。
4 ?3 p  T8 H. G3 \) f
# p6 B; e4 l: k9 }7 V7 b' O 20200404135626702.png 6 m+ d$ S- D6 B' D
  P3 i" z/ ^6 ]! m  a, t, t5 \' V
3. SWJ调试端口脚6 q5 o: G' e: }. q- _
3.1 STM32F10xxx的5个普通I/O口可用作SWJ-DP接口引脚。这些引脚在所有的封装里都存在。
6 n( E/ B1 Y, c8 E
* w& _- A  `7 h: v3 e# Z) X4 p! _ 20200404135741299.png
8 b! o% E! ?& F8 C. T* ^  a7 B2 \6 l1 i! \0 \
4. 灵活的SWJ_DP引脚分配" N5 _+ D& F5 ~/ a; k8 P
* }1 Y. G9 I  |* a
2020040413591275.png " `" F- j$ v( T  A5 a% W6 z
5. JTAG/SWD接口硬件图
" [3 l  `5 T& j6 X# b5 H0 D( y0 @4 \, v+ Z
20200404140233227.png $ j/ q4 @$ X4 H7 H( ]/ N8 E2 }
6. 软件仿真调试5 W. C4 \3 h4 F. |# ~
6.1 在开始软件仿真前,单击魔术棒,在Target界面,确认芯片型号和晶振频率;4 g1 f! S3 n- f. J; [( v$ r
% s1 r( Y  N1 R2 ?/ p
20200404140935759.png ( V3 Y+ ^. m; _# N. G" t. q

1 B& s+ S" ~. k6.2 在Debug界面,选择Use Simulator,勾选Run to main(),同时在最后一行的两组Dialog DLL和Parameter分别输入DARMSTM.DLL,-pSTM32F103ZE和TRAMSTM.DLL,-pSTM32F103ZE;
* O' e3 o0 b: @& C6 `* ^4 |" I3 Y2 g- M7 d$ V: x" F, m: {6 Y
20200404141001824.png
- _. r/ M8 E* c% f+ }
5 V7 ^( X3 `% S) P; R6.3 先编译下工程,然后单击Start/Stop Debug Session开始仿真(退出仿真也是单击Start/Stop Debug Session)。
7 S$ f2 b  c  E2 y2 c
7 n" L3 p& M& X6 g% D+ r4 j5 k7. 软件仿真调试界面工具栏解读
: V* U3 m# f* X: v. z3 _
' L( ]' a. K; `2 r- C- D 20200404141023280.png
$ {/ ~7 `  x: k9 F7.1 复位:其功能等同于硬件上按复位按钮。相当于实现了一次硬复位。按下该按钮之后,代码会重新从头开始执行;7 y, Z( {: M9 y- J
7.2 执行到断点处(Run):用来快速执行到断点处,有时候你并不需要观看每步是怎么执行的,而是想快速的执行到程序的某个地方看结果,这个按钮就可以实现这样的功能,前提是你在查看的地方设置了断点;0 M( f+ `: q3 `: T5 k, M
7.3 停止运行:此按钮在程序一直执行的时候会变为有效,该按钮可以使程序停止下来,进入到单步调试状态;( M; \5 t) `3 s
7.4 执行进去:用来实现执行到某个函数里面去的功能,在没有函数的情况下,是等同于执行过去按钮的;
5 D  P& @5 X% z3 m7 Q/ g7.5 执行过去:在碰到有函数的地方,通过该按钮就可以单步执行过这个函数,而不进入这个函数单步执行;  q0 ]- m3 ^: m! x5 M
7.6 执行出去:该按钮是在进入了函数单步调试的时候,有时候你可能不必再执行该函数的剩余部分了,通过该按钮就直接一步执行完函数余下的部分,并跳出函数,回到函数被调用的位置;6 D8 D. I  {* ?. `; [6 H1 p
7.7 执行到光标处:该按钮可以迅速的使程序运行到光标处,其实是挺像执行到断点处按钮功能,但是两者是有区别的,断点可以有多个,但是光标所在处只有一个;
- C6 e6 g1 P# l6 B5 H7.8 汇编窗口:通过该按钮,就可以查看汇编代码,这对分析程序很有用;
; H- E7 k0 R0 X0 i" ~7.9 观看变量/堆栈窗口:该按钮按下,会弹出一个显示变量的窗口,在里面可以查看各种你想要看的变量值;
$ g7 e/ G' ~: j, z8 x/ O4 f& ?7.10 内存查看窗口:内存查看窗口,可以在里面输入你要查看的内存地址,然后观察这一片内存的变化情况;0 E: j" h- G/ ?' v
7.11 串口打印窗口:该按钮按下,会弹出一个类似串口调试助手界面的窗口,用来显示从串口打印出来的内容;
) p  ^$ P- P- X9 t* c7.12 逻辑分析窗口:按下该按钮会弹出一个逻辑分析窗口,通过 SETUP 按钮新建一些 IO 口,就可以观察这些 IO 口的电平变化情况,以多种形式显示出来;/ P/ b/ u3 ]7 _1 |4 N
7.13 系统查看窗口:按下该按钮,会弹出一个观看各个函数执行时间和所占百分比的窗口,用来分析函数的性能是比较有用的。7 O5 z3 ]; U3 p% y
6 }2 L$ Y% a! B+ v
8. ST-LINK硬件仿真调试; F5 e) t  C: o; B; [
8.1 硬件连接:ST-LINK仿真器一端连接在开发版上,另一端通过USB数据线连接到电脑上(用于下载程序至开发版);另用一根USB连接线一端连接在开发版串口上,另一端连接在电脑上(用于串口调试数据查看);( O, _- n5 b+ n/ O- b
8.2 在Debug界面,选择Use ST-LINK Debugger,其他同软件仿真设置一样;
0 C4 O" W2 P9 @( H, Y$ H4 k! q& u, M# Z/ F7 [7 b! m
20200404141051356.png - A2 t7 j' x" @4 b4 R* d
! N( }! a1 K: w6 L9 q, K
8.3 在MDK软件中,单击Download将程序下载到开发版中,单击Start/Stop Debug Session开始仿真调试;
  v. Y% a" y, w$ V6 D: f: d8.4 打开串口调试助手,单击执行到断点处(若没有设置断点,则程序一直运行),此时可以在串口调试助手上观察到相应数据。
! L; j+ Y: a- A1 c8 @
+ B3 B8 ~7 d% k9 |3 V9. 仿真仿真中的逻辑分析模块
4 @  b- d" ?3 _  D5 \$ P9.1 逻辑分析模块只对软件仿真有效,对硬件仿真无效;+ T8 x4 ~5 |. U0 W' m" }# p4 Z2 V
9.2 若在程序中定义了一些GPIO引脚,可在逻辑分析窗口中设置,观察该引脚的高低电平,以跑马灯为例,在设置逻辑分析窗口中,新建逻辑分析信号,输入PORTB.5,回车后如下图所示,则可以观察PB5的高低电平运行情况。0 R3 K+ G5 u1 P, |. k6 d+ A

3 \8 [$ y- i, ]9 u+ C' K1 D 20200404141118819.jpg
$ j* n' \# T4 j; f" s* j6 ~6 {
* Y: |3 p9 h4 _1 W1 C10. 菜单栏中的Peripherals模块& ?5 v! q  y3 u& U' Q6 D0 y% }, x, C6 U
10.1 该函数模块下可查看相关寄存器的值,以跑马灯为例,单击Peripherals→General Purpose I/O→GPIOB,选择PB.5,则在仿真单步调试时,可观察GPIOB_ODR的值变化。
& k7 ?, b: S6 O. ]) g
, [5 P3 P3 R3 P 20200404141145662.png " p* O: p% P0 w6 C

% j8 S& R3 _( n————————————————* t1 W) L& i$ @5 v
版权声明:本文为CSDN博主「天亮继续睡
! e8 L: S9 ?; `9 v* _* K: _6 S+ ^7 K; f
! B3 i/ g) ^0 g0 o% `1 V
收藏 评论0 发布时间:2022-11-20 17:03

举报

0个回答

所属标签

相似技术帖

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