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

Ubuntu下使用DAPLink(OpenOCD)

目录

1. 下载OpenOCD源代码

2. 编译代码

2.1 运行bootstrap

 2.2 安装关联库

2.3 运行./configure

2.4 运行make

2.5 运行sudo make install

3. 烧录程序

3.1 挂起MCU

3.2 写入镜像

3.3 校验镜像


通过OpenOCD实现,在Ubuntu18 64bit下验证。

1. 下载OpenOCD源代码

OpenOCD对应的官网:

Open On-Chip Debugger (openocd.org)icon-default.png?t=N7T8https://openocd.org/点击“Getting OpenOCD”,找到Source Code字段,红色字体链接都可以转到源代码的网站。

 以官方的网站为例(sourceforge):

左侧选择版本,然后点击Download即可

git clone https://git.code.sf.net/p/openocd/code openocd-code

2. 编译代码

终端进入下载的OpenOCD文件夹。

2.1 运行bootstrap

./bootstrap

 提示错误

configure.ac:32: error: Macro PKG_PROG_PKG_CONFIG is not available. It is usually defined in file pkg.m4 provided by package pkg-config.

安装pkg-config

sudo apt-get install pkg-config

新的错误:

./bootstrap: 41: git: not found

安装git

sudo apt-get install git

还是提示错误,改为git pull下来工程。

 2.2 安装关联库

运行./configure可以看到很多关联库需要安装。

configure: WARNING: libusb-1.x not found, trying legacy libusb-0.1 as a fallback; consider installing libusb-1.x insteadchecking for capstone... nochecking for hidapi... nochecking for hidapi-hidraw... nochecking for hidapi-libusb... nochecking for libftdi1... nochecking for libftdi... nochecking for libgpiod... nochecking for libjaylink >= 0.2... no

而且配置完后提示的功能都不支持:

OpenOCD configuration summary--------------------------------------------------MPSSE mode of FTDI based devices        noST-Link Programmer                      noTI ICDI JTAG Programmer                 noKeil ULINK JTAG Programmer              noAltera USB-Blaster II Compatible        noBitbang mode of FT232R based devices    noVersaloon-Link JTAG Programmer          noTI XDS110 Debug Probe                   noCMSIS-DAP v2 Compliant Debugger         noOSBDM (JTAG only) Programmer            noeStick/opendous JTAG Programmer         noOlimex ARM-JTAG-EW Programmer           noRaisonance RLink JTAG Programmer        noUSBProg JTAG Programmer                 noEspressif JTAG Programmer               noCMSIS-DAP Compliant Debugger            noNu-Link Programmer                      noCypress KitProg Programmer              noAltera USB-Blaster Compatible           noASIX Presto Adapter                     noOpenJTAG Adapter                        noLinux GPIO bitbang through libgpiod     noSEGGER J-Link Programmer                noBus Pirate                              yes (auto)Use Capstone disassembly framework      no

安装对应的库:

sudo apt-install libusb-1.0-0-dev
sudo apt-get install libcapstone-dev
sudo apt-get install libhidapi-dev
sudo apt-get install libgpiod-dev
sudo apt-get install libftdi-dev
sudo apt-get install libftdi1-dev
sudo apt-get install libjaylink-dev

2.3 运行./configure

这时候所有的配置都为yes了。

2.4 运行make

2.5 运行sudo make install

安装完成后运行openocd -v确认是否安装成功。

Open On-Chip Debugger 0.12.0+dev-00271-g2c57d11c7 (2023-07-18-10:25)Licensed under GNU GPL v2For bug reports, readhttp://openocd.org/doc/doxygen/bugs.html

3. 烧录程序

拷贝配置文件到hex文件所在的文件夹,配置文件相对路径如下:

openocd-code-v0.12.0/openocd-code/tcl/interface/cmsis-dap.cfg

在hex文件所在文件夹运行:

sudo openocd -f cmsis-dap.cfg

提示错误(这个错误是虚拟机的问题):

Error: unable to find a matching CMSIS-DAP device

先使用lsusb看一下USB设备,没有对应的USB设备。

安装VBOX的增强功能,然后在VBox中选择USB3.0(如果设备插入的是3.0的接口) 

再次运行openocd:

