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

VSCode下EIDE插件开发STM32

VSCode下STM32开发环境搭建

本STM32教程使用vscode的EIDE插件的开发环境,完全免费,有管理代码文件的界面,不需要其它IDE
视频教程见本人的

VSCode+EIDE开发STM32

安装EIDE插件

Embedded IDE 嵌入式IDE

这个插件可以帮我们管理代码文件,配置工具链(什么是工具链见下文)等。

这里先安装此插件,此插件使用,工具链安装等,后面配合示例工程讲解。
在这里插入图片描述在这里插入图片描述

EIDE网站,可以查看此插件的更新日志。

这是什么? | Embedded IDE For VSCode

什么是工具链

简单的说就是把源文件(也就是xx.c xxx.cpp等)变成可执行文件的东西。

在这里插入图片描述

开发不同的东西需要不同的工具链,

比如在windows上,源文件最后会变成.exe
用Visual Studio写.cpp用的就是MSVC 编译器工具集(也称为工具链或“生成工具”)
用VSCode写.cpp,教程都会让你下载mingw

而开发单片机,也需要对应其内核的工具链。

stm32是arm的内核,所以需要arm相关的工具链。
keil就是armcc v5 v6的工具链(收费)。
本教程使用的是免费gnu arm embedded toolchainGNU Arm 嵌入式工具链

这是它的网址Arm GNU Toolchain Downloads – Arm Developer,如果你想可以去下载最新版,我这里用EIDE安装。
在这里插入图片描述

使用EIDE安装gcc工具链

点击安装实用工具,安装gcc_arm工具链

在这里插入图片描述

它会开始下载安装工具链

在这里插入图片描述

如果使用EIDE安装工具链,它的安装路径如下
C:\Users\用户名.eide\tools
在这里插入图片描述

假如你本来就有,可以直接设置安装位置。

比如你自己下载了工具链,或者安装了stm32的工具包(STM32 VS Code Extension 插件让你安装的那个),或者安装了STM32CubeIDE,就直接找到gcc_arm工具链填入其路径就行。

点击设置工具链,设置 GNU Arm Embedded Toolchain
在这里插入图片描述

示例工程

创建一个示例工程,进一步说明。

示例工程实现LED闪烁。

用CubeMX生成工程代码

打开stm32cubeMX,打开选择器,选择你开发板对应的芯片型号。
进入配置界面,设置LED对应引脚为输出模式,通常是PC13因为这个引脚没有太多其它功能。
顺便设置个标签,LED0,便于后面写代码。
工程名称就叫demo1吧。
只复制必要的库文件,为每个外设生成一对‘.c/.h’文件初始化外设等不再赘述。
在这里插入图片描述

工具链/IDE选择
这里的STM32CubeIDE CMake Makefile 使用的都是arm-gcc的工具链!
不过CMake Makefile产生的工程需要自己配置项目资源,CubeIDE产生的工程导入即可。
这里先选择CMake或者Makefile自己配置一下项目,STM32CubeIDE导入的教程见下文。

在这里插入图片描述

生成的工程文件夹
在这里插入图片描述

EIDE插件的使用

新建空项目

在这里插入图片描述

STM32选择Cortex-M项目,项目名称建议和之前的工程名称保持一致。

在这里插入图片描述
在这里插入图片描述

项目保存位置为工程文件夹的位置(而不是工程文件夹内)

在这里插入图片描述

项目文件夹已经存在的警告选是

在这里插入图片描述

切换至工作区
在这里插入图片描述

VSCode切换到了工作区

在这里插入图片描述

编译工程

添加项目资源
添加.c文件

添加普通文件夹,它具有递归查找能力,能往下查找到你的代码文件。

在这里插入图片描述

添加包含.c代码的文件夹。

在这里插入图片描述
.c文件添加完毕
在这里插入图片描述

添加启动文件startup.s

项目资源添加一个虚拟文件夹
在这里插入图片描述

添加启动文件startup.s,选择文件的时候选择any就可以看到所有文件。
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
启动文件.s添加完毕
在这里插入图片描述

顺便说一下
普通文件夹要在工程文件夹下面添加。
当然如果你愿意,可以全部使用虚拟文件夹去添加所有源文件。
只要将工程涉及到源文件全部添加了就可以。

构建配置
选择CPU类型

选择CPU类型,根据你的单片机选择,STM32F4选M4,F1选M3

在这里插入图片描述

设置链接脚本路径

设置链接脚本路径,就是CubeMX生成的flash.ld文件。
在这里插入图片描述

它就在工程文件夹那层里,把它文件名填上去就行
在这里插入图片描述

项目属性

就是,头文件路径、库文件路径、要预处理的宏定义这些。

如果搞不清楚CubeMX生成的代码的相关配置,可以查看CubeMX生成的CMake或makefile。

