STM32笔记之 SWJ(JTAG

您所在的位置:网站首页 dp线全称 STM32笔记之 SWJ(JTAG

STM32笔记之 SWJ(JTAG

#STM32笔记之 SWJ(JTAG| 来源: 网络整理| 查看: 265

写在前面: 本文章旨在总结备份、方便以后查询,由于是个人总结,如有不对,欢迎指正;另外,内容大部分来自网络、书籍、和各类手册,如若侵权请告知,马上删帖致歉。

 

目录

一、调试支持(DBG)

二、调试端口(serial wire and JTAG)

三、JTAG-DP和 SW-DP切换

四、JTAG/SWD复用功能重映射

五、跟踪引脚分配

六、释放 PA15、PB3、PB4作为 GPIO口使用

 

一、调试支持(DBG)

在 STM32F10x中,支持两种调试接口:1、串行接口;2、JATAG调试接口

其调试框图如下:

由以下几部分组成:

SWJ-DP:串行/JTAG调试端口AHP-AP:AHB访问端口ITM:执行跟踪单元FPB:闪存指令断点DWT:数据触发TPUI:跟踪单元接口(仅较大封装的芯片支持)ETM:嵌入式跟踪微单元(在较大的封装上才有支持此功能的引脚)

 

二、调试端口(serial wire and 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个引脚中的一些是复用的。

上面的图显示异步跟踪输出脚 (TRACESWO) 和 TDO是复用的,因此异步跟踪功能只能在 SW-DP调试接口上实现,不能在 JTAG-DP调试接口上实现。

 

三、JTAG-DP和 SW-DP切换

JTAG调试接口是默认的调试接口。 如果调试器想要切换到 SW-DP,必须在 TMS/TCK上输出一指定的 JTAG序列(分别映射到 SWDIO和 SWCLK),该序列禁止 JTAG-DP,并激活 SW-DP。该方法可以只通过 SWCLK和 SWDIO两个引脚来激活 SW-DP接口。

指定的序列是: 1. 输出超过 50个 TCK周期的TMS(SWDIO)= 1信号 2. 输出 16个 TMS(SWDIO)信号 0111100111100111 (MSB) 3. 输出超过 50个 TCK周期的TMS(SWDIO) = 1信号

 

四、JTAG/SWD复用功能重映射

当 STM32引脚不够用时,我们可以分配 JTAG/SWD的引脚作为普通 GPIO口来使用。

从上图或者通过查看数据手册的引脚定义可以看到,当系统复位后,会默认把以上引脚复用为调试功能;PA15引脚复位后的主要功能为 JTDI、PB3为 JTDO、PB4为 JNTRST,如果把这些引脚作为普通引脚使用时,则需要进行重映射。通过设置复用重映射和调试 I/O配置寄存器 (AFIO_MAPR) 的 SWJ_CFG[2:0]位,可以改变上述重映像配置。

 

这里的配置,在标准库文件中几个相关的宏定义分别为:

#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) */

并通过 GPIO_PinRemapConfig();函数写使(失)能

 

五、跟踪引脚分配

从上图我们可以知道,通过 SWJ_CFG[2:0]位重新选择映射 GPIO,可以释放对应的 IO口,但是,特别注意的是 PB3这个跟踪引脚;在另一张图中:

注意 PB3的脚注,“ I/O口只可在不使用异步跟踪时使用 ”

这里说一下异步跟踪模式和同步跟踪模式

异步模式

异步模式需要 1个额外的引脚并且存在于所有的封装。此模式仅在串行调试接口有效(不支持JTAG调试接口)。

同步模式

同步模式根据跟踪数据长度使用 2到 6个额外引脚,并且只存在于大封装芯片里。此外,此模式在 JTAG调试接口和串行调试接口下都可使用,并提供比异步跟踪更好的数据输出量。

因此,调试器需要设置 Debug MCU Configuration寄存器的 TRACE_IOEN和 TRACE_MODE[1:0]位来分配跟踪引脚。默认时,跟踪脚是不分配的。对应如下图:

 

六、释放 PA15、PB3、PB4作为 GPIO口使用

一般,我们都是用 JTAG接口或 SW接口对程序进行调试下载;常见的都是用 ST-Link来下载,所以用 SW接口用的比较多,但平常我们在引脚够用的时候,并不考虑去修改这些调试接口;当引脚不够用时,可以保留 SW-DP的接口,释放 PA15、PB3、PB4。

释放 PA15和 PB4这个容易,通过 GPIO_PinRemapConfig();函数,把 JTAG-DP接口禁止,只允许 SW-DP接口。

而 PB3这个调试引脚,比较特殊一点,需要设置 DBGMCU_CR寄存器,这个寄存器位说明如下:

我们要做的就是配置 TRACE_IOEN=0,不分配跟踪引脚。

上面说了,异步跟踪功能只能在 SW-DP调试接口上实现,当我们在软件上选择使用 SW-DP调试时,便会把一开始默认的 JTAG-DP切换到 SW-DP,而对应的,也会开启异步跟踪功能,使得我们可以在 IDE上可以进入 DEBUG模式调试。

就拿 keil编译来说:

一般我们是使用以下那种 ST-Link debug链接器的,如下图:

接着按上图的箭头指示点进去,可以得到下图:

然后,对应着上图,方框那里嘛,就是 SW-DP的 SWDIO去识别链接器,箭头指示那里,就是选择是 SW-DP模式还是 JATAG-DP模式,对应的选择不同,方框里的界面也不一样(应该说整个界面配置吧),可以看一下在 JATAG-DP模式的界面,如下图:

另外,由于我们使用的 ST-Link一般都是只有四根线,所以这也是为什么看到的教程都是说在 Port选项这里选 SW。

扯了这么多,最后,释放 PA15、PB3、PB4总的代码就是:

DBGMCU->CR = DBGMCU->CR & ~((uint32_t)1


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3