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

2024-03-08 23:20

本文主要是介绍在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调试😅。

这篇关于在ubuntu上使用vscode+gcc-arm-none-eabi+openocd工具开发STM32的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/788759

相关文章

VScode连接远程Linux服务器环境配置图文教程

《VScode连接远程Linux服务器环境配置图文教程》:本文主要介绍如何安装和配置VSCode,包括安装步骤、环境配置(如汉化包、远程SSH连接)、语言包安装(如C/C++插件)等,文中给出了详... 目录一、安装vscode二、环境配置1.中文汉化包2.安装remote-ssh,用于远程连接2.1安装2

vscode保存代码时自动eslint格式化图文教程

《vscode保存代码时自动eslint格式化图文教程》:本文主要介绍vscode保存代码时自动eslint格式化的相关资料,包括打开设置文件并复制特定内容,文中通过代码介绍的非常详细,需要的朋友... 目录1、点击设置2、选择远程--->点击右上角打开设置3、会弹出settings.json文件,将以下内

Java中使用Java Mail实现邮件服务功能示例

《Java中使用JavaMail实现邮件服务功能示例》:本文主要介绍Java中使用JavaMail实现邮件服务功能的相关资料,文章还提供了一个发送邮件的示例代码,包括创建参数类、邮件类和执行结... 目录前言一、历史背景二编程、pom依赖三、API说明(一)Session (会话)(二)Message编程客

C++中使用vector存储并遍历数据的基本步骤

《C++中使用vector存储并遍历数据的基本步骤》C++标准模板库(STL)提供了多种容器类型,包括顺序容器、关联容器、无序关联容器和容器适配器,每种容器都有其特定的用途和特性,:本文主要介绍C... 目录(1)容器及简要描述‌php顺序容器‌‌关联容器‌‌无序关联容器‌(基于哈希表):‌容器适配器‌:(

使用Python实现高效的端口扫描器

《使用Python实现高效的端口扫描器》在网络安全领域,端口扫描是一项基本而重要的技能,通过端口扫描,可以发现目标主机上开放的服务和端口,这对于安全评估、渗透测试等有着不可忽视的作用,本文将介绍如何使... 目录1. 端口扫描的基本原理2. 使用python实现端口扫描2.1 安装必要的库2.2 编写端口扫

使用Python实现操作mongodb详解

《使用Python实现操作mongodb详解》这篇文章主要为大家详细介绍了使用Python实现操作mongodb的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、示例二、常用指令三、遇到的问题一、示例from pymongo import MongoClientf

SQL Server使用SELECT INTO实现表备份的代码示例

《SQLServer使用SELECTINTO实现表备份的代码示例》在数据库管理过程中,有时我们需要对表进行备份,以防数据丢失或修改错误,在SQLServer中,可以使用SELECTINT... 在数据库管理过程中,有时我们需要对表进行备份,以防数据丢失或修改错误。在 SQL Server 中,可以使用 SE

使用Python合并 Excel单元格指定行列或单元格范围

《使用Python合并Excel单元格指定行列或单元格范围》合并Excel单元格是Excel数据处理和表格设计中的一项常用操作,本文将介绍如何通过Python合并Excel中的指定行列或单... 目录python Excel库安装Python合并Excel 中的指定行Python合并Excel 中的指定列P

基于Go语言实现一个压测工具

《基于Go语言实现一个压测工具》这篇文章主要为大家详细介绍了基于Go语言实现一个简单的压测工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录整体架构通用数据处理模块Http请求响应数据处理Curl参数解析处理客户端模块Http客户端处理Grpc客户端处理Websocket客户端

浅析Rust多线程中如何安全的使用变量

《浅析Rust多线程中如何安全的使用变量》这篇文章主要为大家详细介绍了Rust如何在线程的闭包中安全的使用变量,包括共享变量和修改变量,文中的示例代码讲解详细,有需要的小伙伴可以参考下... 目录1. 向线程传递变量2. 多线程共享变量引用3. 多线程中修改变量4. 总结在Rust语言中,一个既引人入胜又可