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 toolchain即GNU 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的网上房屋租售网站》,是在信息化时代下充分利用互联网对传统房屋租售方式进行创新,在互联网上进行房屋租售突破了传统方式的局限性。对于房屋租售的当事人都提供了极大的便利。本稳针对了实际用户需求…...
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等…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...
安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...
深度学习水论文:mamba+图像增强
🧀当前视觉领域对高效长序列建模需求激增,对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模,以及动态计算优势,在图像质量提升和细节恢复方面有难以替代的作用。 🧀因此短时间内,就有不…...
基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...
GO协程(Goroutine)问题总结
在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…...
