良许Linux教程网 干货合集 STM32(Cortex-M)内核DEBUG调试接口知识

STM32(Cortex-M)内核DEBUG调试接口知识

学习MCU开发过程中,DEBUG调试是不可或缺的一环。

以STM32F1系列和Cortex-M3内核为例(其他系列芯片/内核原理类似),我们来探讨一下与调试接口相关的知识。

1. 概述

在STM32系列中,有多种调试组件可供使用,它们能够执行各种调试任务,包括断点设置、数据观察点配置、闪存地址重载以及各类跟踪功能。

STM32F1系列采用Cortex™-M3内核,该内核内置了硬件调试模块,可以支持各种复杂的调试操作。

硬件调试模块允许内核在执行指令(指令断点)或访问数据(数据断点)时停止。一旦内核停止,就可以查询内核的内部状态以及系统的外部状态。在完成查询后,内核和外设可以被重新启动,程序将继续执行。

当STM32F10x微控制器连接到调试器并启动调试时,调试器会利用内核的硬件调试模块来执行调试操作。

2调试框图

STM32F1和Cortex™-M3的调试框图:

image-20240309213445122
image-20240309213445122

提示:Cortex™-M3内核内含的硬件调试模块是ARM CoreSight开发工具集的子集。

ARM Cortex™-M3内核提供集成的片上调试功能。它由以下部分组成:

  • SWJ-DP:串行/JTAG调试端口
  • AHP-AP:AHB访问端口
  • ITM:执行跟踪单元
  • FPB:闪存指令断点
  • DWT:数据触发
  • TPUI:跟踪单元接口(仅较大封装的芯片支持)
  • ETM:嵌入式跟踪微单元(在较大的封装上才有支持此功能的引脚),专用于STM32F1的调试特性
  • 灵活的调试引脚分配
  • MCU调试盒(支持低电源模式,控制外设时钟等)

3调试接口

STM32支持两种调试接口:

  • 串行接口
  • JTAG调试接口

STM32的5个普通I/O口可用作SWJ-DP(串行/JTAG调试)接口引脚:

image-20240309213449498
image-20240309213449498

4SWJ调试端口(serial wire and JTAG)

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

**1.JTAG调试接口(JTAG-DP)**为AHP-AP模块提供5针标准JTAG接口。

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

在SWJ-DP接口中, SW-DP接口的2个引脚和JTAG接口的5个引脚中的一些是复用的。

SWJ调试端口:

image-20240309213453681
image-20240309213453681

上面的图显示异步跟踪输出脚(TRACESWO)和TDO是复用的。因此异步跟踪功能只能在SWDP调试接口上实现,不能在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信号

5JTAG脚上的内部上拉和下拉

保证JTAG的输入引脚不是悬空的是非常必要的,因为他们直接连接到D触发器控制着调试模式。必须特别注意SWCLK/TCK引脚,因为他们直接连接到一些D触发器的时钟端。

为了避免任何未受控制的I/O电平, STM32在JTAG输入脚上嵌入了内部上拉和下拉。

  • JINTRST:内部上拉
  • JTDI:内部上拉
  • JTMS/SWDIO:内部上拉
  • TCK/SWCLK:内部下拉

一旦JTAG I/O被用户代码释放, GPIO控制器再次取得控制。这些I/O口的状态将恢复到复位时的状态。

  • JNTRST:带上拉的输入
  • JTDI:带上拉的输入
  • JTMS/SWDIO:带上拉的输入
  • JICK/SWCLK:带下拉的输入
  • JTDO:浮动输入

软件可以把这些I/O口作为普通的I/O口使用。

6利用串行接口并释放不用的调试脚作为普通I/O口

为了利用串行调试接口来释放一些普通I/O口,用户软件必须在复位后设置SWJ_CFG=010,从而释放PA15, PB3和PB4用做普通I/O口。

在调试时,调试器进行以下操作:

  • 在系统复位时,所有SWJ引脚被分配为专用引脚(JTAG-DP + SW-DP)。
  • 在系统复位状态下,调试器发送指定JTAG序列,从JTAG-DP切换到SW-DP。
  • 仍然在系统复位状态下,调试器在复位地址处设置断点
  • 释放复位信号,内核停止在复位地址处。
  • 从这里开始,所有的调试通信将使用SW-DP接口,其他JTAG引脚可以由用户代码改配为普通I/O口。

提示:这个地方就是需要大家配置相关的引脚。

以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !

137e00002230ad9f26e78-265x300
本文由 良许Linux教程网 发布,可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。
良许

作者: 良许

良许,世界500强企业Linux开发工程师,公众号【良许Linux】的作者,全网拥有超30W粉丝。个人标签:创业者,CSDN学院讲师,副业达人,流量玩家,摄影爱好者。
上一篇
下一篇

发表评论

联系我们

联系我们

公众号:良许Linux

在线咨询: QQ交谈

邮箱: yychuyu@163.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部