0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

浅谈STM32调试DEBUG相关知识

黄工的嵌入式技术圈 来源:黄工的嵌入式技术圈 2020-03-06 15:23 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

学习STM32开发,肯定少不了DEBUG调试这一步骤。那么,本文带你了解一下这个调试相关的知识。

本文以STM32F1、Cortex-M3为例,其它系列芯片或内核,原理相同或类似。

1概况

在STM32中,有很多调试组件。使用它们可以执行各种调试功能,包括断点、数据观察点、 闪存地址重载以及各种跟踪。

STM32F1使用Cortex-M3内核,该内核内含硬件调试模块,支持复杂的调试操作。

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

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

2

调试框图

STM32F1和Cortex-M3的调试框图:

提示: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调试)接口引脚:

4

SWJ调试端口(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调试端口:

上面的图显示异步跟踪输出脚(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信号

5

JTAG脚上的内部上拉和下拉

保证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口。


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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    147

    文章

    19116

    浏览量

    403521
  • STM32
    +关注

    关注

    2313

    文章

    11189

    浏览量

    374571
  • DEBUG
    +关注

    关注

    3

    文章

    95

    浏览量

    21438
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    使用 VS Code 和 cortex-debug 调试运行 Zephyr OS 的 MR-CANHUBK3,是否有可供下载的 SVD 文件?

    我们想使用 VSCode 和 cortex-debug 调试运行 Zephyr OS 的 MR-CANHUBK3。需要一个 SVD 文件才能查看寄存器值。 是否有可供下载的 SVD 文件?
    发表于 04-20 11:45

    STM32N6 在 PSRAM 上运行代码的调试

    开发其产品过程中,使用了 STM32N657X0H3Q。客户的代码很大,不能放在SRAM 上运行,想放在 PSRAM 上去运行,并咨询如何在 STM32CubeIDE 上进行调试。2.2. 重现问题关于如何将用户代码放置在 PS
    发表于 04-15 16:02 0次下载

    LAT1621_STM32N6 在 PSRAM 上运行代码的调试

    STM32N657X0H3Q。客户的代码很大,不能放在SRAM 上运行,想放在 PSRAM 上去运行,并咨询如何在 STM32CubeIDE 上进行调试
    发表于 03-11 10:44 0次下载

    告别USB线!无线ADB调试,附全志/瑞芯微实战教程

    前言:作为嵌入式开发者,很多人习惯性使用ADB而不是调试debug串口。尤其是在使用buildroot或ubuntu这类非Android系统的嵌入式设备时,传统的ADB调试依赖于通过USB线将设
    的头像 发表于 01-23 08:32 5712次阅读
    告别USB线!无线ADB<b class='flag-5'>调试</b>,附全志/瑞芯微实战教程

    Unix的相关知识

    调试。 健壮原则:健壮源于透明与简洁。 表示原则:把知识叠入数据以求逻辑质朴而健壮。 通俗原则:接口设计避免标新立异。 缄默原则:如果程序没什么好说的,就保持沉默。 补救原则:出现异常时,马上退出并
    发表于 12-10 07:13

    进迭时空 debug upstream | 取之于开源,贡献于开源

    Debug相关软件项目概览RISC-V调试所涉及的核心开源软件主要包括GDB和OpenOCD。GDB(GNUDebugger)是GNU项目下的功能强大的源码级调
    的头像 发表于 11-17 09:33 5678次阅读
    进迭时空 <b class='flag-5'>debug</b> upstream | 取之于开源,贡献于开源

    e203 debug失败是什么原因导致的?

    使用芯来的调试器+其它的fpga开发板+linux进行debug时,flash版本的出现错误,itcm版本的能下载,但是不能进行仿真,详细请查看附件连接,有哪位遇到过这种问题?欢迎解答下,感谢。启动时在0x0处中断了。
    发表于 11-07 07:38

    Nuclei Studio软件调试debug分享

    一、问题描述 想调试MCU200t板子,参考“4.4.5. Run Hello World Project”的流程,没有跑通。设置: “RV-Tools -&gt; SDK
    发表于 10-31 07:35

    Nuclei Studio 编译调试工程

    和bss段,以及总大小的十进制和十六进制数值。 GD-Link调试 在“Run-&gt;Debug Configurations”下可配置调试信息 1.双击GDB OpenOCD
    发表于 10-30 06:31

    基于FPGA平台的蜂鸟E203 JTAG debug出错问题的解决思路

    大概花了三天时间完成了蜂鸟E203 SOC在zynq7100 FPGA的移植工作,并完成了hello world程序的在线debug调试。 蜂鸟E203的移植在网上有大把的demo,其中bit文件
    发表于 10-28 07:38

    如何实现Infineon TRAVEO T2G系列MCU的安全调试

    随着汽车电子系统变得越来越智能,对功能安全(Safety)的要求越来越高,同时信息安全(Security)也越来越被关注,安全调试(Secure Debug)机制已成为一个重要的信息安全特性
    的头像 发表于 09-05 09:37 3544次阅读
    如何实现Infineon TRAVEO T2G系列MCU的安全<b class='flag-5'>调试</b>

    如何调试nRF5 SDK

    本文将讲述Nordic nRF5 SDK的主要调试手段,以帮助大家快速定位问题,并解决问题。一般来说,你可以通过打log方式,IDE的debug模式,SDK自带的app_error_check函数
    的头像 发表于 06-24 08:59 1134次阅读
    如何<b class='flag-5'>调试</b>nRF5 SDK

    STM32H745XIH6不能进行双核调试,CM4不能进行在线调试怎么解决?

    你好, 问题: STM32H745XIH6不能进行双核调试,CM4不能进行在线调试软件:KEIL 5.41调试器STLINK V3按照手册文档AN5286双核
    发表于 06-09 06:58

    使用STM32CubeIDE对STM32H7进行开发和调试,CM4始终报\"Failed to read ROM table via AP 3\"错误怎么解决?

    我正在使用STM32CubeIDE对STM32H7系列双核微控制器进行开发和调试,但遇到了一个顽固的问题,希望能得到社区的帮助和建议。 ### 问题描述 我根据应用手册AN5361,使用内置示例
    发表于 05-14 06:20

    STM32H7双核调试,CM7能成功调试但CM4始终报\"Failed to read ROM table via AP 3\"错误是怎么回事?

    我正在使用STM32CubeIDE对STM32H7系列双核微控制器进行开发和调试,但遇到了一个顽固的问题,希望能得到社区的帮助和建议。 ### 问题描述 我根据应用手册AN5361,使用内置示例
    发表于 04-27 06:40