通过External Tools在STM32CubeIDE下使用DAP-LINK

2023-11-20

目录

一、文章背景

二、准备工作

2.1 Stm32CubeIDE

2.3 STM32目标板

三、配置过程

3.1 连接目标板

3.2 配置仿真器

3.3 更改调试设置为远程调试

3.4 新建OpenOcd扩展工具OpenOcd

3.5 通过变量选择CubeIDE的OpenOcd路径

3.6 选择OpenOcd配置脚本的路径

3.7 输入调试配置文件参数

3.8 扩展说明

四、自定义调试步骤

4.1 新建调试任务

4.2 添加第一个任务:运行OpenOcd

4.3 添加第二个任务:运行Debug

4.4 最终效果

五、调试


一、文章背景

       STM32开发者众多,有相当一部分人从Keil转移到了CubeIDE平台开发。开发过程中,基于各种原因,难免会需要使用DAP-LINK调试和仿真,笔者自己踩过坑,此前写了一篇博客专门介绍如何利用OpenOcd绕过CubeIDE只能用ST-LINK的限制,使用DAP-LINK调试STM32,感兴趣的可以移步:在Stm32CubeIDE环境下使用DAP-Link仿真

      该文章的方法至今依然有效,但使用方法太过繁琐,需要单独下载OpenOcd、写脚本、调试前需要运行脚本。后来笔者使用Stm32CubeIDE开发过程中有了几个意外发现:

  1. Stm32CudeIDE和其他基于Eclipse的IDE一样,支持外部工具。
  2. Stm32CudeIDE安装时就已经带了OpenOcd,不需要再另外下载。
  3. 用CubeIDE的外部工具配合内置的OpenOcd,可以不切出IDE,不依赖外部脚本,完美使用DAP-LINK调试。

下面给出完整的使用方法。

二、准备工作

2.1 Stm32CubeIDE

        官方可以免费下载安装,安装过程不在本篇文章讨论范围内,在此略过。有需要的可去官方下载:Stm32CubeIDE下载链接,截至本文撰写时,最新版为1.7。

        这个仿真器硬件有很多,因其开源特性广受欢迎。本人购买的是淘宝MUSE LAB出品,体积只有手指大小,非常精致,购买链接在此

2.3 STM32目标板

       调试目标板当然必不可少,本文的方法适用于所有STM32的MCU,笔者以一块STM32F072开发板为例进行演示。

三、配置过程

3.1 连接目标板

                CLK、GND、DIO...几根线依次接好。

3.2 配置仿真器

     CubeIDE菜单栏->RUN->Debug Configrations->STM32 Cortex-m C/C++ Application->New Configration。正常情况下,如果是用的ST-LINK就可以直接仿真调试了,如果使用DAP-LINK,会出现“No ST-LINK detected! Please connect ST-LINK and restart the debug session”这样的报错。

但是没关系,本文的目的就是解决这个报错。

3.3 更改调试设置为远程调试

       GDB连接设置改为远程GDB服务器-->端口保持默认-->调试探头改为OpenOCD-->取消勾选实时表达式。

3.4 新建OpenOcd扩展工具OpenOcd

       依次进入CubeIDE菜单栏->RUN->External Tools-> External Tools Configrations->Program(右键)->NEW Configration.

3.5 通过变量选择CubeIDEOpenOcd路径

 

         CubeIDE自带了很多环境变量,方便用户使用,其中有很多是IDE的各种插件的安装路径,OpenOcd的路径也在其中,可以点击“Variables“获取,在其后加上\openocd.exe使用。

  在其中找到OpenOcd的路径,并勾选。

3.6 选择OpenOcd配置脚本的路径

         OpenOcd作为调试服务器与目标板中间的交互接口,想要使用它调试,必须让OpenOcd知道调试使用的调试器类型,以调试的目标处理器类型,这两个参数,都以一系列脚本的形式,放在了OpenOcd的interface目录和Target目录。这一步骤就是选择这两个目录的根路径。

3.7 输入调试配置文件参数

        最后,在参数栏输入调试器和目标处理器的配置文件即可,由于本文使用的是DAP-LINK,目标处理器为STM32F072,因此:

DAP-LINK加STM32F0,配置参数为:

-f  .\interface\cmsis-dap.cfg  -f  .\target\stm32f0x.cfg

DAP-LINK加STM32F1,配置参数为:

-f  .\interface\cmsis-dap.cfg  -f  .\target\stm32f1x.cfg

DAP-LINK加STM32F4,配置参数为:

-f  .\interface\cmsis-dap.cfg  -f  .\target\stm32f4x.cfg