在这里插入图片描述

这里说一下,并没有使用CMake,打开它只是为了确认要填入的信息。

添加头文件目录

就是所有.h所在的目录。
在这里插入图片描述
包含目录添加完毕
在这里插入图片描述

添加预处理宏定义

代码文件里有类似这样的代码,这些编译预处理命令需要添加预处理宏定义配合编译。

#if defined (USE_HAL_DRIVER)//如果定义了它
//...
//做什么什么
//...
#endif /* USE_HAL_DRIVER */

在这里插入图片描述
预处理宏定义添加完毕
在这里插入图片描述

当然,如果你自己建立了代码文件夹也需要添加相关的配置。

编译

都配置好了,然后就能编译了

随便打开一个代码文件,右上角既可以找到编译。
在这里插入图片描述

编译完毕,没有错误没有警告。

在这里插入图片描述

生成的可执行文件(待下载到单片机上)
在这里插入图片描述

如何烧录(下载)

安装下载器对应的工具。

一般大家搞stm32都是用stlink因为便宜,如果是jlink就下载jlink的。

在这里插入图片描述

安装后它也会安装STLINk的驱动等。
在这里插入图片描述

烧录配置,选择烧录工具

在这里插入图片描述

添加工程代码

添加让LED0闪烁的代码,并重新编译。

    HAL_GPIO_WritePin(LED0_GPIO_Port, LED0_Pin, GPIO_PIN_SET);HAL_Delay(500);HAL_GPIO_WritePin(LED0_GPIO_Port, LED0_Pin, GPIO_PIN_RESET);HAL_Delay(500);
烧录

点击右上角的下载按钮即可下载。

在这里插入图片描述

提示:请正确连接你的下载器和开发板。

烧录完毕

在这里插入图片描述

LED0已经开始闪烁。

在这里插入图片描述

调试

相关解释请参考

cortex-debug 用法 - 博客 - Embedded IDE Forum

安装调试用的插件和工具
安装Cortex Debug

安装VSCode插件 Cortex Debug,调试需要。

在这里插入图片描述

安装OpenOCD

OpenOCD是一个免费的开源软件,用于调试和编程嵌入式设备。

可以直接在EIDE这里下载。

在这里插入图片描述

假如你有OpenOCD就不用重新下载了,之后写路径的时候改一下就行。
比如你自己下载了OpenOCD,或者安装了stm32的工具包(STM32 VS Code Extension 插件让你安装的那个),就直接找到填入其路径就行。
在这里插入图片描述

如果使用EIED安装OpenOCD,它的安装位置如下。
C:\Users\用户名.eide\tools
在这里插入图片描述

创建launch.json文件

launch.json 是 Visual Studio Code 中用于配置调试器的文件。
openOCD路径在EIDE插件中设置好后,EIDE就可以帮助我们创建launch.json文件。

launch.json的创建

右键点击你的项目,生成调试器配置模板,进行选择。
在这里插入图片描述
选择接口,根据你的下载器选择。
在这里插入图片描述
这其实是选择下载器对应的.cfg配置文件。
顺便说一下stlink .cfg文件路径如下。
(openOCD安装位置)openocd_7a1adfbec_mingw32\share\openocd\scripts\interface
在这里插入图片描述
选择目标,根据你的芯片选择。
在这里插入图片描述
这其实是选择单片机对应的.cfg配置文件。
stm32 .cfg文件路径如下,使用哪个根据你的芯片修改。
(openOCD安装位置)\openocd_7a1adfbec_mingw32\share\openocd\scripts\interface\target
在这里插入图片描述

点击新建,即可完成创建。
在这里插入图片描述