Open On-Chip Debugger 0.12.0+dev-00271-g2c57d11c7 (2023-07-18-10:25)Licensed under GNU GPL v2For bug reports, readhttp://openocd.org/doc/doxygen/bugs.htmlInfo : Listening on port 6666 for tcl connectionsInfo : Listening on port 4444 for telnet connectionsWarn : An adapter speed is not selected in the init scripts. OpenOCD will try to run the adapter at very low speed (100 kHz).Warn : To remove this warnings and achieve reasonable communication speed with the target, set "adapter speed" or "jtag_rclk" in the init scripts.Info : CMSIS-DAP: SWD supportedInfo : CMSIS-DAP: Atomic commands supportedInfo : CMSIS-DAP: FW Version = 2.0.0Error: CMSIS-DAP: JTAG not supported

拷贝board的配置文件:

openocd-code/tcl/board/stm32f103c8_blue_pill.cfg

并将文件名改为stm32f103c8.cfg,打开编辑,可以看到关联另外一个cfg文件,将这个文件也拷贝过来,将这个文件的路径改为当前路径:

source [find stm32f1x.cfg]

运行

sudo openocd -f cmsis-dap.cfg -f stm32f103c8.cfg

结果如下:

Info : auto-selecting first available session transport "swd". To override use 'transport select <transport>'.Info : Listening on port 6666 for tcl connectionsInfo : Listening on port 4444 for telnet connectionsInfo : CMSIS-DAP: SWD supportedInfo : CMSIS-DAP: Atomic commands supportedInfo : CMSIS-DAP: FW Version = 2.0.0Info : CMSIS-DAP: Interface Initialised (SWD)Info : SWCLK/TCK = 1 SWDIO/TMS = 1 TDI = 0 TDO = 0 nTRST = 1 nRESET = 1Info : CMSIS-DAP: Interface readyInfo : clock speed 1000 kHzInfo : SWD DPIDR 0x1ba01477Info : [stm32f1x.cpu] Cortex-M3 r1p1 processor detectedInfo : [stm32f1x.cpu] target has 6 breakpoints, 4 watchpointsInfo : starting gdb server for stm32f1x.cpu on 3333Info : Listening on port 3333 for gdb connections

此时已经处于gdb链接状态,需要另外开一个终端运行

telnet localhost 4444

OpenOCD会监听本机的4444端口,通过telnet登录上去,之后就可以控制OpenOCD干些什么了。

Trying 127.0.0.1...Connected to localhost.Escape character is '^]'.Open On-Chip Debugger> 

后续的操作即在这个终端中输入对应的命令。 

3.1 挂起MCU

输入halt挂起MCU,相当于关机,不执行halt,无法把程序写入MCU。

> halt[stm32f1x.cpu] halted due to debug-request, current mode: Thread xPSR: 0x81000000 pc: 0x0800046c msp: 0x20004ff8

3.2 写入镜像

> flash write_image erase stm32f10x.hex Adding extra erase range, 0x08004c6c .. 0x08004fffauto erase enabledwrote 19564 bytes from file stm32f10x.hex in 2.569553s (7.435 KiB/s)

3.3 校验镜像

> flash verify_image stm32f10x.hexverified 19564 bytes from file stm32f10x.hex in 0.124474s (153.490 KiB/s)

除了命令的方式,也可以通过运行脚本的方式。

新建一个program.sh的脚本文件,编辑加入:

#!/bin/bashecho "OpenOCD-program stm32f103"openocd -f cmsis-dap.cfg \-f stm32f103c8.cfg \-c "program stm32f10x.hex verify reset exit"

文件属性那里改为“允许执行文件”,在终端中运行:

sudo ./program.sh

结果如下:

Info : auto-selecting first available session transport "swd". To override use 'transport select <transport>'.Info : CMSIS-DAP: SWD supportedInfo : CMSIS-DAP: Atomic commands supportedInfo : CMSIS-DAP: FW Version = 2.0.0Info : CMSIS-DAP: Interface Initialised (SWD)Info : SWCLK/TCK = 1 SWDIO/TMS = 1 TDI = 0 TDO = 1 nTRST = 1 nRESET = 1Info : CMSIS-DAP: Interface readyInfo : clock speed 1000 kHzInfo : SWD DPIDR 0x1ba01477Info : [stm32f1x.cpu] Cortex-M3 r1p1 processor detectedInfo : [stm32f1x.cpu] target has 6 breakpoints, 4 watchpointsInfo : starting gdb server for stm32f1x.cpu on 3333Info : Listening on port 3333 for gdb connections[stm32f1x.cpu] halted due to debug-request, current mode: Thread xPSR: 0x01000000 pc: 0xfffffffe msp: 0xfffffffc** Programming Started **Info : device id = 0x20036410Info : ignoring flash probed value, using configured bank sizeInfo : flash size = 128 KiBWarn : Adding extra erase range, 0x08004c6c .. 0x08004fff** Programming Finished **** Verify Started **** Verified OK **** Resetting Target **shutdown command invoked

