当前位置: 首页 > news >正文

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个引脚中的一些是复用的。
在这里插入图片描述

SWD和JTAG调试端口引脚

在这里插入图片描述

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

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

在这里插入图片描述

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的

相关文章:

  • cmake语法:option,add_definition,add_dependencies的基本作用
  • Nmap详细使用
  • CREO:CREO软件之工程图【注释】之尺寸、注解、表面粗糙度、符号、几何公差的简介及其使用方法(图文教程)之详细攻略
  • FastAPI 学习之路(三十)中间件
  • Springboot整合redis
  • Python对象序列化
  • Linux-Linux内核-进程调度
  • LabVIEW重入:允许同时调用同一子VI
  • 『网易实习』周记(五)
  • 【glib】vs2022 v163 debug win32: meson构建 glib-2.67.6
  • JlinkV9的Vtref详解
  • Thinkphp5.1对接ueditor(自定义上传接口)
  • “双非”渣本投岗爱奇艺(Java),三轮技术面等消息,侥幸通过!
  • FlinkSQL系列04-CDC连接器
  • 包-node.js中的第三方模块
  • [译] 怎样写一个基础的编译器
  • 【comparator, comparable】小总结
  • android图片蒙层
  • css属性的继承、初识值、计算值、当前值、应用值
  • ERLANG 网工修炼笔记 ---- UDP
  • ES6 ...操作符
  • js操作时间(持续更新)
  • learning koa2.x
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • nodejs实现webservice问题总结
  • oschina
  • PhantomJS 安装
  • Python学习之路13-记分
  • underscore源码剖析之整体架构
  • 对象管理器(defineProperty)学习笔记
  • 给github项目添加CI badge
  • 工程优化暨babel升级小记
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 前端js -- this指向总结。
  • 小程序 setData 学问多
  • 学习Vue.js的五个小例子
  • 容器镜像
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • # .NET Framework中使用命名管道进行进程间通信
  • # centos7下FFmpeg环境部署记录
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #QT项目实战(天气预报)
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • $.ajax()方法详解
  • $L^p$ 调和函数恒为零
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (六)vue-router+UI组件库
  • (篇九)MySQL常用内置函数
  • (十三)Flask之特殊装饰器详解
  • (算法二)滑动窗口