简述

对STM32F411所支持的调试接口及其方式进行简单的学习。

调试接口

STM32F411的调试接口硬件示意如下:

[CortexM4--stm32f411]调试接口_调试


在调试模式下,MCU核在某条特定指令获取(断点),或者是数据获取时(Watch Point)时可以被停住,MCU核的内部状态以及外部状态均可被测量,在测量完成后,MCU核会恢复并继续执行。

STM32F411的调试接口支持两种:

  • Serial wire(SWD)
  • JTAG debug port

另外上图中的一些术语意思如下:

术语

说明

附加说明

SWJ-DP

Serial wire / JTAG debug port, DP即调试接口debug port的简写。SWJ表示是SWD和JTAG

AHB-AP

AHB access port, AHB是ARM架构中常见的高速内部总线一种,即说明调试接口会通过这个AHB-AP与内部的许多调试单元通过AHB进行交互

ITM

Instrumentation Trace Macrocell,即可以进行测量跟踪的,常见的是在代码中通过这个来输出调试信息

FPB

Flash Patch Breadpoint,因为指令一般存在于flash中,这个可能和调试时打断点相关

DWT

Data Watchpoint Trigger,数据监视窗口用,许多调试工具都会有watch point的功能的

TPUI

Trace Port Unit Interface,可能也是用作输出吧,只有大尺寸封装的IC有此功能,应当需要额外的pin

上面图示中写成TPIU了

ETM

Embedded Trace Macrocell,也是只有大尺寸封装的IC有此功能,应当需要额外的pin

上面图示中没有看到这个

接下来简单说明下这里面部分的详细内容以及可能的用法。

SWJ-DP

这个是ARM标准的CoreSight debug port,其中,使用JTAG DP的话有5根pin,用SW DP的话2根pin。STM32F411的这两个接口是复用的~,其硬件框图如下:

[CortexM4--stm32f411]调试接口_STM32F411_02


下面用表格的方式说明下这两个DP的引脚连接的区别:

引脚

JTAG-DP接口

JTAG功能

SW-DP接口

SW功能

PIN Num

JTDO

TDO

数据输出

TRACESWO

trace输出

PB3

JTDI

TDI

数据输入

PA15

NJTRST

nTRST

复位

PB4

JTMS/SWDIO

TMS

测试模式选择

SWDIO

数据输入输出

PA13

JTCK/SWCLK

TCK

时钟

SWCLK

时钟

PA14

上图中还有一个SWD/JTAG select的单元,其实就是用来选择是使用JTAG或SW的。另外表中的TRACESWO并不是SW-DP的接口~应当是后面要提到的ITM会用到的接口。

ITM

ITM支持printf风格的输出,可以在OS和Application中输出log,用来评估和分析系统的信息。ITM有如下三种方式产生trace信息:

方式

说明

其他

Software trace

直接写ITM相应寄存器直接发送数据

Hardware trace

DWT产生数据通过ITM发送

Time stamping

ITM包含了一个21bit的计数器用于产生时间戳,这个时间戳可以通过ITM发送

ITM数据会通过TPIU,TPIU会加上额外的包再发送给调试主机。

使用ITM功能之前,必须使能Debug Exception的TRCEN bit和Monitor Control寄存器。ITM相关寄存器如下图:

[CortexM4--stm32f411]调试接口_调试_03

另外的ETM应当是用来trace执行的指令的,TPIU则是有FIFO,起到bridge的作用,将ETM或ITM的data输出出去。