相关文章:

Ubuntu下使用DAPLink(OpenOCD)

目录 1. 下载OpenOCD源代码 2. 编译代码 2.1 运行bootstrap 2.2 安装关联库 2.3 运行./configure 2.4 运行make 2.5 运行sudo make install 3. 烧录程序 3.1 挂起MCU 3.2 写入镜像 3.3 校验镜像 通过OpenOCD实现&#xff0c;在Ubuntu18 64bit下验证。 1. 下载OpenOC…...

C# 中 Math.Round 数学函数

在 C# 中&#xff0c;Math.Round 是一个数学函数&#xff0c;用于对一个浮点数进行四舍五入操作。它接受一个浮点数作为输入&#xff0c;并返回一个最接近输入值的整数或指定小数位数的浮点数。 Math.Round 方法有多个重载&#xff0c;其中最常用的重载有以下两种形式&#xf…...

力扣---接雨水---单调队列

题目&#xff1a; 单调队列思想&#xff1a; 没有思路的小伙伴可以先把这个想清楚哦&#xff1a;力扣hot10---大根堆双端队列-CSDN博客 从上面的图就可以发现&#xff0c;如果柱子呈递减序列&#xff0c;那么不会接到雨水&#xff0c;只要有一个小凸起柱子&#xff0c;那么这个…...

微分学<4>——微分中值定理

索引 微分中值定理极值定义4.1 极大(小)值定理4.1 Fermat引理定理4.2 Rolle定理 Lagrange中值定理定理4.3 Lagrange中值定理定理4.4 Cauchy中值定理 导数对函数性质的刻画Jensen不等式 微分中值定理 极值 定义4.1 极大(小)值 若存在 x 0 x_{0} x0​的邻域 U ( x 0 , δ ) U\…...

FPGA的时钟资源

目录 简介 Clock Region详解 MRCC和SRCC的区别 BUFGs 时钟资源总结 简介 7系列FPGA的时钟结构图&#xff1a; Clock Region&#xff1a;时钟区域&#xff0c;下图中有6个时钟区域&#xff0c;用不同的颜色加以区分出来 Clock Backbone&#xff1a;从名字也能看出来&#x…...

LeetCode27: 移除元素

题目描述 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出…...

Python使用Beautiful Soup及解析html获取元素并提取内容值

Python使用Beautiful Soup及解析html获取元素并提取内容值 1. 包括解析获取标题2. 根据标签及id获取所有元素3. 根据标签及class获取所有元素4. 获取元素下的标签的值5. 获取元素下的parent及child的元素的值参考 1. 包括解析获取标题 2. 根据标签及id获取所有元素 3. 根据标…...

如何清除keep-alive缓存

在 Vue.js 中&#xff0c;使用 <keep-alive> 组件可以将组件保留在内存中&#xff0c;以避免重复渲染和销毁&#xff0c;从而提高性能。如果需要手动清除 <keep-alive> 组件的缓存&#xff0c;可以通过两种方法来实现&#xff1a; 通过 $destroy 方法销毁组件&…...

2024年新手视频剪辑软件推荐-6款视频剪辑软件测评

视频剪辑软件推荐 premiere premiere 直达地址:各大软件网站 说到底,还是得专业的来,虽然很多人觉得他是收费的,但是你懂的,想要免费总是会有办法的.别的不说,剪辑这块,我还是很认可这个软件,虽然我现在还是刚入门. 剪映 剪映 抖音官方推出的一款手机视频编辑剪辑应用,提供切割…...

无货源抖店可以做吗?那些月入上万是真的吗?分享我的成功秘籍

大家好&#xff0c;我是电商花花。 现在还是有人在不停的在问&#xff0c;抖音小店无货源还可以做吗&#xff1f;那些月入上万都是真的吗&#xff1f; 当然是真的&#xff0c;而且做抖音小店非常简单&#xff0c;前提是你真的完全掌握到核心玩法&#xff0c;且要有执行力。 …...