3.8 扩展说明

         对OpenOcd感兴趣的读者可以百度了解更多,实际上,笔者的教程。只是取巧从CubeIDE的安装目录中调用了一部分OpenOcd的配置。如果如笔者上一篇教程一样获取完整的OpenOcd,可以从OpenOcd目录中看到,OpenOcd其实支持很多调试器和目标处理器的,而不仅仅局限于DAP-LINK和STM32。ST官方只是摘取了STM32能用的那部分集成进了CudeIDE供自家处理器使用。

       

 至此,外部工具配置OK,下一步,正式开始调试。

 

四、自定义调试步骤

      自定义调试步骤这一步,其实就是先通过External Tools打开OpenOcd调试服务,再使用IDE的GDB调试服务去实现下载和调试,想深入了解调试过程的读者可以参考笔者另一篇文章:深入理解工具链-自己搭建STM32编程IDE

4.1 新建调试任务

          CubeIDE菜单栏->RUN->Debug Configrations->Launch Group->New Configration。

4.2 添加第一个任务:运行OpenOcd

 

4.3 添加第二个任务:运行Debug

4.4 最终效果

 

五、调试

       至此,CubeIDE完美支持DAP-LINK。工程编译完,点击界面的小虫子图标,执行咱们自定义的调试任务就可以了。

       Eclipse的外部工具不仅可以用于调用OpenOcd,实际上,它还可以调用任何可执行的外部命令,例如python脚本,如果你愿意,甚至可以利用它自动打开Vscode,查看工程当前的map文件、反汇编文件等,用好了,妙用无穷。

本文所述方法可能已在新版本的CubeIDE中失效,原因是官方更新新版本时作了进一步的检测和屏蔽,如果读者参考本文后仍然无法使用DAP-LINK,请移步新的文章参考:高版本CubeIDE下使用DAP-LINK教程

