基于 OpenOCD 的 STM32CubeIDE 开发烧录调试环境搭建-DAPLINK

2023-11-06

STM32cubeIDE 是ST官方推出的一款用于开发 STM32 的工具,整合了 STM32CubeMX 和 TrueSTUDIO 而成,对于 STM32 的开发这个工具应该会在未来成为主流,毕竟有官方加持又商用免费。但仿真烧录只支持 J-LINK 和 ST-LINK 或 OpenOCD。

CMSIS-DAP/DAPLink 仿真器是硬件软件均开源的仿真器,相比当前市面上流行的jlink/st-link,烧录速度快,不丢固件,无版权风险,功能丰富,价格低廉,外观简洁精致,能较好的满足电子工程师进行日常的开发调试下载需求。

然而 STM32CubeIDE并没有直接支持它,只能通过 OpenOCD 的方式间接支持。本篇就介绍如何通过 OpenOCD 使得 STM32CubeIDE 支持 DAPLINK 调试工具

测试环境与准备

DAPLink 仿真器购买:淘宝-MUSE LAB 型号: DAPLINk
STM32CubeIDE:V1.5.1
OpenOCD下载:Version 20201228
经测试:淘宝-维特智能 的CMSIS-DAP也使用本教程

部署 OpenOCD

  1. 下载好OpenOCD,解压到任意目录,建议路径不带空格或中文
  2. 并在 bin 目录右键,新建文本文档,并重命名为 DAP-Linkl-stm32F4.bat(前缀名称可以随意,后缀 .bat不能更改)
    重命名
  3. 右键编辑或者使用 vs-code 打开
    编辑bat
  4. 输入以下内容:
openocd -f interface/cmsis-dap.cfg -f target/stm32f4x.cfg

意思是:使用cmsis-dap调试stm32f4,这里默认使用 SWD 接口。通过其他配置,还可以支持 J-link 接口,未做尝试,不再叙述。

后面的 stm32f4x.cfg 需要适配你的芯片型号,具体支持型号可以在 OpenOCD-20201228-0.10.0\share\openocd\scripts\target 的目录,在里面能找到
target
可以看到 stm32 大部分型号都支持了。F1系列 的就改为 stm32f1x.cfg,F7系列 的就改为 stm32f7x.cfg,同理类推。

  1. 单击 DAP-Linkl-stm32F4.bat 执行,会弹出一下窗口,表示连接成功。最小化窗口,保持后台运行。
    打开bat

STM32CubeIDE 配置

  1. 新建测试工程(我的是 LED 亮灭测试)
  2. 单击菜单栏 Debug图标(绿色甲壳虫)旁的下拉按钮,单击选择 Debug Configurations 进入配置界面
    debug打开
  3. 配置如下图所示,
    一定要:取消勾选 Live Expressions,网上教程都没这一步,导致调试失败。
    取消勾选原因:Does STM32CubeIDE not support live variable watching?
    debug配置
  4. 弹窗单击 Switch ,进入调试界面
    switch

仿真测试

进入仿真调试界面,可以看到 GPIOC(LED的 IO 为 GPIOC_13) 的 寄存器 ODR 值会随着程序运行改变。
调式

再看另外两个窗口:现场表达式Expressions
可以看到 现场表达式 是无法使用的(由于前面取消勾选了 Live Expressions),但Expressions是可以的。而这两者很相似啊,具体区别也未查到,不知道是软件的bug还是什么情况。反正还是可以实时查看表达式值就很开心

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

