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

作者:菜哥万岁万岁万万岁

物联沃分享整理
物联沃-IOTWORD物联网 » VSCode下EIDE插件开发STM32

发表回复