在ubuntu上使用vscode+gcc-arm-none-eabi+openocd工具开发STM32

文章目录

  • 所需工具
  • 安装调试
  • 搭建过程中遇到的问题

写在前面
  老大上周让我用vscode开发STM32,我爽快的答应了,心想大学四年装了这么多环境了这不简简单单,更何况vscode这两年还用过,然而现实总是令人不快的——我竟然花了差不多两周时间在这上面,并且不知道花费了多少流量😭😭😭。这玩意就给了所需要的主要工具,形象一点就如标题,问其他人他们也搞不定。因此,大家有空还是多涉猎一些开发环境,这玩意以前有兄弟跟我提过,但是我觉得没意义,所以没用过😅😅😅。

所需工具

  • 代码编写ide vscode
  • 调试连接工具 openocd
  • 交叉编译工具链 gcc-arm-none-eabi
  • 调试工具 gdb-multiarch
  • 工程管理工具 makecmake
  • 其他一些依赖 gcc-multilibg++-multilib

本文基于ubuntu书写记录

安装调试

步骤一: vscode安装可采取现在官网想下载.deb文件,后续可双击直接安装,或者找到ubuntu中软件管理工具也可安装,也可使用命令·sudo dpkg -i 文件名.deb进行安装。

步骤二:至于后续几个工具可直接使用apt命令完成安装sudo apt install gcc-multilib g++-multilib gdb-multiarch gcc-arm-none-eabi openocd,使用命令安装后,这些工具的可执行文件会自动生成在/usr/bin目录中。
(说明:后续使用openocd时会用到stlink适配文件stlink-v2.cfstm32适配文件stm32f1x.cfg,如果是使用的apt命令安装,那就就会存在于/usr/share/openocd/scripts目录下。或者,如果大家想直接查找也可使用whereis + 查找内容find命令。)

步骤三:在vscode中下载插件:cortex-debug + Cortex-Debug: Device Support Pack - STM32F1+ venu's cortex-debug + rtos views + MemoryView + peripheral viewer 这写插件。(我搭环境的时候文档上就只写了前两个😢,不过有些是会自动下载的)上述这些插件也就差不多跟cortex-debug全都相关的插件了(如下图),哈哈哈。(说明:插件 Cortex-Debug: Device Support Pack - STM32F1是一个支持包,自己用的哪一款就下载哪一版本即可。不过,小编发现下载插件 venu's cortex-debug 后不安装这玩意似乎也行🤣。)在这里插入图片描述步骤四:在命令行中,使用命令 sudo apt-get install make cmake 下载工程管理工具。这里建议搭建先去学习一下makefilecmake,不管自己要不要写这部分代码,起码要能够看懂吧。

步骤五:搭建STM32项目,验证自己所搭环境是否可用。这里可使用cubemx生成待makefile管理的工程,创建时选择makefile管理文件即可。 在这里插入图片描述
或者大家也可参考这个项目gcc+vscode开发stm32,在这个项目中也有成功移植FreeRTOSRT-Thread的工程供大家参考。

完成上述步骤后大家还需要配置gdb调试配置文件launch.json,下面这个配置大家可参考:

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "cwd": "${workspaceRoot}",
            "executable": "./build/FreeRtos_Hao.elf",
            "name": "myDebug",
            "request": "launch",
            "type": "cortex-debug",
            "interface": "swd",
            "runToEntryPoint": "main",
            "servertype": "openocd",
            "configFiles": [
            	// 下面这两个根据自己的openocd目录更改
                "/usr/share/openocd/scripts/interface/stlink-v2.cfg",
                "/usr/share/openocd/scripts/target/stm32f1x.cfg"
            ],
            // 这个就是交叉编译工具链所在的目录
            "armToolchainPath": "/usr/bin",
            // 所用gdb目录
            "gdbPath": "/usr/bin/gdb-multiarch",
            "showDevDebugOutput": "raw"
        },
    ]
}

如果大家是使用github上的工程验证大家还需要更改makefile文件一处,如下:

OPENOCD_DOWN_PATH = /usr/share/openocd/scripts/interface/stlink-v2.cfg
OPENOCD_CHIP_PATH = /usr/share/openocd/scripts/target/stm32f1x.cfg

最后,借用其他兄弟的图画来表示这个调试过程就如下图:
在这里插入图片描述