文献阅读:DEA-Net:基于细节增强卷积和内容引导注意的单图像去雾

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 摘要Abstract文献阅读&#xff1a;DEA-Net&#xff1a;基于细节增强卷积和内容引导注意的单图像去雾1、研究背景2、方法提出3、相关知识3.1、DEConv3.3、多重卷积的…...

2024想要赚点小钱真的很容易!帮你们找的10个搞钱第二职业

我们都希望在空闲时间里增加一些额外收入&#xff0c;并有机会找到自己热爱的事业&#xff0c;每天贝兼几十上百元是一个不错的开始&#xff0c;小钱也是钱&#xff0c; 搞钱的经验会积少成多。今天分享10个搞钱第二职业&#xff0c;2024想要赚点小钱真的很容易。 一.摆摊卖花 …...

【Linux网络】再谈 “协议“

目录 再谈 "协议" 结构化数据的传输 序列化和反序列化 网络版计算器 封装套接字操作 服务端代码 服务进程执行例程 启动网络版服务端 协议定制 客户端代码 代码测试 使用JSON进行序列化与反序列化 我们程序员写的一个个解决我们实际问题&#xff0c;满…...

猫头虎分享已解决Bug || 系统监控故障:MonitoringServiceDown, MetricsCollectionError

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …...

Java中的基本数据类型有哪些

在Java编程语言中&#xff0c;基本数据类型&#xff08;Primitive Types&#xff09;是预定义的数据类型&#xff0c;它们不是由用户定义的类创建的&#xff0c;而是由语言本身提供的。这些基本数据类型是构成Java程序的基础&#xff0c;用于存储不同类型的值&#xff0c;如整数…...

二叉树遍历(前中后序的递归/非递归遍历、层序遍历)

二叉树的遍历 1. 二叉树的前序、中序、后序遍历 前、中、后序遍历又叫深度优先遍历 注&#xff1a;严格来说&#xff0c;深度优先遍历是先访问当前节点再继续递归访问&#xff0c;因此&#xff0c;只有前序遍历是严格意义上的深度优先遍历 首先需要知道下面几点&#xff1a; …...

UE4升级UE5 蓝图节点变更汇总(4.26/27-5.2/5.3)

一、删除部分 Ploygon Editing删除 Polygon Editing这个在4.26、4.27中的插件&#xff0c;在5.1后彻底失效。 相关的蓝图&#xff0c;如编辑器蓝图 Generate mapping UVs等&#xff0c;均失效。 如需相关功能&#xff0c;请改成Dynamic Mesh下的方法。 GetSupportedClass删…...

【python】异常处理

前言 省略各种废话&#xff0c;直接快速整理知识点 try-except 基础 作用 程序不可能永远都是对的&#xff0c;当7除a&#xff0c;a由用户输入时&#xff0c;用户输入0就会报错。try-except就是解决这些问题。 结构 多分支自定义错误类型 上方的exception是一个错误类型…...

【xv6操作系统】Lab systems calls

一、实验前须知 阅读 xv6 文档的第 2 章和第 4 章的 4.3 节和 4.4 节以及相关源文件&#xff1a; 系统调用的用户空间代码在 user/user.h 和 user/usys.pl 中。 内核空间代码在 kernel/syscall.h 和 kernel/syscall.c 中。 与进程相关的代码在 kernel/proc.h 和 kernel/proc.c…...

python的scripts文件夹作用

Windows系统&#xff1a; Scripts文件夹通常位于Python的安装目录下&#xff0c;如C:\Python\Scripts。该文件夹内包含了各种有用的工具&#xff0c;例如pip、virtualenv等&#xff0c;这些工具有助于管理和配置Python环境和依赖包。 Linux系统&#xff1a; 在Linux系统中&…...

别再只用单一颜色了!ArcGIS地图符号化保姆级教程:从标记、线型到填充,手把手教你做出专业地图

ArcGIS地图符号化实战&#xff1a;从基础操作到视觉叙事的高级技巧 1. 地图符号化的艺术与科学 当我们面对一张城市设施分布图时&#xff0c;第一眼吸引注意力的往往不是数据本身&#xff0c;而是那些跳跃的色彩、精致的图标和流畅的线条。这正是地图符号化的魔力——它将冰冷的…...