本文是作者闲时业余记录,如由遗漏错误,请见谅,感谢观看文章,转载不用注明出处。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过External Tools在STM32CubeIDE下使用DAP-LINK 的相关文章

  • 如何在 Spring Boot 中创建 Apache POI Excel 视图配置

    当我想使用 Spring Boot Web 将数据导出到 Excel 时遇到问题 我使用 Thymeleaf 作为模板引擎 由 Spring Boot 自动配置 但是当我在附加配置中添加 XmlViewResolver 时 由 XmlVie
  • C/C++ 代码的预处理器指令 #ifndef

    在 Eclipse 中 每当我创建一个新的 C 类 或者C头文件中 我得到以下类型的结构 假设我创建头文件 example h 我得到 Comments ifndef EXAMPLE H define EXAMPLE H Place to
  • JUnit Eclipse 显示 System.out.print() 的

    我正在使用 JUnit 3 和 Eclipse 3 4 当我运行 JUnit 测试用例时 一切正常并且测试完美完成 唯一的事情是我想查看我正在运行的类的输出 所有类都具有一些输出值的基本 System out print 因此 当我运行测试
  • 强制jvm返回本机内存[重复]

    这个问题在这里已经有答案了 我时不时地运行需要大量内存的 eclipse 任务 因此 当任务运行时 jvm 会消耗大约 2 3GB 的 RAM 这是可以的 但是一旦 jvm 占用了该内存 它就不会释放它 并且我遇到了一种情况 堆中已用内存约
  • Android 4.3 虚拟设备 CPU/ABI - 未安装系统映像(eclipse)

    I m trying to set up a new device but I can not continue with the process I think it s because the target version is 4 3
  • Emacs:在缓冲区求值期间将参数传递给下级 Python shell

    最近我开始使用 Emacs 作为 Python IDE 它不太直观 我现在遇到的问题是当使用 C c C c 评估缓冲区时如何将命令行参数传递给下级 python shell 感谢帮助 这似乎并不容易实现 管理的劣质流程python el模
  • setOnTouchListener() 给我一个错误

    button setOnTouchListener new OnTouchListener public void onClick View v Toast makeText MainActivity this YOUR TEXT 5000
  • 透视切换面板在 Eclipse 中消失

    Eclipse 崩溃后 小透视切换窗格从 Eclipse 窗口的右上角消失了 我下载了最新版本并尝试打开它 使用相同的工作区 但按钮仍然消失 这是一个屏幕截图 并放大 有任何想法吗 我仍然可以通过选择 窗口 gt 打开透视图 来切换透视图
  • (更好的方法)使用 Eclipse 和 XText 获取项目中的文件

    我正在编写一个 XText 编辑器 并进行一些语义突出显示 我正在解析的部分语言引用了文件 这些文件应该存在于项目中 我想根据这些文件是否位于正确的位置来突出显示 目前 我有一个非常丑陋的解决方案 但我确信有更好的方法 public voi
  • Mediaplayer 播放几次后停止播放

    我有一个按钮 按下它会播放一个随机声音剪辑 然后播放另一个声音剪辑 然后通过一个媒体播放器播放另一个声音剪辑 但是多次按下该按钮 15 20 次 后 所有音频都会停止 我在播放最后一个音频剪辑后释放媒体播放器 所以我不认为这是原因 有什么指
  • vs2008中的线程窗口在哪里

    我试图在 VS 2008 中找到描述的线程窗口here http www wintellect com cs blogs jrobbins archive 2007 08 01 neat new multithreaded debuggin
  • Lombok 不适用于 Eclipse Neon

    我下载了lombok jar lombok 1 16 14 jar 并将其放入我的下载中 然后我点击这个 jar 执行正确地识别了我的 MacOS 上的 Eclipse 实例 然后我选择了我想要的实例 Lombok也在pom xml中指定
  • Android 的代码覆盖率[重复]

    这个问题在这里已经有答案了 可能的重复 Android测试代码覆盖率 Eclipse https stackoverflow com questions 3282702 android test code coverage eclipse
  • 如何在eclipse或jar-file-explorer中查看jar文件的内容

    我正在开发一个项目 我需要知道我的网络项目中包含的 jar 文件的内容 我正在使用 Eclipse 朱诺 然而 Netbeans 提供了这些功能来查看 jar 文件的内容 请建议我如何在 eclipse 中实现这一点 在项目资源管理器中 您
  • java.lang.ClassNotFoundException:javax.mail.MessagingException

    我想使用 eclipse 将电子邮件从我的 gmail 帐户发送到另一个邮件帐户 我使用 apache tomcat 7 0 34 作为我的 Web 服务器 并使用端口 8080 作为 apache 服务器 HTTP 1 1 并使用 JRE
  • 将非 Android 项目添加到 Android 项目

    我在 Eclipse 中有三个项目 Base Server 和 AndroidClient Base和Server是Java 1 7项目 而AndroidClient显然是一个android项目 基础项目具有在服务器和 Android 客户
  • 生成 equals 和 hashcode 时忽略属性

    假设我有一个类 Customer public class Customer private String firstName private String lastName private String doNotAddMeToEqual
  • 无法加载 JavaHL 库。- linux/eclipse

    在尝试安装 Subversion 插件时 当 Eclipse 启动时出现此错误 Failed to load JavaHL Library These are the errors that were encountered no libs
  • Java:同步标准输出和标准错误

    我有一个奇怪的问题 如果我能解决它就好了 出于调试目的 以及其他一些事情 我在标准输出上编写控制台 Java 应用程序的日志 有些内容写在标准输出上 有些内容 例如错误 打印在标准错误上 问题是这两者并不完全同步 因此打印行的顺序并不总是正
  • Java:无法从同一包中的不同类访问静态变量

    这很奇怪 因为我有一个可以访问 Frame dimension getWidth 的 Character 类 及其伙伴 getHeight 但是当我想在 Map 类中使用它时 Eclipse 强调了它并且无法给我反馈 运行该程序最终会出现

