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

【经验分享】学习STM32开发调试DEBUG的步骤解析

[复制链接]
STMCU小助手 发布时间:2022-1-11 23:00
学习STM32开发,肯定少不了debug调试这一步骤。那么,本文带你了解一下这个调试相关的知识。
! P( ~( b- m2 k本文以STM32F1、Cortex-M3为例,其它系列芯片或内核,原理相同或类似。$ s" [6 l0 ~& E
1概况
& B0 O5 [7 C+ v3 n. K6 }, P在STM32中,有很多调试组件。使用它们可以执行各种调试功能,包括断点、数据观察点、 闪存地址重载以及各种跟踪。
; |& n' w- |) S8 X6 o; D- W- |+ aSTM32F1使用Cortex-M3内核,该内核内含硬件调试模块,支持复杂的调试操作。$ f$ c# N0 J- [; x/ F1 q
硬件调试模块允许内核在取指(指令断点)或访问数据(数据断点)时停止。内核停止时,内核的内部状态和系统的外部状态都是可以查询的。完成查询后,内核和外设可以被复原,程序将继续执行。
- h) G2 z8 E2 _+ Z- W* m3 x2 A当STM32F10x微控制器连接到调试器并开始调试时,调试器将使用内核的硬件调试模块进行调试操作。
% c# C8 U9 T- ~8 F( f# d2
+ w' B8 @0 t1 }2 K" ?% q3 g调试框图3 W# G. |* _* [7 {* Q+ ]; U
STM32F1和Cortex-M3的调试框图:
8 z( g" a7 ?" u& W4 ?3 p4 p
提示:Cortex-M3内核内含的硬件调试模块是ARM CoreSight开发工具集的子集。0 R' M+ W& `& e8 S4 {& W8 U, x
ARM Cortex-M3内核提供集成的片上调试功能。它由以下部分组成:
* P+ j" w$ i6 J- S! p. iSWJ-DP:串行/JTAG调试端口" J1 c4 N9 l7 q4 P% x8 K
AHP-AP: AHB访问端口
6 \! h" {; _/ B2 m/ h! b+ C& ^ITM:执行跟踪单元% ^7 |* u8 |( u; ~7 b6 ^/ M
FPB:闪存指令断点' L3 }6 p/ E2 I& |" u1 v" z
DWT:数据触发  ]- [  H( f9 C$ M; m2 K  b
TPUI:跟踪单元接口(仅较大封装的芯片支持)9 t8 T6 u3 {, }$ _. |( T/ @; G
ETM:嵌入式跟踪微单元(在较大的封装上才有支持此功能的引脚),专用于STM32F1的调试特性1 {; i) s6 F8 _
灵活的调试引脚分配9 c/ G6 I" Z0 U& ^7 c
MCU调试盒(支持低电源模式,控制外设时钟等)$ |1 K) p2 L$ K9 z4 j
3. f( D" l4 M" F4 q
调试接口
0 O$ ?& p5 n* ?6 q$ ~STM32支持两种调试接口:. U; o+ v- O$ T3 F! U4 x, ?4 A
串行接口
# L7 C' ]& i& ]* @4 o; {JTAG调试接口
' g2 C, P8 L2 [) x* vSTM32的5个普通I/O口可用作SWJ-DP(串行/JTAG调试)接口引脚:3 K! n& E( A; R6 }. |7 k2 s
4+ M! q7 P5 m. [! C/ C9 w
SWJ调试端口(serial wire and JTAG)  b6 i& z$ q2 @$ w
STM32内核集成了串行/JTAG调试接口(SWJ-DP)。这是标准的ARM CoreSight调试接口,包括JTAG-DP接口(5个引脚)和SW-DP接口(2个引脚)。9 ?4 @! ]+ e5 v$ [
1.JTAG调试接口(JTAG-DP)为AHP-AP模块提供5针标准JTAG接口。
, G# x: N! S, O- ?" \5 q& d3 p2. 串行调试接口(SW-DP)为AHP-AP模块提供2针(时钟+数据)接口。
# y; T, R3 s  g$ P6 I1 p3 [2 e4 N在SWJ-DP接口中, SW-DP接口的2个引脚和JTAG接口的5个引脚中的一些是复用的。
6 k+ f, E  E5 h5 N7 u$ cSWJ调试端口:
2 S' ~' B$ ]5 l1 ^$ J9 z
上面的图显示异步跟踪输出脚(TRACESWO)和TDO是复用的。因此异步跟踪功能只能在SWDP调试接口上实现,不能在JTAG-DP调试接口上实现。0 f6 D- N; Q! `! n* s1 _) s  t
JTAG-DP和SW-DP切换的机制+ T: _6 N0 n2 F
JTAG调试接口是默认的调试接口。如果调试器想要切换到SW-DP,必须在TMS/TCK上输出一指定的JTAG序列(分别映射到SWDIO和SWCLK),该序列禁止JTAG-DP,并激活SW-DP。该方法可以只通过SWCLK和SWDIO两个引脚来激活SW-DP接口。
: a3 O8 i/ i! S$ t指定的序列是:2 ^3 h2 p, b5 y3 q1 |
1. 输出超过50个TCK周期的TMS(SWDIO)= 1信号& R* T6 R4 B2 p: b- b8 Z+ N
2. 输出16个TMS(SWDIO)信号 0111100111100111 (MSB)
  Z% j3 I5 n4 L# K2 |, B3. 输出超过50个TCK周期的TMS(SWDIO)= 1信号
% u+ n/ Z$ M- l( Y/ V5 ^( q5
1 K5 g2 Z6 P& AJTAG脚上的内部上拉和下拉+ e; c, f* O# r& f' r
保证JTAG的输入引脚不是悬空的是非常必要的,因为他们直接连接到D触发器控制着调试模式。必须特别注意SWCLK/TCK引脚,因为他们直接连接到一些D触发器的时钟端。8 k: t9 N! P$ C8 \3 S
为了避免任何未受控制的I/O电平, STM32在JTAG输入脚上嵌入了内部上拉和下拉。
6 |, e9 ^- S% t+ S6 {JINTRST:内部上拉
; \" g2 z; B4 F& R" JJTDI:内部上拉
1 l2 i% C8 \- s( |+ ~* i7 jJTMS/SWDIO:内部上拉
, N" q$ V8 V3 U, n& oTCK/SWCLK:内部下拉
2 ]6 `" c  T; t; v一旦JTAG I/O被用户代码释放, GPIO控制器再次取得控制。这些I/O口的状态将恢复到复位时的状态。
& c' O$ l7 C+ |4 g3 ]  iJNTRST:带上拉的输入; C9 d0 s1 ^% ^6 L: G$ Z! V
JTDI:带上拉的输入
1 f6 P! i- @, R6 ]8 r1 Q9 n, o; n$ kJTMS/SWDIO:带上拉的输入6 A$ y  }+ i4 a5 I$ s- H
JICK/SWCLK:带下拉的输入
6 Z; N3 B. F& ]0 `9 ~5 lJTDO:浮动输入. ]9 Q" W' i7 I4 V
软件可以把这些I/O口作为普通的I/O口使用。: f4 s$ |! V9 r8 |5 d3 M
6
9 }; r* |+ Y7 @0 ?: Q" T利用串行接口并释放不用的调试脚作为普通I/O口7 B, h0 c, m/ }0 }& Y- j. G- T
为了利用串行调试接口来释放一些普通I/O口,用户软件必须在复位后设置SWJ_CFG=010,从而释放PA15, PB3和PB4用做普通I/O口。
1 e! i% C4 z, v3 C* U# m在调试时,调试器进行以下操作:; d8 s1 L; X6 f: l+ p
在系统复位时,所有SWJ引脚被分配为专用引脚(JTAG-DP + SW-DP)。
8 U; T8 O( f8 E( K0 D8 F6 L, e在系统复位状态下,调试器发送指定JTAG序列,从JTAG-DP切换到SW-DP。- v' t0 k) j" r) J1 W; ~6 N
仍然在系统复位状态下,调试器在复位地址处设置断点- V: F: g1 w0 V
释放复位信号,内核停止在复位地址处。2 Y2 i& h+ t3 V; z5 }# I
从这里开始,所有的调试通信将使用SW-DP接口,其他JTAG引脚可以由用户代码改配为普通I/O口。; N" N; g* h6 R7 E1 W& d
8 [8 W- T* i. I0 C
提示:这个地方就是需要大家配置相关的引脚。6 b0 m, x4 L6 W2 R# \
收藏 评论0 发布时间:2022-1-11 23:00

举报

0个回答

所属标签

相似分享

官网相关资源

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