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所在的目录。

包含目录添加完毕

添加预处理宏定义

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

cpp 复制代码
#if defined (USE_HAL_DRIVER)//如果定义了它
//...
//做什么什么
//...
#endif /* USE_HAL_DRIVER */

预处理宏定义添加完毕

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

编译

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

随便打开一个代码文件,右上角既可以找到编译。

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

生成的可执行文件(待下载到单片机上)

如何烧录(下载)

安装下载器对应的工具。

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

安装后它也会安装STLINk的驱动等。

烧录配置,选择烧录工具
添加工程代码

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

cpp 复制代码
    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 中用于配置调试器的文件。

launch.json的创建

切换到代码文件,点运行和调试。创建launch.json文件,在工程中。

调试器选择Cortex Debug

自动生成代码的时候选择OpenOCD

这是自动生成的launch.json还需要修改

填写可执行文件路径

调试要用到可执行文件.elf,它在build/Debug下。

executable 这里填入

json 复制代码
            //elf文件看当前工程名称或是看build文件夹下的elf文件名称
            "executable": "build/Debug/demo1.elf",
填写配置文件路径

找到你OpenOCD的安装位置

configFiles这里如下填写

json 复制代码
"configFiles": [
                //使用ST-LINK,路径根据你的openOCD的安装位置修改,stlink版本根据你的下载器修改
                "C:/Users/CaiYunWei/.eide/tools/openocd_7a1adfbec_mingw32/share/openocd/scripts/interface/stlink-v2-1.cfg",
                //使用stm32f?,路径根据你的openOCD的安装位置修改,stm32f?根据你的芯片修改
                "C:/Users/CaiYunWei/.eide/tools/openocd_7a1adfbec_mingw32/share/openocd/scripts/target/stm32f4x.cfg"
            ],

stlink .cfg文件路径如下,使用哪个根据你的下载器修改。

C:\Users\你的用户名.eide\tools\openocd_7a1adfbec_mingw32\share\openocd\scripts\interface

stm32 .cfg文件路径如下,使用哪个根据你的芯片修改。

C:\Users\你的用户名.eide\tools\openocd_7a1adfbec_mingw32\share\openocd\scripts\interface\target

参考的launch.json文件
json 复制代码
{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "cwd": "${workspaceRoot}",
            //.elf可执行文件路径
            "executable": "build/Debug/demo1.elf",
            "name": "Debug with OpenOCD",
            "request": "launch",
            "type": "cortex-debug",
            "servertype": "openocd",
            "configFiles": [
                //使用ST-LINK,路径根据你的openOCD的安装位置修改,stlink版本根据你的下载器修改
                "C:/Users/CaiYunWei/.eide/tools/openocd_7a1adfbec_mingw32/share/openocd/scripts/interface/stlink-v2-1.cfg",

                //使用stm32f?,路径根据你的openOCD的安装位置修改,stm32f?根据你的芯片修改
                "C:/Users/CaiYunWei/.eide/tools/openocd_7a1adfbec_mingw32/share/openocd/scripts/target/stm32f4x.cfg"

            ],
            "searchDir": [],
            "runToEntryPoint": "main",
            "showDevDebugOutput": "none"
        }
    ]
}

生成的jlink相关代码用不到,可以删掉。

开始调试

搞好之后保存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

相关推荐
隼玉39 分钟前
【STM32-学习笔记-15-】MAX7219点阵屏模块
c语言·笔记·stm32·学习
andylauren1 小时前
(3)STM32 USB设备开发-USB存储设备
stm32·单片机·嵌入式硬件
番茄老夫子1 小时前
stm32 L051 adc配置及代码实例解析
stm32·单片机·嵌入式硬件
欢天喜地小姐姐2 小时前
ubuntu16.04 VSCode下cmake+clang+lldb调试c++
c++·vscode
7yewh4 小时前
嵌入式知识点总结 ARM体系与架构 专题提升(一)-硬件基础
arm开发·stm32·单片机·嵌入式硬件·mcu·物联网
youcans_12 小时前
【EdgeAI实战】(1)STM32 边缘 AI 生态系统
人工智能·stm32·单片机·嵌入式硬件·边缘计算
年轮不改12 小时前
VSCode+EIDE 环境搭建
ide·vscode·编辑器·嵌入式
青柚~13 小时前
【Idea启动项目报错NegativeArraySizeException】
java·ide·intellij-idea
黄金右肾14 小时前
STM32之CubeMX图形化工具开发介绍(十七)
stm32·cubemx·嵌入式软件