基于 OpenOCD 的 STM32CubeIDE 开发烧录调试环境搭建-DAPLINK 的相关文章

  • 设备树不匹配:.probe 从未被调用

    我无法理解设备树的工作原理 或者具体来说为什么该驱动程序无法初始化 这是在 android 版本 3 10 的 rockchip 供应商内核中 驱动程序 看门狗 rk29 wdt c 为了可读性而减少 static const struct
  • Netbeans 自动完成功能停止工作?

    我使用的是 Netbeans 6 9 1 一切都很好 但是突然间 它停止检测对代码所做的任何更改 例如新变量 函数等 如果我尝试重构 重命名变量 例如按 CTRL R 它说 重构在此上下文中不可用 如果重要的话 它在 PHP 项目中 有任何
  • 如何在WinMobile6上启用ARMv6非对齐访问?

    ARMv6 引入了一个很棒的功能 未对齐的内存访问 这使得代码中的某些事情变得更加简单和更快 但微软只在winCE6中提供了API 现在大多数 PDA 都基于 WinMobile6 基于 CE 5 x 默认情况下禁用未对齐访问 我尝试在 C
  • 可以对 Xcode 中的 Arm 架构设置进行一些澄清

    据我了解 iPhone 5将采用新的架构 armv7s 我的项目具有有效的架构armv7 并且有Build Active Architecture Only set to true 由于现在商店中的每个应用程序都是为armv6 and or
  • 上下文切换到安全模式(arm trustzone)的成本是多少

    我试图了解在arm中可信 安全 和非安全模式之间来回切换的成本 从非安全世界转移到安全世界时到底需要发生什么 我知道需要设置 ns 位 基于某些特殊指令 需要刷新和更新页表 刷新和更新处理器缓存 还有什么需要发生的吗 处理器缓存 它们是分段
  • 哪些 GCC 优化标志对二进制大小影响最大?

    我正在使用 GCC 为 ARM 开发 C 我遇到了一个问题 我没有启用优化 我无法创建二进制文件 ELF https en wikipedia org wiki Executable and Linkable Format 对于我的代码 因
  • aarch64 Linux 硬浮点或软浮点

    linux系统有arm64 有arm架构armv8 a 如何知道 Debian 运行的是硬浮动还是软浮动 符合 AAPCS64 GNU GCC for armv8仅提供硬浮动aarch64工具链 这与 armv7 a 的 GCC 不同 后者
  • ARM 的内核 Oops 页面错误错误代码

    Oops 之后的错误代码给出了有关 ARM EX 中的恐慌的信息 Oops 17 1 PREEMPT SMP在这种情况下 17 给出了信息 在 x86 中它代表 bit 0 0 no page found 1 protection faul
  • 错误:-march= 开关的值错误

    我写了一个Makefile 但无法让它工作 我有一个选项应该选择编译到哪个处理器 然而 当我跑步时make从命令行它说 tandex tandex P 6860FX emulators nintendo sdks 3DS SDK HomeB
  • 直接写入 ARM Cortex A8 分支预测器中的全局历史缓冲区 (GHB) 或 BTB?

    我有兴趣直接修改 Cortex A8 上的 BTB 分支目标缓冲区 和 GHB 的内容 ARM 手册上有这样的内容 要在指令端 GHB 数组中写入一项 例如 LDR R0 0x3333AAAA MCR p15 0 R0 c15 c1 0 M
  • 当我尝试在 Armv8 程序集中分配数组时,执行冻结

    所以我正在用汇编语言进行编程 这只是一个简单的代码 这样我就可以学习如何分配数组 以便稍后在 NEON 编程中使用它们 ASM FUNC FPE data balign 8 array skip 80 array1 word 10 20 3
  • 2022年Android CPU架构分布(armeabi-v7a vs arm64-v8a)

    有没有关于 2022 年 Android 设备上的架构使用情况的官方信息 我有一个支持armeabi v7a 和arm64 v8a 的应用程序 我想要放弃对armeabi v7a的支持并且仅支持 64 位设备 arm64 v8a 但我找不到
  • 在 ARM Cortex-M3 中使用 newlib 的 malloc

    我正在为 ARM Cortex M3 NXP 的 LCP17xx 创建代码 到目前为止我一直在使用静态内存 一切都运行良好 我尝试添加动态内存支持 但是一旦调用 malloc 系统就会卡住 我正在使用 gcc 为 Arm Bare Meta
  • 如何从 Sublime Text 编辑器调试 Java 应用程序

    有时我正在对相当大的 Java 应用程序进行简单的修复 但我不想打开 Eclipse 来执行此任务 Eclipse 启动时间很长 并且由于该项目是由大量子项目构建的 而这些子项目无论如何都是由 Maven 构建的 因此需要很长时间才能使用
  • 如何成功使用 VIM 作为 Code::Blocks 的外部编辑器?

    我真的很喜欢 Code Blocks 的构建系统和单步调试能力 也就是说 我真的很喜欢使用 gcc gdb 的包装器 而不是从 Makefile 或命令行使用它们 问题是 多年来使用 VIM 使我的大脑受到了严重损伤 或者有些人可能会说被宠
  • Delphi 2009 IDE结构视图折叠功能

    现在有谁知道折叠 Delphi 2009 IDE 结构视图中的所有项目吗 我不知道折叠所有项目 这使我很难从视图中找到我的课程 Thanks 选择根节点 类 并按数字键盘上的 除号 那会让一切崩溃 然后按数字键盘上的 加号 键 第一级将展开
  • 如何在数据部分(RAM)中保留一定范围的内存并防止同一应用程序使用该内存的堆/堆栈?

    我想在 RAM 中保留 分配一定范围的内存 并且同一应用程序不应覆盖或使用该范围的内存进行堆 堆栈存储 如何在内存中分配一定范围的内存以防止堆栈 堆覆盖 我考虑过向应用程序本身添加 或分配 一个数组并保留内存 但它被编译器优化了 因为它在应
  • 如何在 Linux 内核中定义并触发我自己的新软中断?

    我想在 Linux 内核中创建自己的软中断 这是正确的方法吗 In the init我想触发该模块的softirq我将添加一个调用 394 void open softirq int nr void action struct softir
  • 如何在 Code::Blocks 中启用 C 自动完成?

    如何在 Code Blocks 中启用 C Std lib 函数自动完成 转到 设置 gt 编辑器 gt 代码完成和符号浏览器 并确保未选中 禁用代码完成
  • 将 32 位值加载到 Arm 汇编中的寄存器中

    我想使用arm汇编将1个32位十六进制直接加载到寄存器中 mov r1 0x6c617669 这不能使用 因为从该指令我们只能加载 8 位值 所以我直接从内存加载32位值 那么如何将32位值存储在内存中并使用arm汇编将其直接加载到寄存器中

