Linux+vscode开发stm32教程【超详细】

这篇具有很好参考价值的文章主要介绍了Linux+vscode开发stm32教程【超详细】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Linux环境下STM32开发

1.前言

最近在使用Keil开发STM32的时候总感觉代码写起来很很费劲,然后打算用vscode试试,刚开始用的是KeilAssitance这个插件,本质还是使用Keil进行配置,vscode写代码,体验了一下感觉还是不方便。后来想到了Linux,毕竟在写代码这方面,Linux的体验还是非常棒的。综合考虑加查资料,最终决定使用Linux+vscode+STN32CubeMX+gnu-arm编译工具+openocd烧录工具的方式进行stm32的开发,花了我好几天才搞好,期间学了vscode复习了一下makefile和cmake,还有linux。希望能给大家一些帮助。

下面这一段对我启发很大,在此记录一下,以下转自知乎:
工具链一般用gcc-arm-none-eabi,可以用包管理装,也可以到arm官网下,也可以自己编译,毕竟gnu源有这个配置。如果keil自带的armcc就比较缺乏调试工具。纯用命令行的话,cubemx可以生成makefile工程,改下编译器路径就能make,会生成bin文件。
用IDE的话,可以用eclipse,参考wiced sdk。可以用vscode,体验要优于sublime。网上搜搜怎么配环境,主要就是设置工具链的目录。烧录程序,如果烧的是bin的话需要一个烧录程序。用jlink的话可以用segger官网下的jlinkexe工具。用stlink的话可以用github上的stutils什么的。用cmsis-dap或者ft2232的话就只能配openocd了。如果想直接烧elf,那么就要先搭好gdb server或者jtag bridge之类的东西,比方说jlink的就是jlinkgdbserver,然后xxxx-gdb连上,用load命令下载。keil的axf没研究过怎么用。
调试的话可以用IDE,关键还是先搭好gdb server然后让IDE里的gdb连上它。剩下的体验就跟调自家程序那样了,只是这些IDE没有像keil那样的看外设寄存器之类的功能了。

工程模板已经上传至我的git仓库,欢迎star

2.环境搭建

  1. 安装ubuntu虚拟机,用vmware即可,教程自行搜索。硬盘最好分配30G以上。

  2. 除此之外也可以安装双系统,本人使用的是双系统,因为用虚拟机运行太多东西会很卡,安装参考:Win10安装Ubuntu18.04双系统,图文详解,全网最详细教程

  3. 第三种方法是使用WSL,WSL安装过程去百度即可

系统装好以后需要安装一些必要的软件

sudo apt-get update\
sudo apt-get upgrade\
sudo apt install gcc git vim -y
  1. 安装vscode Linux版,安装过程自行搜索。
  2. 安装STM32CubeMX Linux版,去ST官网下载安装即可。
  3. 安装gcc-arm-none-eabi编译工具,当执行CubeMX生成的makefile时会调用该编译工具链。
    安装方法:
    • 在线安装:sudo apt install gcc-arm-none-eabi,不推荐,因为在线安装的版本会缺少gdb调试工具。推荐下载工具包的方式
    • 下载工具包:参考这篇。我的是ubunut下载这个,国外网站下载比较慢,有网盘会员的可以用我分享的网盘链接:百度网盘链接
      下载完成后tar -xvf arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-eabi.tar.xz进行解压
      解压完成后切换到解压目录下的bin目录下可以看到编译器arm-none-eabi-gcc,但是需要把编译器添加到环境变量中:
      Linux+vscode开发stm32教程【超详细】
      在添加环境变量之前最好把解压文件放到/usr/local目录,使用命令cp -r arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-eabi的路径 /usr/local
      vi /etc/profile
      添加以下环境变量到配置文件中
export PATH=$PATH:/usr/local/arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-eabi/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-eabi/lib

然后更新一下环境变量
source /etc/profile
在终端输入arm-none再按两下tab,如果出现Linux+vscode开发stm32教程【超详细】
说明配置成功

  1. 安装openocd,openocd是一个开源的烧录程序, 这个在线下载就可以sudo apt install openocd -y
    下载链接

3.编译烧录调试:

  1. 生成代码框架

