当前位置: 首页 > 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系统中&…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...