随机推荐

  • JDK8-lambda常用汇总

    来源 juejin im post 5ce66801e51d455d850d3a4a 一 引言 java8 最大的特性就是引入 Lambda 表达式 即函数式编程 可以将行为进行传递 总结就是 使用不可变值与函数 函数对不可变值进行处理 映
  • idea代码检测工具sonar和alibaba插件

    下面介绍两种代码检测插件的安装和使用 SonarLint和aibaba 使用起来主要有以下区别 Alibaba代码规范插件主要检测代码规范 SonarLint主要检测代码是否正确 存在的问题 安全漏洞等 安装方法 file settings
  • 【笔试题】素数天购买设备

    题目描述 题解 自己尝试解了一下 不知道对不对 import java util public class Main public static Map
  • Modulo Summation——UPC

    题目描述 You are given N positive integers a1 a2 aN For a non negative integer m let f m m mod a1 m mod a2 m mod aN Here X m
  • 使用QT环境Mingw64编译Boost库(GCC)

    1 首先得拿到QT creator Boost 下载链接 qt opensource windows x86 5 13 0 exe http download qt io archive qt 5 13 5 13 0 qt opensour
  • 【Zotero】学习笔记|只需简单几步为Zotero设置深色模式!

    具体可参考GitHub中教程 作者作为一个简单的汉化介绍 Rosmaninho Zotero Dark Theme Step1 转到用户配置文件文件夹 Windows users C Users User name AppData Roam
  • C++多态的方式:重写和重载

    引用 windows程序员面试指南 重写和重载 C 多态的实现方式包括重载和重写 重写 重写是动态的多态 通过C 的虚函数实现 重载 重载是静态的多态 在同一个作用域内 具有相同函数名 不同的形参个数或者形参类型实现重载 和返回值类型无关
  • Unity 初识Mesh绘制面(一)

    Unity中渲染出的3D物体组成内容 首先我们先在Unity3D中创建一个Cube 在Inspector可以看到其中含有MeshFilter MeshRenderer组件 由此可见如果你想要展示一个3D游戏物体 它必须拥有两个组件 Mesh
  • 51单片机控制的自动感应调光、坐姿矫正智能台灯

    目录 一 元件清单 二 实现效果 三 主要内容 四 代码 五 总结 一 元件清单 AT89C51单片机 ADC0809 5V有源蜂鸣器 USB电源线DC电源插头 万用板 红外接近传感器 红外遥控器 红外接收头 人体感应模块HC SR501
  • 陷波滤波器设计及应用

    最近有个对陷波滤波器应用的需求 具体见 单相PWM整流反馈电压陷波滤波的好处 博文记录 在同事现成的推导过程中做相关整理 方便以后使用 陷波滤波器的传递函数有多种形式 同事采用了如下的G s 其中是陷波频率 是陷波系数 陷波滤波器有三个指标
  • keil中添加STC单片机

    目前的keil4数据库里面没有STC的数据库 每次都要替换 现在教大家一种方法 我试过的最有效的方法 在不改变原有库的情况下添加STC的数据库 1 把下载的文件解压 复制到keil安装文件下的UV4里 例如E Keil UV4 2 更改ke
  • Java基础语法结构

    顺序结构 java的基本结构就是顺序结构 除非特别指明 否则就是按从上到下执行 顺序结构是最简单的算法结构 顺序结构的程序语句只能被执行一次 如果您想要同样的操作执行多次 就需要使用循环结构 顺序结构是任何一个算法都离不开的一种基本算法结构
  • Vuex详解,一文彻底搞懂Vuex

    一 Vuex是什么 为什么要用它 vuex官方解释 Vuex 是一个专为 Vue js 应用程序开发的状态管理模式 库 它采用集中式存储管理应用的所有组件的状态 并以相应的规则保证状态以一种可预测的方式发生变化 大家可以思考一下 组件之间的
  • java中常用的参数校验方法

    欢迎访问个人博客 德鲁大叔撸代码 在对外开放接口的时候 我们每次需要对调用者传进来的参数进行校验 对于少量并且参数简单的接口 我们完全可以用最原始的方法进行校验 比如 public User selectUser User user log
  • Paddle OCR数据集制作

    PPOCRLabelv2是一款适用于OCR领域的半自动图形标注工具 内置PP OCR模型 自动检测和重新识别数据 用Python3和PyQT5编写 支持矩形框 表格 不规则文本和关键信息标注方式 标注可以直接用于PP OCR检测识别模型的训
  • 【Java学习笔记】Scanner类中next系列方法的总结

    之前在学习Java的时候在如何通过键盘输入数据方面遇到了一些困难 当时有很多概念不理解 现在我把当时在网上看过的一些文章思路总结一下 其中可能有我个人的一些错误理解 希望大佬们指正 毕竟我还是个菜鸡 o 这里就用最典型的三个方法来进行讲解
  • 抽象工厂模式(创建型)

    抽象工厂模式 定义 Provide an interface for creating families of related or dependent objects without specifying their concrete c
  • OpenCV2 椒盐噪声

    椒盐噪声是由图像传感器 传输信道 解码处理等产生的黑白相间的亮暗点噪声 椒盐噪声往往由图像切割引起 我们用程序来模拟椒盐噪声 随机选取一些像素 把这些像素设为白色 include
  • wazuh介绍

    1 wazuh简介 Wazuh 是一个免费 开源和企业级的安全监控解决方案 用于威胁检测 完整性监控 事件响应和合规性 github地址 https github com wazuh Wazuh由部署到受监视系统的端点安全代理和管理服务器组
  • 基于 OpenOCD 的 STM32CubeIDE 开发烧录调试环境搭建-DAPLINK

    STM32cubeIDE 是ST官方推出的一款用于开发 STM32 的工具 整合了 STM32CubeMX 和 TrueSTUDIO 而成 对于 STM32 的开发这个工具应该会在未来成为主流 毕竟有官方加持又商用免费 但仿真烧录只支持 J