使用STM32CubeMX生成点灯程序的代码框架及初始化代码。具体可以参考网上的教程
注意-要选择生成Makefile的工程文件。
打开STM32CubeMX
选择一款芯片进入配置
Debug这里要选择Serial Wire
Linux+vscode开发stm32教程【超详细】
在Project Manager这里选择ToolChain为Makefile
Linux+vscode开发stm32教程【超详细】
再配置好时钟就可以生成工程了
用vscode打开生成的工程
Linux+vscode开发stm32教程【超详细】

  1. 完善代码

在main函数里加上每隔1S反转一次LED的代码。

Linux+vscode开发stm32教程【超详细】

这里还有vscode会有红色波浪线的错误提示,虽然也能正常编译,但是不能用vscode的智能提示以及代码跳转。(我用vscode不就是为了这个麻)
解决方法:将Makefile中包含的定义以及路径添加到c/c++插件的配置中,如果没有这个文件可以ctrl+shift+p搜索c/c++配置来生成一个配置文件,也可以自己新建一个Linux+vscode开发stm32教程【超详细】,除了需要添加makefile中的路径以及宏定义,还需要添加arm-gnu工具链所包含的路径,,好像不加也没多大影响。

c_cpp_properties.json

{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**",
                "Core/Inc",
                "Drivers/STM32F4xx_HAL_Driver/Inc",
                "Drivers/STM32F4xx_HAL_Driver/Inc/Legacy",
                "Drivers/CMSIS/Device/ST/STM32F4xx/Include",
                "Drivers/CMSIS/Include",
                "/usr/local/arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-eabi/bin/../lib/gcc/arm-none-eabi/12.2.1/../../../../arm-none-eabi/include/c++/12.2.1",
                "/usr/local/arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-eabi/bin/../lib/gcc/arm-none-eabi/12.2.1/../../../../arm-none-eabi/include/c++/12.2.1/arm-none-eabi",
                "/usr/local/arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-eabi/bin/../lib/gcc/arm-none-eabi/12.2.1/../../../../arm-none-eabi/include/c++/12.2.1/backward",
                "/usr/local/arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-eabi/bin/../lib/gcc/arm-none-eabi/12.2.1/include",
                "/usr/local/arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-eabi/bin/../lib/gcc/arm-none-eabi/12.2.1/include-fixed",
                "/usr/local/arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-eabi/bin/../lib/gcc/arm-none-eabi/12.2.1/../../../../arm-none-eabi/include"
            ],
            "defines": [
                "USE_HAL_DRIVER",
                "STM32F407xx",
                "__GUNC__"
            ],
            "compilerPath": "/usr/local/arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-eabi/bin/arm-none-eabi-gcc",
            "intelliSenseMode": "gcc-arm"
        }
    ],
    "version": 4
}

如果安装在/usr/local目录下,配置文件可以这样写,但是如果版本和我的不同就需要改一下里面路径中的版本号

4. 编译

通过安装的gcc-arm-none-eabi编译工具链编译。
在新建的工程目录下的终端中,也可以用vscode打开终端,使用make命令编译工程文件,编译后在build文件夹下会生成工程名.elf,工程名.hex,工程名.bin文件。
Linux+vscode开发stm32教程【超详细】

当后期项目文件中增添了新文件,可以通过修改makefile文件的方式重新构建编译规则。
一文搞懂Makefile

除此之外还可以通过写cmake的方式自定义,但是用cmake构建stm32的工程有些复杂,还没太研究明白。

5. 烧录

硬件使用野火DAP仿真器和创新工坊的PWLink,两个都是CMSIS标准接口。软件使用openocd

openocd介绍:
OpenOCD是一种开放式片上调试器,可为嵌入式设备提供编程,调试和边界扫描测试。OpenOCD作为服务器,并通过端口3333接受来自GDB的传入连接或通过端口4444接受来自telnet的传入连接。GDB用于源文件步骤调试。telnet连接用于刷新。OpenOCD连接到 DAPLINK仿真器。DAPLINK适配器连接到目标。参考如下
https://zhuanlan.zhihu.com/p/41517198

下载openocdsudo apt install openocd
使用方式:
1通过openocd命令行
2把命令封装成shell脚本运行
3将命令集成到vscode的tasks.json中,也相当于脚本
三种方式的本质都是一样的,这里主要使用vscode脚本的方式