搭建过程中遇到的问题

问题:
   在移植过程中,小编遇到了报错 Failed to launch OpenOCD GDB Server: Timeout.(就是这个问题困扰了我近两周)

解决方案:
   首先,检查在命令行中使用openocd是否可以连接开发板,这里可使用命令:

openocd -f   xxx/openocd/scripts/stlink-v2.cfg -f  xxx/openocd/scripts/interface/target/stm32f1.cfg

   其次,使用gdb连接openocd调试开发板。如果使用gdb-multiarch,那么命令为:
gdb-multiarch + xxx.elf,进入gdb后就可使用target remote localhost:3333连接openocd服务。

   最后,如果命令行可成功连接,那么就是vscode配置问题(小编就是这样,小编是缺少插件)。如果链接不成功,那么可能是版本问题,建议大家换版本重新尝试(ubuntu20.04安装的openocd是0.10版本的,而目前最新是0.12)。



如果大家碰到问题,可去官网查看有没有相关解析;或者 更换软件版本,可能是软件本班不兼容导致的;大家也可以去github上看看有没有相关issue

如果大家在windows上尝试,大家将对应工具换成win版本与MinGW即可,不过这种方式小编没尝试过,网上普遍在windows上都使用arm-none-eabi-gdb调试😅。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/441629.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

UDP实现文件的发送、UDP实现全双工的聊天、TCP通信协议

我要成为嵌入式高手之3月7日Linux高编第十七天!! ———————————————————————————— 回顾 重要程序 1、UDP实现文件的发送 发端: #include "head.h"int main(void) {int sockfd 0;struct sockaddr_i…

PHP在线图像处理程序:基于Photoshop的网页版图片处理源码

PHP在线PS修图网页版源码:实现照片图片处理的便捷工具 众所周知,许多朋友都喜欢使用PS进行图像编辑。然而,PS需要下载软件并对电脑配置要求较高。今天我们为大家带来一款基于浏览器的在线PS网页版源码,让您轻松实现在线P图和作图…

Kafka MQ 主题和分区

Kafka MQ 主题和分区 Kafka 的消息通过 主题 进行分类。主题就好比数据库的表,或者文件系统里的文件夹。主题可以被分为若干个 分区 ,一个分区就是一个提交日志。消息以追加的方式写入分区,然 后以先入先出的顺序读取。要注意,由…

【论文阅读】Mamba:选择状态空间模型的线性时间序列建模(一)

文章目录 Mamba:选择状态空间模型的线性时间序列建模介绍状态序列模型选择性状态空间模型动机:选择作为一种压缩手段用选择性提升SSM 选择性SSM的高效实现先前模型的动机选择扫描总览:硬件感知状态扩展 Mamba论文 Mamba:选择状态空间模型的线性时间序列建…

软件测试入门

文章目录 一、入门1. 软件2. 软件基本组成3. 软件产生过程4. 软件测试5. 软件测试目的🏆 小结 二、测试主流技能1. 功能测试2. 自动化测试3. 接口测试4. 性能测试🏆 小结 三、测试分类1. 按测试阶段划分2. 按代码可见度划分🏆 小结 三、质量模…

数字人ai直播软件突破AI大模型技术,改变未来科技格局!

数字人AI直播软件在AI大模型技术上的突破,将不可避免地改变未来科技格局。这一突破让人们看到了AI技术的无限可能性,并为未来的科技发展打开了新的大门。 AI大模型技术是近年来人工智能领域的一个热点,它通过构建庞大、复杂的神经网络模型&a…

bug - poi getMergedRegion合并后的行列number错误

第一个CellRangeAddress 的Row number 应该是0&#xff0c;但是给出的是1。 其它的CellRangeAddress 与实际大致相差4-5不等&#xff0c;没有规律。 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>…

气象数据免费下载(超级好用)

你是不是做实验经常性的需要一些气象数据&#xff0c;例如PM2.5、相对湿度、月均温度等等…… 但是当你开始寻找数据时就遇到困难了&#xff0c;由于权限、数据网站之类的麻烦你会花费大量无用时间&#xff0c;甚至有时候一无所获得不偿失&#xff0c;这就很头疼了&#xff01;…

一篇了解电感的使用

