
一、调试接口通用引脚1、JTAG/SWD接口引脚分布1JTAG和SWD是两种功能模式它们的引脚是物理复用的。各类微控制器均支持JTAG但只有ARM芯片支持SWDSWD是ARM的专有协议2ARM提供了标准20Pin的调试接口不需要改PCB设计调试器做不同配置即可切换不同工作模式。2、JTAG/SWD接口引脚定义引脚号JTAG功能SWD功能复用说明1VCCVCC供电引脚芯片本身有供电时可不接3TRSTN/U未使用JTAG复位SWD闲置5TDIN/U未使用JTAG数据输入SWD闲置7TMSSWDIO核心复用引脚用于数据传输和调试模式切换9TCLKSWCLK时钟信号复用引脚13TDOSWOJTAG数据输出 / SWD串行追踪打印15RESETRESET系统复位两种模式通用OtherGNDGND共用接地线二、JTAG/SWD调试概述1、JTAG/SWD调试原理简析1各类微控制器都包含用于高级调试功能的硬件利用这些调试功能上位机可以在取指对应指令断点或访问数据对应数据断点时停止内核。2内核停止时上位机可以查询内核的内部状态和系统的外部状态。查询完成之后上位机将恢复内核和系统并恢复程序执行。2、Cortex-M内核的调试端口1Cortex-M内核M0/M3/M4/M7等集成了串行SWD/JTAG调试接口SWJ-DP包括JTAG-DP接口5个引脚和SW-DP接口2个引脚。①JTAG调试接口JTAG-DP为5针标准JTAG接口。②串口调试接口SW-DP为2针串行调试接口时钟线数据线。2SWJ调试端口框图如下具体可参考芯片的数据手册。3STM32F10xxx的5个普通I/O口可用作SWJ-DP接口引脚这些引脚在所有的封装里都存在具体可参考芯片的数据手册下面都以STM32F10xxx为例展开介绍。三、JTAG引脚配置方法1、调试接口引脚释放1复位后MCU会将用于SWJ-DP的全部5个引脚指定为专用引脚AF0可供调试工具立即使用但是MCU可以禁止部分或者全部SWJ-DP端口进而释放相关引脚以用作GPIO口具体可参考芯片的数据手册。2实际开发中不建议将所有调试接口引脚全部禁用除非GPIO口资源确实非常紧张。2、JTAG引脚配置函数1STM32标准库需要调用GPIO_PinRemapConfig函数选择JTAG/SWD接口的工作模式。①函数原型void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState)②函数参数uint32_t GPIO_Remap决定调试接口的状态具体可见下表FunctionalState NewState决定是否使能所选择的状态宏定义效果释放的引脚GPIO_Remap_SWJ_NoJTRST全功能SWJ使能但无JTRST保留完整的JTAGSWD功能PB4GPIO_Remap_SWJ_JTAGDisable禁用JTAG使能SWD释放JTAG占用的引脚同时保留SWD用于调试PB3、PB4、PA15GPIO_Remap_SWJ_Disable完全禁用SWJ释放所有5个调试引脚但无法再通过JTAG/SWD进行调试和烧录PA13、PA14、PA15、PB3、PB4③注意事项禁用调试接口引脚将其作为普通GPIO引脚本质是引脚的重映射需要先使能AFIO的时钟才能进行相关操作。2STM32 HAL库提供了专门的函数来管理调试接口它们都是没有函数参数和返回值的。函数名效果释放的引脚HAL_AFIO_REMAP_SWJ_ENABLE使能JTAGSWDPB4HAL_AFIO_REMAP_SWJ_NOJTAG禁用JTAG使能SWD释放JTAG占用的引脚同时保留SWD用于调试PB3、PB4、PA15HAL_AFIO_REMAP_SWJ_DISABLE完全禁用SWJ释放所有5个调试引脚但无法再通过JTAG/SWD进行调试和烧录PA13、PA14、PA15、PB3、PB4四、调试方法1、硬件配置1JTAG/SWD接口只认识调试协议的信号PC的USB接口只能根据USB协议解析信号因此要想PC能够和芯片通过调试接口通信中间需要连接仿真器。2下图所示的是ST-Link和J-LinkDAPLink也有同样的功能它们内有独立单片机能够双向翻译PC和被调试芯片的协议数据。2、调试步骤调试接口是硬件配置对于上位机来说只需要有对应的软件支持调试协议即可软件界面可能各有不同但调试逻辑基本类似具体可参考《GNU DebuggerGDB使用教程》