手把手教你配置STM32的QSPI外设:以读写W25Q256JV Flash为例(含完整代码)

STM32 QSPI外设深度实战&#xff1a;W25Q256JV Flash高速存储全解析 第一次接触STM32的QSPI外设时&#xff0c;我被官方手册里密密麻麻的寄存器描述弄得晕头转向。直到在真实项目中用它驱动W25Q256JV Flash芯片&#xff0c;才真正理解这个外设的精妙之处——它不仅仅是SPI的&qu…...

从‘文件不见了’到‘数据被覆盖’:新手用C语言fopen写文件常踩的5个坑及解决办法

从‘文件不见了’到‘数据被覆盖’&#xff1a;新手用C语言fopen写文件常踩的5个坑及解决办法 刚接触C语言文件操作时&#xff0c;很多人会惊讶于fopen()这个看似简单的函数竟能引发如此多诡异问题。我曾见过学生因为误用"w"模式导致实验数据全毁&#xff0c;也遇到…...

软件泛化管理中的模板元编程

软件泛化管理中的模板元编程&#xff1a;解锁高效开发新范式 在当今快速迭代的软件开发领域&#xff0c;如何提升代码复用性、降低维护成本成为团队的核心挑战。模板元编程&#xff08;Template Metaprogramming, TMP&#xff09;作为泛型编程的高级形态&#xff0c;通过在编译…...

Grafana Tempo介绍(分布式追踪后端系统,用于存储和查询追踪数据)OpenTelemetry、OTLP、无索引、TraceID查询、低成本、依赖对象存储、Exemplars

文章目录一文读懂 Tempo&#xff1a;云原生时代的分布式追踪后端一、什么是 Tempo&#xff1f;二、Tempo 在可观测性体系中的位置三、Tempo 的核心设计理念1. 无索引&#xff08;Index-free&#xff09;为什么这么设计&#xff1f;2. 对象存储优先3. 与 Metrics 强关联&#xf…...

离职4个月后,前领导竟然半夜让我改方案!他说明早9点要用,我灵机一动答应他8点交付!挂掉电话后,我彻底拉黑了领导,微笑入睡

离职四个月了&#xff0c;前领导半夜11点给我打电话。电话一接通&#xff0c;他的语气跟以前一模一样&#xff0c;不是问&#xff0c;是说&#xff0c;「那个方案你还有底稿吧&#xff0c;明早9点我要用&#xff0c;你帮我改一下。」我当时躺在床上&#xff0c;盯着天花板&…...

保姆级避坑指南:用FlyMcu给STM32F103下载程序,别再傻傻用Keil编译了!

STM32F103串口通信实战&#xff1a;从FlyMcu下载到数据收发全解析 第一次接触STM32开发板时&#xff0c;最让人困惑的往往不是代码本身&#xff0c;而是整个工具链的使用流程。很多新手拿到商家提供的例程后&#xff0c;第一反应是打开Keil进行编译&#xff0c;却不知道有些现…...

告别纸上谈兵:手把手教你用AVL CRUISE M+dSPACE搭建首个硬件在环(HiL)测试环境

从零构建HiL测试台架&#xff1a;AVL CRUISE M与dSPACE实战指南 第一次接触硬件在环&#xff08;HiL&#xff09;测试的工程师常会遇到这样的困境&#xff1a;明明在仿真环境中运行良好的模型&#xff0c;一旦接入真实硬件就问题频出。去年我负责的一个混动变速箱控制单元测试项…...

保姆级教程:在Ubuntu 20.04上为RISC-V芯片编译运行CoreMark(含多线程配置)

RISC-V平台CoreMark性能测试全流程实战指南 在嵌入式开发领域&#xff0c;处理器性能评估始终是硬件选型和系统优化的关键环节。CoreMark作为当前最权威的嵌入式CPU基准测试工具&#xff0c;其测试结果已成为衡量RISC-V处理器性能的黄金标准。本文将完整演示如何在Ubuntu 20.04…...

神经符号AI:结合逻辑与学习的智能体

神经符号AI:结合逻辑与学习的智能体 一、 引言 (Introduction) 1.1 钩子 (The Hook):当GPT遇到“脑筋急转弯” 想象一下,你正在和当今最强大的语言模型GPT-4对话。你问它:“一个房间里有3个人,然后走进去2只狗,每个人都有1顶帽子,每只狗有4条腿。请问房间里现在有多少…...