1脚本方式 (不推荐)
在gitee下载一个被人写好的脚本,直接运行脚本即可。
git clone https://gitee.com/delbertzopenocd-toolbox.git

下载完切换到该文件夹下
cd openocd-toolbox/sricpts/linux/stm32f4x # 后面这个根据自己的stm32型号选择

脚本文件如下:
Linux+vscode开发stm32教程【超详细】

连接好开发板和仿真器后,运行attach.sh,openocd通过端口连接DAP仿真器如下:
Linux+vscode开发stm32教程【超详细】

在vscode中 ctrl+ ` 调出终端,运行命令
program hex文件所在的路径
程序开始烧录

  • telnet localhost 4444 通过telnet连接openocd,DAP仿真器灯变红表示开始工作
  • program /home/lps/stm32/test01/build/test01.hex 烧录hex文件
  • reset 复位STM32
  • exit 关闭连接

2命令行操作方式(不推荐)

通过运行<scripts>带参脚本命令运行Server,通用格式为
-f <interface> -f <target>
<interface>仿真器配置: 代表你的仿真器类型,DAPLINK就是interface/cmsis-dap.cfg
<target>目标板配置: 代表你的烧录的单片机类型,如STM32F407就是target/stm32f4x.cfg

支持的烧录器在/usr/share/openocd/scripts/interface
支持的芯片在/usr/share/openocd/scripts/target
如下:
Linux+vscode开发stm32教程【超详细】

首先连接板子执行命令

openocd -f interface/cmsis-dap.cfg -f target/stm32f4x.cfg

通过以上命令openocd打开4444端口
打开vscode ctrl + `打开终端,接下来的操作和脚本的方式一样了,参考上面脚本的方式。

3vscode 配置tasks.json (*推荐)
vscode通过tasks.json这个配置文件的形式,提供了类似shell脚本的方式执行自动任务。具体参考:
https://code.visualstudio.com/Docs/editor/tasks

在.vscode文件夹下新建task.json文件内容如下:
关于vscode中的tasks.json文件,具体可以参考vscode对tasks的介绍
tasks.json

{
    "version": "2.0.0",
    "options": {
        "cwd": "${workspaceFolder}" //cwd的作用是切换到目标路径下
    },
    "tasks": [
        {
            "label": "build",
            "type": "shell",
            "command": [
                "make"
            ],
            "args": [
                "-f",
                "${workspaceFolder}/Makefile"
            ],
            "problemMatcher": "$gcc",
            "group": {
                "kind": "build",
                //"isDefault":true // 当选项为true时ctrl+b会自动执行该条任务,无法选择其他任务
            },
            "detail": "build"
        },
        {
            "label": "download",
            "type": "shell",
            "command": [
                "openocd.exe"
            ],
            "args": [
                "-f",
                "interface/cmsis-dap.cfg",
                "-f",
                "target/stm32f4x.cfg",
                "-c",
                "program build/${workspaceFolderBasename}.elf verify reset exit"
            ],
            "problemMatcher": "$gcc",
            "group": "build",
            "detail": "download"
        },
        {
            "label": "Launch OpenOCD",
            "command": "openocd.exe",
            "args": [
                "-f",
                "interface/cmsis-dap.cfg",
                "-f",
                "target/stm32f4x.cfg",
                "-c",
                "\"bindto 0.0.0.0\""
            ],
            "type": "shell",
            "isBackground": true,
            "problemMatcher": [],
            "group": "build",
            "detail": "debug"
        }
    ]
}

  • 这里面比如.elf文件,都用vscode中的变量替代了,不需要修改,前提是需要用vscode打开工程目录而不是别的文件夹。
  • 具体内容根据自己的路径设置即可
  • 以上文件就是对之前用命令行的方式进行封装,只需要ctrl+shift+b即可快速执行一个任务,非常方便。

ctrl+shift+b选择build后即可开始编译,出现下图说明编译成功Linux+vscode开发stm32教程【超详细】
ctrl+shift+b执行download任务即可开始下载