生成的launch.json文件
{"version": "0.2.0","configurations": [{"cwd": "${workspaceRoot}","type": "cortex-debug","request": "launch","name": "Debug: OpenOCD","servertype": "openocd",//.elf可执行文件路径,编译后生成"executable": "build/Debug/demo1.elf","runToEntryPoint": "main","configFiles": [//使用ST-LINK,stlink版本根据你的下载器修改"interface/stlink-v2-1.cfg",//使用stm32f?,stm32f?根据你的芯片修改"target/stm32f4x.cfg"],"toolchainPrefix": "arm-none-eabi"}]
}

顺便说一下,.elf是调试要用的可执行文件。
路径在build\Debug下。
在这里插入图片描述

开始调试

搞好之后保存launch.json文件,选择设置好的启动项Debug with OpenOCD,加入断点,即可开始调试

在这里插入图片描述

成功
在这里插入图片描述
可以在左面查看变量,添加监视等。

导入CubeIDE工程

CubeIDE实际上也是用的arm-gcc的工具链。

我这里用cubeMX生成一个来说明。

创建一个CubeIDE工程

在这里插入图片描述

导入

导入空的嵌入式gcc项目
在这里插入图片描述

项目资源,项目属性等已经自动添加好了。

构建配置仍需手动修改。

在这里插入图片描述

注意生成的flash.ld文件中

  .ARM.extab (READONLY) : /* The "READONLY" keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */{. = ALIGN(4);*(.ARM.extab* .gnu.linkonce.armextab.*). = ALIGN(4);} >FLASH

它有个关键词需要gcc11以上的版本,目前(2025年1月20日)EIDE下载到的是10!可以删除相关内容,或者手动更新工具链

之后即可正常编译。
在这里插入图片描述

烧录、调试等完全一致,见上文。

后记

使用VSCode EIDE开发,不需要其它IDE。
使用arm-gcc完全免费

没有这个EIDE插件确实能开发,但是要手动配置工具链,每次编译代码都需要在命令窗口中输入相应的指令,很麻烦。

按理说,找到对应内核的工具链就能开发相应的单片机。
EIDE这个插件能设置的工具链挺多的。
在这里插入图片描述

CMake现在在C/C++的项目中用的越来越多,建议了解一下。
STM32 VS Code Extension 插件用的是CMake。但它没有图形化的配置界面,比如加个文件,得自己写路径,比较麻烦。

参考资料

抛弃keil?VScode开发stm32完整教程_哔哩哔哩_bilibili

VSCode+EIDE开发CH32V系列RISC-V MCU - Wahahahehehe - 博客园

这是什么? | Embedded IDE For VSCode

cortex-debug 用法 - Blog - Embedded IDE Forum

相关文章:

VSCode下EIDE插件开发STM32

VSCode下STM32开发环境搭建 本STM32教程使用vscode的EIDE插件的开发环境,完全免费,有管理代码文件的界面,不需要其它IDE。 视频教程见本人的 VSCodeEIDE开发STM32 安装EIDE插件 Embedded IDE 嵌入式IDE 这个插件可以帮我们管理代码文件&am…...

Golang并发机制及CSP并发模型

Golang 并发机制及 CSP 并发模型 Golang 是一门为并发而生的语言,其并发机制基于 CSP(Communicating Sequential Processes,通信顺序过程) 模型。CSP 是一种描述并发系统中交互模式的正式语言,强调通过通信来共享内存…...

HTML 文本格式化详解

在网页开发中,文本内容的呈现方式直接影响用户的阅读体验。HTML 提供了多种文本格式化元素,可以帮助我们更好地控制文本的显示效果。本文将详细介绍 HTML 中的文本格式化元素及其使用方法,帮助你轻松实现网页文本的美化。 什么是 HTML 文本格…...

我谈《概率论与数理统计》的知识体系

学习《概率论与数理统计》二十多年后,在廖老师的指导下,才厘清了各章之间的关系。首先,这是两个学科综合的一门课程,这一门课程中还有术语冲突的问题。这一门课程一条线两个分支,脉络很清晰。 概率论与统计学 概率论…...

五、华为 RSTP

RSTP(Rapid Spanning Tree Protocol,快速生成树协议)是 STP 的优化版本,能实现网络拓扑的快速收敛。 一、RSTP 原理 快速收敛机制:RSTP 通过引入边缘端口、P/A(Proposal/Agreement)机制等&…...

基于Java Web的网上房屋租售网站

内容摘要 本毕业设计题目为《基于Java Web的网上房屋租售网站》,是在信息化时代下充分利用互联网对传统房屋租售方式进行创新,在互联网上进行房屋租售突破了传统方式的局限性。对于房屋租售的当事人都提供了极大的便利。本稳针对了实际用户需求&#xf…...

Pyside6(PyQT5)中的QTableView与QSqlQueryModel、QSqlTableModel的联合使用

QTableView 是QT的一个强大的表视图部件,可以与模型结合使用以显示和编辑数据。QSqlQueryModel、QSqlTableModel 都是用于与 SQL 数据库交互的模型,将二者与QTableView结合使用可以轻松地展示和编辑数据库的数据。 QSqlQueryModel的简单应用 import sys from PySid…...

git常用命令学习

目录 文章目录 目录第一章 git简介1.Git 与SVN2.Git 工作区、暂存区和版本库 第二章 git常用命令学习1.ssh设置2.设置用户信息3.常用命令设置1.初始化本地仓库init2.克隆clone3.查看状态 git status4.添加add命令5.添加评论6.分支操作1.创建分支2.查看分支3.切换分支4.删除分支…...

【优选算法】7----三数之和

来了来了,他来了,又是学习算法的一天~ 今天的嘉宾是中等难度的算法题----三数之和! ------------------------------------------begin------------------------------------ 题目解析: 哇趣!又是给了一个数组&#…...

分子动力学模拟里的术语:leap-frog蛙跳算法和‌Velocity-Verlet算法

分子动力学模拟(Molecular Dynamics Simulation,简称MD)是一种基于经典力学原理的计算物理方法,用于模拟原子和分子在给定时间内的运动和相互作用‌。以下是关于分子动力学模拟的一些核心术语和概念: ‌定义系统‌&am…...

2025年数学建模美赛:A题分析(1)Testing Time: The Constant Wear On Stairs

2025年数学建模美赛 A题分析(1)Testing Time: The Constant Wear On Stairs 2025年数学建模美赛 A题分析(2)楼梯磨损分析模型 2025年数学建模美赛 A题分析(3)楼梯使用方向偏好模型 2025年数学建模美赛 A题分…...

利用 SoybeanAdmin 实现前后端分离的企业级管理系统

引言 随着前后端分离架构的普及,越来越多的企业级应用开始采用这种方式来开发。前后端分离不仅提升了开发效率,还让前端和后端开发可以并行进行,减少了相互之间的耦合度。SoybeanAdmin 是一款基于 Spring Boot 和 MyBatis-Plus 的后台管理系…...

996引擎 - 前期准备-配置开发环境

996引擎 - 前期准备 官网搭建服务端、客户端单机搭建 开发环境配置后端开发环境配置环境 前端开发环境配置环境 后端简介前端简介GUILayoutGUIExport 官网 996传奇引擎官网 所有资料从官网首页开始,多探索。 文档: 996M2-服务端Lua 996M2-客户端Lua 搭…...

Tensor 基本操作4 理解 indexing,加减乘除和 broadcasting 运算 | PyTorch 深度学习实战

前一篇文章,Tensor 基本操作3 理解 shape, stride, storage, view,is_contiguous 和 reshape 操作 | PyTorch 深度学习实战 本系列文章 GitHub Repo: https://github.com/hailiang-wang/pytorch-get-started Tensor 基本使用 索引 indexing示例代码 加减…...

【Uniapp-Vue3】request各种不同类型的参数详解

一、参数携带 我们调用该接口的时候需要传入type参数。 第一种 路径名称?参数名1参数值1&参数名2参数值2 第二种 uni.request({ url:"请求路径", data:{ 参数名:参数值 } }) 二、请求方式 常用的有get,post和put 三种,默认是get请求。…...

【Prometheus】Prometheus如何监控Haproxy

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…...

SSM开发(一)JAVA,javaEE,spring,springmvc,springboot,SSM,SSH等几个概念区别

目录 JAVA 框架 javaEE spring springmvc springboot SSM SSH maven JAVA 一种面向对象、高级编程语言,Python也是高级编程语言;不是框架(框架:一般用于大型复杂需求项目,用于快速开发)具有三大特性,所谓Jav…...

HTML5 常用事件详解

在现代 Web 开发中,用户交互是提升用户体验的关键。HTML5 提供了丰富的事件机制,允许开发者监听用户的操作(如点击、拖动、键盘输入等),并触发相应的逻辑处理。本文将详细介绍 HTML5 中的常用事件,包括鼠标…...

TCP全连接队列

1. 理解 int listen(int sockfd, int backlog) 第二个参数的作用 backlog:表示tcp全连接队列的连接个数1。 如果连接个数等于backlog1,后续连接就会失败,假设tcp连接个数为0,最大连接个数就为1,并且不accept获取连接…...

统计文本文件中单词频率的 Swift 与 Bash 实现详解

网罗开发 (小红书、快手、视频号同名) 大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等…...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...

ES6从入门到精通:前言

ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...

基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)

引言 在嵌入式系统中,用户界面的设计往往直接影响到用户体验。本文将以STM32微控制器和OLED显示屏为例,介绍如何实现一个多级菜单系统。该系统支持用户通过按键导航菜单,执行相应操作,并提供平滑的滚动动画效果。 本文设计了一个…...

前端工具库lodash与lodash-es区别详解

lodash 和 lodash-es 是同一工具库的两个不同版本,核心功能完全一致,主要区别在于模块化格式和优化方式,适合不同的开发环境。以下是详细对比: 1. 模块化格式 lodash 使用 CommonJS 模块格式(require/module.exports&a…...

用js实现常见排序算法

以下是几种常见排序算法的 JS实现,包括选择排序、冒泡排序、插入排序、快速排序和归并排序,以及每种算法的特点和复杂度分析 1. 选择排序(Selection Sort) 核心思想:每次从未排序部分选择最小元素,与未排…...

【题解-洛谷】P10480 可达性统计

题目:P10480 可达性统计 题目描述 给定一张 N N N 个点 M M M 条边的有向无环图,分别统计从每个点出发能够到达的点的数量。 输入格式 第一行两个整数 N , M N,M N,M,接下来 M M M 行每行两个整数 x , y x,y x,y,表示从 …...