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

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

[复制链接]
STMCU小助手 发布时间:2022-11-20 17:03
主要内容:  c& g$ y& Q/ Y9 z4 \$ {
1) JTAG/SWD调试原理;
6 D5 k- P5 u: E7 r- S2 O; L, a2 B: I2) 软件仿真调试;: a) x$ j1 f  g1 }7 s
3) ST-LINK硬件仿真调试。
6 t( o3 s) \, p2 b. E5 U  X4 K/ v& y
1. JTAG/SWD调试原理简析& M6 T+ t+ ^! i0 o0 ~
1.1 STM32F10xxx使用Cortex™-M3内核,该内核内含硬件调试模块,支持复杂的调试操作。硬件调试模块允许内核在取指(指令断点)或访问数据(数据断点)时停止。内核停止时,内核的内部状态和系统的外部状态都是可以查询的。完成查询后,内核和外设可以被复原,程序将继续执行。当STM32F10x微控制器连接到调试器并开始调试时,调试器将使用内核的硬件调试模块进行调试操作。 支持两种调试接口:1)串行接口(SWD,2根数据线) ;2)JTAG调试接口(5根数据线)。) |" ?3 E( r$ m& }
2. SWJ调试端口(serial wire and JTAG)
4 g! s# v' |+ F# l/ x& y1 J2.1 STM32F10xxx内核集成了串行/JTAG调试接口(SWJ-DP)。这是标准的ARM CoreSight调试接口,包括JTAG-DP接口(5个引脚)和SW-DP接口(2个引脚);
2 c1 J' p5 [3 j4 t- E2.2 JTAG调试接口(JTAG-DP)为AHP-AP模块提供5针标准JTAG接口。串行调试接口(SW-DP)为AHP-AP模块提供2针(时钟+数据)接口;
4 Y8 T$ ^; G9 h; y" o$ H+ [! [8 W2.3 在SWJ-DP接口中,SW-DP接口的2个引脚和JTAG接口的5个引脚中的一些是复用的。
2 A( m. x/ {9 H4 a! G& N: Z# v# Q' F% T
20200404135626702.png
/ _# o4 R: w- R$ k
  M8 R/ Q' f/ a2 w  B* W( J2 O9 q3. SWJ调试端口脚
; P* x- A" |) B: y3.1 STM32F10xxx的5个普通I/O口可用作SWJ-DP接口引脚。这些引脚在所有的封装里都存在。
/ D0 M1 t! d, _" j9 C; t2 x# w; L- b, F0 S3 i
20200404135741299.png ) ^0 ?( r! u  W/ w! V) j
  e4 _% N% I' Q5 H* D( R: q  \" E
4. 灵活的SWJ_DP引脚分配- j, d7 L6 b. D

( Y  ?% u+ ^0 T5 w+ A( c' @" p 2020040413591275.png 6 V4 |7 c3 A  J( l
5. JTAG/SWD接口硬件图
( C3 u0 ?: S* d
5 [% J2 f7 G2 E9 Y 20200404140233227.png
8 G1 R) K# W, j$ I+ H6. 软件仿真调试
) q" ~" y! J% v4 v" I' a6.1 在开始软件仿真前,单击魔术棒,在Target界面,确认芯片型号和晶振频率;
% i4 [0 i, U  m' s# J
6 K, m' Z0 c8 J* f' B3 @+ { 20200404140935759.png
7 r4 s  w$ l7 M: q' ^( f6 R  P& ^5 b, W; l
6.2 在Debug界面,选择Use Simulator,勾选Run to main(),同时在最后一行的两组Dialog DLL和Parameter分别输入DARMSTM.DLL,-pSTM32F103ZE和TRAMSTM.DLL,-pSTM32F103ZE;
% |+ j4 ^! |& I! T0 R0 D( G/ O1 m3 h  Z& p8 a% Y
20200404141001824.png 2 d" W3 c/ d& W; i) \2 P

; y4 {9 c5 @3 p$ b+ g6.3 先编译下工程,然后单击Start/Stop Debug Session开始仿真(退出仿真也是单击Start/Stop Debug Session)。* f! X$ x# D- `3 v

2 n2 |8 @% r0 H. x) B7. 软件仿真调试界面工具栏解读
8 J3 e3 f7 w8 t# a) o' G8 a, y& @1 T4 P! t% `1 h" i; w
20200404141023280.png
" \# h& r4 g' Q7 Y7.1 复位:其功能等同于硬件上按复位按钮。相当于实现了一次硬复位。按下该按钮之后,代码会重新从头开始执行;
0 L- d! g% i0 o$ R4 ~4 R: W4 _7.2 执行到断点处(Run):用来快速执行到断点处,有时候你并不需要观看每步是怎么执行的,而是想快速的执行到程序的某个地方看结果,这个按钮就可以实现这样的功能,前提是你在查看的地方设置了断点;
, A: b! k' s+ u, k9 C2 w8 c: t8 G7.3 停止运行:此按钮在程序一直执行的时候会变为有效,该按钮可以使程序停止下来,进入到单步调试状态;
- l) D8 J/ k( U* K- ]0 ], B7.4 执行进去:用来实现执行到某个函数里面去的功能,在没有函数的情况下,是等同于执行过去按钮的;5 a& D0 W- K7 m, R) m" o
7.5 执行过去:在碰到有函数的地方,通过该按钮就可以单步执行过这个函数,而不进入这个函数单步执行;
' m0 L8 Y, U& o8 |' V- {) @7.6 执行出去:该按钮是在进入了函数单步调试的时候,有时候你可能不必再执行该函数的剩余部分了,通过该按钮就直接一步执行完函数余下的部分,并跳出函数,回到函数被调用的位置;& i5 Z- \5 Q4 X; o! a
7.7 执行到光标处:该按钮可以迅速的使程序运行到光标处,其实是挺像执行到断点处按钮功能,但是两者是有区别的,断点可以有多个,但是光标所在处只有一个;7 E6 ~  z9 V7 x( O6 `, W! M
7.8 汇编窗口:通过该按钮,就可以查看汇编代码,这对分析程序很有用;
" J8 a9 O7 D. ]" ^7.9 观看变量/堆栈窗口:该按钮按下,会弹出一个显示变量的窗口,在里面可以查看各种你想要看的变量值;
8 j0 J, B; {7 e! l. \! J/ e, u; R7.10 内存查看窗口:内存查看窗口,可以在里面输入你要查看的内存地址,然后观察这一片内存的变化情况;6 E& t! [- r% F. |2 m% L
7.11 串口打印窗口:该按钮按下,会弹出一个类似串口调试助手界面的窗口,用来显示从串口打印出来的内容;; Q" d3 y" f/ A8 R8 n9 e
7.12 逻辑分析窗口:按下该按钮会弹出一个逻辑分析窗口,通过 SETUP 按钮新建一些 IO 口,就可以观察这些 IO 口的电平变化情况,以多种形式显示出来;
6 i4 n/ ?: h- H/ ]6 ~3 _7.13 系统查看窗口:按下该按钮,会弹出一个观看各个函数执行时间和所占百分比的窗口,用来分析函数的性能是比较有用的。/ N; \8 d9 b; \/ L: y4 k

' v4 V' |. {$ k( g8. ST-LINK硬件仿真调试- p, L: N/ d: ], k! A) M3 k- {" P
8.1 硬件连接:ST-LINK仿真器一端连接在开发版上,另一端通过USB数据线连接到电脑上(用于下载程序至开发版);另用一根USB连接线一端连接在开发版串口上,另一端连接在电脑上(用于串口调试数据查看);
5 W4 {& _7 X. r7 a2 Q$ @8.2 在Debug界面,选择Use ST-LINK Debugger,其他同软件仿真设置一样;
7 T0 @# \, j) r
# c2 u" @7 q* y 20200404141051356.png
: k0 x+ z' C/ D" X: }6 Z2 B7 w8 E6 D5 ?8 O. F$ B8 s9 @# r
8.3 在MDK软件中,单击Download将程序下载到开发版中,单击Start/Stop Debug Session开始仿真调试;
1 z6 [, o( d  }# W9 P5 _8.4 打开串口调试助手,单击执行到断点处(若没有设置断点,则程序一直运行),此时可以在串口调试助手上观察到相应数据。
- ?% R, y/ v; j
' I- @* k1 H0 `8 s% Q  ^/ r9. 仿真仿真中的逻辑分析模块! ]8 U6 q& p4 i- u' W
9.1 逻辑分析模块只对软件仿真有效,对硬件仿真无效;
/ N; j' ]. {6 y4 i9.2 若在程序中定义了一些GPIO引脚,可在逻辑分析窗口中设置,观察该引脚的高低电平,以跑马灯为例,在设置逻辑分析窗口中,新建逻辑分析信号,输入PORTB.5,回车后如下图所示,则可以观察PB5的高低电平运行情况。$ k7 a3 c" y* c9 p9 ~
3 k- R; I, _& g4 O4 N9 k1 t
20200404141118819.jpg 3 p7 g; h& C: M2 |% Y6 F
" [5 D, g- Z! n) p& o& Y2 C: f( W
10. 菜单栏中的Peripherals模块
& I; j  G9 y% f) a" k/ B. c10.1 该函数模块下可查看相关寄存器的值,以跑马灯为例,单击Peripherals→General Purpose I/O→GPIOB,选择PB.5,则在仿真单步调试时,可观察GPIOB_ODR的值变化。
, x- [% f$ l5 g3 }
  o4 n; U5 F& I0 |* F  j1 e 20200404141145662.png ( w5 z% M% W$ k; k
1 y( K3 D$ k- O, E; K: z. Y
————————————————
, J/ d4 b0 m1 J& M3 R版权声明:本文为CSDN博主「天亮继续睡
# _) h0 O4 q, ]" k" `# u+ Y/ t; a6 X7 h' k6 F

  h! G) \  f6 Z$ D
收藏 评论0 发布时间:2022-11-20 17:03

举报

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