注意:在WSL2中需要在windows中安装openocd并添加到环境变量中,并在wsl中使用windows中安装的openocd.exe并且把tasks.json文件中的
"command": [ "openocd" ],改为 "command": [ "openocd.exe" ],
具体方法如下:打开openocd的下载链接:https://github.com/openocd-org/openocd/releases,下载后放到windows目录中进行解压,解压完成后复制解压文件夹下的bin目录路径,打开我的电脑->右键->属性->高级系统设置->环境变量->双击path->新建 把复制的路径粘贴进去确定即可

6. 调试

首先需要确定arm-none-eabi-gdb能否运行
如果出现下图错误
Linux+vscode开发stm32教程【超详细】

  1. 尝试
sudo apt install libncursesw5-dev

2.如果还未解决,尝试:

ln -s /usr/lib/libncursesw.so.6 /usr/lib/libncursesw.so.5

3.如果还未解决,尝试:


sudo apt install apt-file

sudo apt-file update

sudo apt-file find libncursesw.so.5

sudo apt install libncursesw5

解决这个问题之后可能还会有python版本的问题,要求使用python3.8但是我现在的python版本为3.10Linux+vscode开发stm32教程【超详细】
解决方法:

sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
# install python 3.8
sudo apt install python3.8

如果你用的交叉编译工具和我用的不一样,那么所需要的python版本也会不一样,具体需要看报错信息
参考:

  • https://cloud.tencent.com/developer/ask/sof/106947809
  • https://towardsdatascience.com/installing-multiple-alternative-versions-of-python-on-ubuntu-20-04-237be5177474

解决报错之后:
出现下列信息说明gdb调试工具能够正常运行
Linux+vscode开发stm32教程【超详细】

下一步

调试需要vscode安装cortex-debug这个插件
Linux+vscode开发stm32教程【超详细】

安装完成之后需要配置launch.json文件
Linux+vscode开发stm32教程【超详细】
配置如下:
具体的单片机型号自行修改

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
      {
        "name": "(gdb-remote) Debug",
        "type": "cortex-debug",
        "request": "launch",
        "servertype": "external",
        "cwd": "${workspaceRoot}",
        // "runToMain": true,
        "executable": "${workspaceRoot}/build/${workspaceFolderBasename}.elf",
        "svdFile": "${workspaceRoot}/STM32F40x.svd",
        "gdbTarget": "172.22.176.1:3333",
        "armToolchainPath": "/usr/local/toolchains/arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-eabi/bin"
      },
    ],
  }

gdbTarget需要使用命令cat /etc/resovl.conf查看
参考:https://github.com/Marus/cortex-debug/issues/308
在这里需要注意的是.svd文件,这是调试需要用到的文件.svd调试文件需要在windows的Keil的文件目录中找,我的路径如下/Users/用户名/AppData/Local/Arm/Packs/Keil/STM32F4xx_DFP/2.14.0/CMSIS/SVD/STM32F40x.svd
我在配置调试这里也出现了许多问题,出现问题多去搜索就好,实在不行下载一个STM32CubeIDE用来调试。

最后我把所需要的编译器还有svd文件都放在工程目录下了。

参考:文章来源地址https://www.toymoban.com/news/detail-402405.html

  • 1 https://blog.csdn.net/u010000843/article/details/114531922
  • 2 openocd命令操作
  • 3 vscode 有关task.json的文档
  • 4GDB调试

