JTAG、SWD调试原理简析

JTAG、SWD调试原理简析

STM32F10xxx使用CortexM-M3内核,该内核内含硬件调试模块,支持复杂的调试操作。硬件调试模块允许内核在取指(指令断点)或访问数据(数据断点)时停止。内核停止时,内核的内部状态和系统的外部状态都是可以查询的。完成查询后,内核和外设可以被复原,程序将继续执行。

当STM32F10x微控制器连接到调试器并开始调试时,调试器将使用内核的硬件调试模块进行调试操作。

支持两种调试接口:
串行接口(SWD)——该模式使用比较多
JTAG调试接口(JTAG)

调试

STM32F10xxx内核集成了串行/JTAG调试接口(SWJ-DP)。这是标准的ARM CoreSight调试接口,包括JTAG-DP接口(5个引脚)和SW-DP接口(2个引脚)。

JTAG调试接口(JTAG-DP)为AHP-AP模块提供5针标准JTAG接口。串行调试接口(SW-DP)为AHP-AP模块提供2针(时钟+数据)接口。

在SWJ-DP接口中,SW-DP接口的2个引脚和JTAG接口的5个引脚中的一些是复用的。
JTAG、SWD调试原理简析_第1张图片

SWD和JTAG调试端口引脚

JTAG、SWD调试原理简析_第2张图片

这些引脚如果被作为JTAG和SWD调试引脚时,是不能作为普通IO引脚的,输出不了正常的电平状态;

如果禁止SWD或者JTAG调试,那不使用的引脚就可以作为IO引脚

JTAG、SWD调试原理简析_第3张图片

SWD、JTAG模式设置库函数(在文件stm32f10x_gpio.c中)

void GPIO_PinRemapConfig(uint32_t GPIO_Remap,FunctionalState NewState)

通过查看GPIO_Remap这个参数的取值范围,跳到stm32f10x_gpio.h头文件中可以看到下面的宏定义,也就是参数的部分取值

#define GPIO_Remap_SWJ_NoJTRST      ((uint32_t)0x00300100)  /*!< Full SWJ Enabled (JTAG-DP + SW-DP) but without JTRST */
#define GPIO_Remap_SWJ_JTAGDisable  ((uint32_t)0x00300200)  /*!< JTAG-DP Disabled and SW-DP Enabled */
#define GPIO_Remap_SWJ_Disable      ((uint32_t)0x00300400)  /*!< Full SWJ Disabled (JTAG-DP + SW-DP) */

通过注释就可以知道这些宏定义是使能SWD或者JTAG的

你可能感兴趣的:(STM32,单片机,stm32,嵌入式硬件,arm,学习)