一、电感理论基础 1.电感的定义 当电流通过线圈后&#xff0c;会产生磁场&#xff0c;磁感线穿过线圈&#xff0c;产生的磁通量与电流 i有如下关系&#xff1a; 将漆包线、纱包线或塑皮线等在绝缘骨架或磁心、铁心上绕制而成的器件&#xff0c;当线圈通过电流后&#xff0c;在…

工地安全反光衣穿戴监测报警摄像机

工地安全反光衣穿戴监测报警摄像机是为了提高工地施工人员的安全意识和监管效率而设计的。这种设备结合了反光衣、监测系统和报警摄像机的功能&#xff0c;可以有效减少工地事故的发生。 首先&#xff0c;工地安全反光衣是一种具有高度可见度的服装&#xff0c;能够使穿戴者在夜…

Unity中PICO实现移动交互

文章目录 前言一、在允许行走的地面加上对应的组件1、Teleportation Anchor 移动锚点2、Teleportation Area 移动区域 二、在 玩家&#xff08;需要移动的对象&#xff09;上挂载对应组件1、Teleportation Provider 被移动对象2、在 Teleportation Anchor 或 Teleportation Are…

一文学会搭建 cli 脚手架工具

文章目录 设置工具命令package.json bin 字段注释&#xff1a;#!/usr/bin/env node设置环境变量 接收命令选项参数process 实现commander 命令行交互&#xff1a;inquirer下载项目模板&#xff1a;download-git-repo执行额外命令&#xff1a;自动安装依赖child_processexeca 体…

FineReport决策报表Excel导出数据不全解决办法

一、首先建立决策报表 决策报表不带参数导出办法&#xff08;即没有参数面板&#xff09; 普通决策报表导出&#xff08;没有搜索面板&#xff09; 如果决策报表带参数&#xff08;即有搜索框&#xff09;&#xff0c;用上面的办法只能导出部分数据&#xff0c;数据不全 二、…

Go语言框架路由Controller控制器设计思路gin路由根据控制器目录分层生成路由地址

Controller设计好处 框架设计用controller分请求路由层级&#xff0c;应用从app目录开始对应请求url路由地址&#xff0c;这样设计师方便开发时候通过请求地址层级快速定位接口方法对应的代码位置。 例如api接口请求路径为&#xff1a;​​http://localhost:8110/​​busines…

C.C语言分支和循环语句

文章目录 一. 什么是语句 二. 分支语句&#xff08;选择结构&#xff09; 2.1. if 语句 2.1.1. 语法结构 2.1.2. 悬空else 2.1.3. 书写形式的对比 2.1.4. 练习 2.2. switch 语句 3.2.1. 语法结构 3.2.2. 在switch语句中的 break 3.2.3. default子句 3.2.4. 练习 三…

打造你的贪吃蛇游戏:HTML、CSS与JavaScript的完美结合

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

IPSEC VPPN实验

实验背景&#xff1a;FW1和FW2是双机热备的状态。 实验要求&#xff1a;在FW和FW3之间建立一条IPSEC通道&#xff0c;保证10.0.2.0/24网段可以正常访问到192.168.1.0/24 IPSEC VPPN实验配置&#xff08;由于是双机热备状态&#xff0c;所以FW1和FW2只需要配置FW1主设备即可&…

portainer管理远程docker和docker-swarm集群

使用前请先安装docker和docker-compose&#xff0c;同时完成docker-swarm集群初始化 一、portainer-ce部署 部署portainer-ce实时管理本机docker&#xff0c;使用docker-compose一键拉起 docker-compose.yml version: 3 services:portainer:container_name: portainer#imag…

Java高频面试之消息队列与分布式篇

有需要互关的小伙伴,关注一下,有关必回关,争取今年认证早日拿到博客专家 消息队列的基本作用&#xff1f; 异步通信&#xff1a;消息队列提供了异步通信的能力&#xff0c;发送方可以将消息发送到队列中&#xff0c;而无需等待接收方立即处理。发送方和接收方可以解耦&#x…

【数据结构】单链表的层层实现!! !

关注小庄 顿顿解馋(●’◡’●) 上篇回顾 我们上篇学习了本质为数组的数据结构—顺序表&#xff0c;顺序表支持下标随机访问而且高速缓存命中率高&#xff0c;然而可能造成空间的浪费&#xff0c;同时增加数据时多次移动会造成效率低下&#xff0c;那有什么解决之法呢&#xff…
最新文章