到了这里,关于Linux+vscode开发stm32教程【超详细】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32的vscode开发环境配置

    此文章写给我即将到来的Robocon学弟 目录 前言 一、vscode的下载安装 二、编译环境的下载 1.make工具 2.gcc-arm-none-eabi工具链 3.OpenOCD烧录 三、STM32CubeMX生成项目 总结 关于STM32的开发环境,新手最熟悉的应该就是Keil了,但是Keil这个软件的界面实在是太难看了,而且添加文件结构也

    2024年02月07日
    浏览(43)
  • vscode stm32cubemx 优雅开发stm32,最简单步骤教程

    下载STM32cubeMX,这个大家可以自己在stm的官网下载到 下载VSCode 下载arm-none-eabi-gcc 下载MinGW-w64,为了实现里面的makefile 等功能 下载OpenOCD这里用来调试stm32,支持jlink stlink daplink 上述安装步骤1、安装步骤2在这里比较简单,就不赘述了  此处我们下载zip包,方便安装。 以我为例

    2024年02月12日
    浏览(44)
  • VsCode配置STM32开发环境(MDK版-保姆级)

    前提:你得安装好MDK才能在VsCode里面配置开发环境,其原理就是使用插件链接上MDK的工具(安装MDK教程请看我历史文章)。 1:打开VsCode 2:进入插件管理器 3:搜索插件 插件名称 4:下载 点击安装即可 下载完成后,点击侧面小齿轮,进入扩展设置 此插件支持C51和STM32两个一起

    2024年02月16日
    浏览(36)
  • 手把手带你使用VSCode 搭建 STM32开发环境!

    首先附上一张VS Code图一直都喜欢这种,黑色主题感觉高大上。 下载最新版VS Code: 安装好插件,具有良好的代码补全与调试功能。 “ VS Code下载地址:https://code.visualstudio.com/ ” 下载 LLVM:用于代码补全,其实可以理解为 Clang。因为VS Code 中“C/C++”插件的自动补全功能不太好

    2024年02月07日
    浏览(45)
  • Vscode搭建开发调试STM32/RISC-V环境IDE(最全面)

    单片机开发IDE环境如KeilMDK,虽然操作简单 ,方便调试。但就是代码编辑风格很老套,中文符号乱码还是常有的事。而如今流行的vscode编辑器很不错,免费且相当轻量级,用来代码开发体验很不错,看着都舒服。Clion IDE体验更好,但就是它不免费且体积较大。Stm32cubeIDE生成工

    2024年02月16日
    浏览(50)
  • STM32 Linux开发板丨STM32MP157开发板资料手册+实战教程+视频教程

    iTOP-STM32MP157开发板是基于意法半导体STARM双Cortex-A7核加单Cortex-M4核的一款多核异构处理器。Cortex-A7内核提供对开源操作系统Linux的支持,借助Linux系统庞大而丰富的软件组件处理复杂应用。M4内核上运行对于实时性要求严格的应用。 开发板既有A7核,又有M4核,从学习者角度来看

    2024年02月12日
    浏览(28)
  • 使用arm-none-eabi-gcc编译器搭建STM32的Vscode开发环境

    make:Windows中没有make,但是可以通过安装MinGW或者MinGW-w64,得到make。 gcc-arm-none-eabi:建议最新版,防止调试报错 OpenOCD vscode cubeMX Arm Assembly:汇编文件解析 C/C++:c语言插件 Cortex-Debug:调试插件 gcc-arm-none-eabibin OpenOCDbin 建议MinGW-make工具重命名为make.exe并添加到gcc-arm-none-eabi

    2024年02月06日
    浏览(39)
  • Jlink+OpenOCD+STM32 Vscode 下载和调试环境搭建

    首先下载编译器:gcc-arm-none-eabi-xxx Downloads | GNU Arm Embedded Toolchain Downloads – Arm Developer 对于 Mingw 的安装比较困难,国内的网无法正常在线下载组件, 需要手动下载 x86_64-8.1.0-release-posix-seh-rt_v6-rev0.7z 版本的软件包,添加环境变量,并将 mingw32-make.exe 名字改成 make.exe。 MinGW-w6

    2024年04月22日
    浏览(29)
  • STM32开发 | Clion搭建STM32开发环境

    做嵌入式开发的人对STM32这个平台应该都是非常熟悉的,在国内尤其流行,很多产品里面都是基于这个平台做的方案。多数人在开发STM32的时候用的都是 Keil 这个老牌IDE,很大一部分原因是因为大多数人最初是从51单片机学习过来的,51就是基于Keil去开发的,然后迁移到STM32的

    2023年04月12日
    浏览(43)
  • VSCode Keil Assintant 联合开发STM32

    Date : 2023/12.5 Editor : RUAN YANG VS Code Keil 5 STM32CubeMX 配置MinGW 用于识别C/C++语言的语法,为VS Code提供智能提示和代码洞察的能力 VS Code下载插件 C/C++ Extension Pack Keil Assistance 🥈C/C++ Extension Pack 🥉C/C++ Extension Pack介绍 C/C++ Extension Pack 是一个 Visual Studio Code 的扩展包,专门为 C 和 C++

    2024年02月04日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包