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

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

[复制链接]
STMCU小助手 发布时间:2022-11-20 17:03
主要内容:
  f# |9 G3 j4 T( }' _2 e0 V7 R  y, r1) JTAG/SWD调试原理;
- _9 n: M; P! Y2) 软件仿真调试;
! E0 E6 q% o+ N. A+ c7 I  z0 R3) ST-LINK硬件仿真调试。
- j) j. o! t& y; z0 {7 ~. D% {5 p  ?/ ^) F
1. JTAG/SWD调试原理简析
+ ?3 {' B) H1 R1.1 STM32F10xxx使用Cortex™-M3内核,该内核内含硬件调试模块,支持复杂的调试操作。硬件调试模块允许内核在取指(指令断点)或访问数据(数据断点)时停止。内核停止时,内核的内部状态和系统的外部状态都是可以查询的。完成查询后,内核和外设可以被复原,程序将继续执行。当STM32F10x微控制器连接到调试器并开始调试时,调试器将使用内核的硬件调试模块进行调试操作。 支持两种调试接口:1)串行接口(SWD,2根数据线) ;2)JTAG调试接口(5根数据线)。
/ \+ j; b1 c2 K% ?6 h2. SWJ调试端口(serial wire and JTAG)
% Y2 a) t7 y  ]- R7 r! r* f2.1 STM32F10xxx内核集成了串行/JTAG调试接口(SWJ-DP)。这是标准的ARM CoreSight调试接口,包括JTAG-DP接口(5个引脚)和SW-DP接口(2个引脚);+ b( E. ]/ N& @$ q! }3 I3 @
2.2 JTAG调试接口(JTAG-DP)为AHP-AP模块提供5针标准JTAG接口。串行调试接口(SW-DP)为AHP-AP模块提供2针(时钟+数据)接口;
& M/ B- O# n& b% `# p' T2.3 在SWJ-DP接口中,SW-DP接口的2个引脚和JTAG接口的5个引脚中的一些是复用的。
9 `/ e! U7 P$ u1 q9 |
! R4 s1 ^, x2 c8 v 20200404135626702.png . z* V: a' I& m: {

' T1 S2 M2 l; p: [" ~/ n& ?3. SWJ调试端口脚# T& ]5 A' x' S# X
3.1 STM32F10xxx的5个普通I/O口可用作SWJ-DP接口引脚。这些引脚在所有的封装里都存在。6 n( s/ w" Z0 x+ |3 a) g
+ k) \/ l, ^, Y/ F4 n3 D
20200404135741299.png % j; {/ B% z" [5 Y+ O0 A

. K4 Y8 f) ]9 Y* @7 W$ e8 ^1 X4. 灵活的SWJ_DP引脚分配
4 _$ {  g( k3 j, m
* [/ W" ]  u& n) h 2020040413591275.png ' ~7 F2 ^! O0 k; ~4 f
5. JTAG/SWD接口硬件图
' F. `( s$ d0 N/ Z! v9 N. y. x8 v0 V7 Z) h8 w
20200404140233227.png
8 A0 {) ^1 ]: N6. 软件仿真调试% K2 N4 a& g# ]$ ^; v) K) a5 {
6.1 在开始软件仿真前,单击魔术棒,在Target界面,确认芯片型号和晶振频率;; Y% k$ {* l/ ~* W7 b
, P4 B( G# H7 W; N$ ^
20200404140935759.png % N" ^5 H4 v6 r9 _8 S) t) I
# ?/ E* {' E4 [
6.2 在Debug界面,选择Use Simulator,勾选Run to main(),同时在最后一行的两组Dialog DLL和Parameter分别输入DARMSTM.DLL,-pSTM32F103ZE和TRAMSTM.DLL,-pSTM32F103ZE;7 m* M  _& H( P1 j8 n+ k

/ {6 j$ k3 l! U0 Y0 D 20200404141001824.png ; @) {( V* N$ F
2 e% M5 R. k  y& T; O; K* F
6.3 先编译下工程,然后单击Start/Stop Debug Session开始仿真(退出仿真也是单击Start/Stop Debug Session)。. h! a# m4 i* H2 V
5 D) e% J' e. ?% {$ W5 R
7. 软件仿真调试界面工具栏解读+ S8 j" a4 _8 M7 b' d% z  q4 [( C7 ^
$ o, H! \# h/ I' @3 O
20200404141023280.png
9 d! A9 Q( h; _/ h* }# v( ?+ S7.1 复位:其功能等同于硬件上按复位按钮。相当于实现了一次硬复位。按下该按钮之后,代码会重新从头开始执行;1 a* A/ D; T3 l  |" w! Q9 G
7.2 执行到断点处(Run):用来快速执行到断点处,有时候你并不需要观看每步是怎么执行的,而是想快速的执行到程序的某个地方看结果,这个按钮就可以实现这样的功能,前提是你在查看的地方设置了断点;
1 n7 P' k' k$ U. s" I0 e7.3 停止运行:此按钮在程序一直执行的时候会变为有效,该按钮可以使程序停止下来,进入到单步调试状态;6 x" h% s- m% }; P/ B, I8 }5 t' s
7.4 执行进去:用来实现执行到某个函数里面去的功能,在没有函数的情况下,是等同于执行过去按钮的;: b+ C3 b, L, |: s
7.5 执行过去:在碰到有函数的地方,通过该按钮就可以单步执行过这个函数,而不进入这个函数单步执行;
4 a  }( f3 S& a3 a' x8 ~7.6 执行出去:该按钮是在进入了函数单步调试的时候,有时候你可能不必再执行该函数的剩余部分了,通过该按钮就直接一步执行完函数余下的部分,并跳出函数,回到函数被调用的位置;
& e; H' _) [8 l/ s" L: {* i  u* d( i" J7.7 执行到光标处:该按钮可以迅速的使程序运行到光标处,其实是挺像执行到断点处按钮功能,但是两者是有区别的,断点可以有多个,但是光标所在处只有一个;
9 J1 T* U. ]% S; X# k6 R* B7.8 汇编窗口:通过该按钮,就可以查看汇编代码,这对分析程序很有用;
" W0 R$ ?* j! y; m' M- {, {# M7.9 观看变量/堆栈窗口:该按钮按下,会弹出一个显示变量的窗口,在里面可以查看各种你想要看的变量值;
+ O8 y6 l3 s9 @) z1 d2 Q0 v7.10 内存查看窗口:内存查看窗口,可以在里面输入你要查看的内存地址,然后观察这一片内存的变化情况;4 C0 k. ?( \- O# X: R& |- V! M# m
7.11 串口打印窗口:该按钮按下,会弹出一个类似串口调试助手界面的窗口,用来显示从串口打印出来的内容;
: O+ q0 ?) T/ k( R7.12 逻辑分析窗口:按下该按钮会弹出一个逻辑分析窗口,通过 SETUP 按钮新建一些 IO 口,就可以观察这些 IO 口的电平变化情况,以多种形式显示出来;1 W5 S2 F2 p& M7 h2 r- u) Q& j
7.13 系统查看窗口:按下该按钮,会弹出一个观看各个函数执行时间和所占百分比的窗口,用来分析函数的性能是比较有用的。3 S- d; C/ Z, Z/ J7 m
' S( h, h) Q7 M; ~7 b& l* W) m- _
8. ST-LINK硬件仿真调试: f0 S0 x9 z7 o3 f4 A
8.1 硬件连接:ST-LINK仿真器一端连接在开发版上,另一端通过USB数据线连接到电脑上(用于下载程序至开发版);另用一根USB连接线一端连接在开发版串口上,另一端连接在电脑上(用于串口调试数据查看);2 D, E4 w8 z9 h# c+ l  f
8.2 在Debug界面,选择Use ST-LINK Debugger,其他同软件仿真设置一样;
; K* X) S+ _" j3 l
5 J! x  ]( ^. L 20200404141051356.png " g. R7 D/ Z  q1 r- d, A

7 [% C1 Y5 _# `; J: W) Q8.3 在MDK软件中,单击Download将程序下载到开发版中,单击Start/Stop Debug Session开始仿真调试;
! Y0 |9 K$ d* G% T9 e7 ?; `" m. B8.4 打开串口调试助手,单击执行到断点处(若没有设置断点,则程序一直运行),此时可以在串口调试助手上观察到相应数据。' _* X! S' k4 b9 y1 O, i+ \4 w0 \2 s
: ~& D  ]! [; V, I
9. 仿真仿真中的逻辑分析模块
6 `$ n1 Z, ?% j/ s$ s2 C9.1 逻辑分析模块只对软件仿真有效,对硬件仿真无效;
! q3 _4 A6 _3 b1 _" n) G9 g9.2 若在程序中定义了一些GPIO引脚,可在逻辑分析窗口中设置,观察该引脚的高低电平,以跑马灯为例,在设置逻辑分析窗口中,新建逻辑分析信号,输入PORTB.5,回车后如下图所示,则可以观察PB5的高低电平运行情况。
6 }+ G' g: c2 k4 B' l
  p) Z' e0 Y9 H& W4 D! }. H 20200404141118819.jpg 7 G' J, d; Q. {1 z
9 ?3 R4 ]* [- y- ?
10. 菜单栏中的Peripherals模块) d7 b5 I  u! f5 n5 V
10.1 该函数模块下可查看相关寄存器的值,以跑马灯为例,单击Peripherals→General Purpose I/O→GPIOB,选择PB.5,则在仿真单步调试时,可观察GPIOB_ODR的值变化。
! q# G  R' ?# V' r4 n& O
! ~: M4 t, n) ~* S7 F+ V 20200404141145662.png ( C4 j  \' T+ {7 ]& {- o
! U* q# x9 N; }+ `$ T
————————————————
6 {4 z9 }# [# N/ A8 ^版权声明:本文为CSDN博主「天亮继续睡/ B9 B7 Z5 v* T1 U! H/ v8 D0 w
* U& y& o0 c: U( T$ B

9 ?; U& M% @. i8 b: v1 L4 A
赞 收藏 评论0 发布时间:2022-11-20 17:03

举报

0个回答

所属标签

相似技术帖

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