随机推荐

  • 报错:Can‘t locate Win32/Console.pm in @INC (you may need to install the Win32::Console module)

    安装Open SSL中执行命令 perl Configure VC WIN32 no asm prefix C Dpan javaProject OpenSSL openssl 1 1 1b 出现以下错误 Can t locate Win3
  • Hi3516全系统类型烧录教程

    烧录资料下载 https gitee com hihope iot docs tree master HiSpark AI Camera Developer Kit Software tools 第一步 安装好hitool usb 烧写的驱
  • 鼠标右键添加git

    1 打开注册表 win R 输入regedit 2 找到HKEY CLASSES ROOT Directory Background目录 3 查看是否有shell这个目录 如果没有就添加 4 在shell目录下添加 项 鼠标右键点击新建 项
  • java-IO流(5)-IO流中的设计模式(装饰器模式和适配器模式)的介绍

    目录 1装饰器模式 1 1定义 1 2代码实现 1 3装饰器特点 1 4装饰器在IO流中的使用 2配适器模式 2 1Adapter适配器 2 2代码实例 2 3适配器特点 2 4适配器优缺点 2 5适配器在IO中的使用 3装饰器与适配器异同
  • C++中STL的string vector使用笔记

    文章目录 容器 STL使用的基本方式 常用容器的基本概念和使用 string容器的特性 string初始化 拼接 赋值 查找 初始化 赋值操作 取值操作 拼接操作 查找 string替换 比较 字串 插入和删除 替换 比较 截取子串 插入删
  • 对象池GenericObjectPoolConfig

    Apache commons pool本质上是 对象池 即通过一定的规则来维护对象集合的容器 commos pool在很多场景中 用来实现 连接池 任务worker池 等 大家常用的dbcp数据库连接池 也是基于commons pool实现
  • 互联网创业盈利模式指南

    看了很多创业的case 都有点下笔千言 离题万里的 情况 就是很多case都很精彩 但是公司 的价值最终是落实到 给创业者和投资人的回报的 因此 所有的case 最终都是 落实到盈利 模式上 一位投资人士说的很明确 中国的盈利模式很简单 就
  • 一、深度学习之anaconda以及Tensorflow的安装

    1 anaconda安装 在官网Free Download Anaconda下载anaconda5 2 Python3 6 按照下一步直到安装结束 注意 将两个选项都勾选上 将安装路径写入环境变量 2 安装Tensorflow 1 建立一个
  • 围棋吃子问题

    题目 Given a 2D board containing X and O capture all regions surrounded by X A region is captured by flipping all O s into
  • 浮生六记

    浮生六记 目录 浮生六记卷一 闺房记乐 002 浮生六记卷二 闲情记趣 015 浮生六记卷三 坎坷记愁 022 浮生六记卷四 浪游记快 034 浮生六记 2 浮生六记卷一 闺房记乐 余生乾隆癸未冬十一月二十有二日 正值太平盛世 且在 衣冠之
  • Android 性能优化系列:崩溃原因及捕获

    文章目录 崩溃的基本原因 抛出异常导致崩溃分析 AMS 如何承接应用的异常信息上报 对于 native crash 系统如何做处理 系统如何处理 ANR 异常数据 addErrorToDropBox DropBoxManager 在 Cra
  • 用简单易懂的话语来快速入门windows缓冲区溢出

    用简单易懂的话语来快速入门windows的缓冲区溢出教程 准备工具 immunity debugger https www immunityinc com products debugger WINDOWS的程序动态调试工具 Vulnser
  • matlab_多目标遗传算法

    前言 之前写过在python中的多目标遗传算法了 但是很可惜的是python调用商用有限元软件比较费事 需要在ironpython的编译环境下调用 然后这个ironpython它又是个老古董 不支持pandas和numpy这些python必
  • Transformer 模型详解

    本内容主要参照 此篇 然后结合个人理解新增和删减部分内容形成 文章目录 1 1 Transformer 概览 1 2 引入张量 1 3 Self Attention 自注意力 1 3 1 Self Attention 概览 1 3 2 Se
  • VirtualBox虚拟机网络连接设置的四种方式

    VirtualBox是一款SUN出品的非常优秀的虚拟机程序 版本也非常齐全 你可以在官网上找到适合各种操作系统平台的版本 这里我先给大家大致讲解下VBox的网络配置及应用 VirtualBox的提供了四种网络接入模式 它们分别是 1 NAT
  • mid360 SLAM 建图实现

    用别人分享的数据集试了下 室内建图问题不大 室外还不确定
  • Exynos4412 中断驱动开发(一)—— 中断基础及中断的注册过程

    一 中断基础概念 所谓中断 指CPU在执行程序的过程中 出现了某些突发事件即待处理 CPU必须暂停当前的程序 转去处理突发事件 处理完毕后CPU又返回原程序被中断的位置并继续执行 1 中断分类 a 内部中断和外部中断 根据中断的的来源 中断
  • (数据结构)树转换为二叉树、森林转换为二叉树、二叉树转换为树、二叉树转换为森林及树与森林的遍历

    1 树转换为二叉树 1 加线 在所有兄弟结点之间加一条线 2 去线 对树中每个结点 只保留它与第一个孩子结点的连线 删除它与其他孩子结点之间的连线 3 层次调整 以树的根结点为轴心 将整棵树顺时针旋转一定的角度 使之结构层次分明 注意第一个
  • 结束了在MSRA的实习

    从5月到11月底 总共在MSRA渡过了7个月的实习时光 这7个月似乎是我感觉过得最快的7个月 或许是一个人在北京 生活上没有太多的琐事 只有很单纯的工作 于是就有这种时光飞逝的感觉 当然 记忆里面也并非都是工作上的事情 在MSRA还认识来自
  • 通过External Tools在STM32CubeIDE下使用DAP-LINK

    目录 一 文章背景 二 准备工作 2 1 Stm32CubeIDE 2 2 DAP LINK 2 3 STM32目标板 三 配置过程 3 1 连接目标板 3 2 配置仿真器 3 3 更改调试设置为远程调试 3 4 新建OpenOcd扩展工具