前言

去年年底STM32CubeIDE更新了2.0架构,将原本IDE中打包的CubeMX给移除了,精简了体积,这个改动使这两款工具实现互操作的方式将与IAR EWARM、Keil MDK-ARM和STM32CubeIDE for VS Code相同。不过新版的IDE还是基于Eclipse的,很多Eclipse的问题还是存在,体验上还是差点的。现在开始使用STM32CubeIDE for VS Code进行开发,体验上好了不少。这篇文章将记录相关使用的内容。

官方说明:https://dev.st.com/stm32cube-docs/stm32cubeide-vscode/latest/en/index.html
在这里插入图片描述

安装与环境管理

首先需要安装VS Code:https://code.visualstudio.com/
然后在VS Code中安装STM32CubeIDE for VS Code扩展:
在这里插入图片描述

这个扩展会安装一系列十多个关联的扩展,如果只是进行STM32的开发,直接这么用也没问题,不过如果需要使用VS Code进行很多不同类型的项目开发的时候,各个插件间可能会有兼容性问题,所以最好使用下面文章中的配置方式进行环境隔离:

《用VS Code的配置文件 (Profiles)实现不同项目装载不同扩展》
https://blog.csdn.net/Naisu_kun/article/details/162452562

另外如果直接通过VS Code来新建项目的话会稍微不是那么方便,通常可以使用 STM32CubeMX 来新建项目:
https://www.st.com/en/development-tools/stm32cubemx.html
需要注意的是目前 STM32CubeMX2 只支持 STM32C5 系列。

新建项目与编译下载

新建项目

新建项目这里通过STM32CubeMX进行,唯一需要注意的是在生成项目的时候IDE需要选择 CMake :
在这里插入图片描述

项目创建后使用VS Code打开目录即可,打开时会提示需要打开的配置。这个也可以通过CMake扩展中进行选择:
在这里插入图片描述

编译

项目构建成功后可以直接进行编译:
在这里插入图片描述

此外编译也可以通过命令进行:
在这里插入图片描述

下载

现在版本的STM32CubeIDE for Visual Studio Code中好像是没办法直接仅下载编译好的固件到芯片中了,图形界面上只能通过调试时下载了,不过可以通过命令行进行下载:

https://community.st.com/stm32cubeide-for-visual-studio-code-mcus-133/missing-the-tasks-json-file-required-for-code-flash-154992#M961

cube programmer -c port=SWD -e all 下载编译生成的所有固件:
在这里插入图片描述

cube programmer -c port=SWD -d .\test.elf 下载指定固件:
在这里插入图片描述

调试

调试的时候最好i是线创建一个调试用的配置文件:
在这里插入图片描述

然后选择配置文件进行调试:
在这里插入图片描述

调试时常用的窗口都在界面上显示,有的窗口可能折叠起来了,需要用的时候打开就行:
在这里插入图片描述

调试用的配置文件中可以设置非常多的参数选项,可以实现很多特殊的功能,除了文章一开始的说明文档,另外也可以参考下面内容:
STM32CubeIDE for VS Code debug configuration (launch.json)
https://community.st.com/stm32-mcus-60/stm32cubeide-for-vs-code-debug-configuration-launch-json-161009

调试中比较常用的功能比如 Live watch 测试如下:
在这里插入图片描述

Debugging a running target 测试如下:

  • mian函数运行一段时间后调用下面函数手动引发HardFault,用来模拟实际的场景;
    void TriggerHardFault_UndefInstr(void) {
        __asm volatile("UDF #0");   // 未定义指令,立即触发 HardFault
    }
    
  • 使用命令烧录程序到芯片,并使芯片运行;
  • 调试配置文件关闭入口点和复位,这样进入调试时就不会影响芯片正在运行的状态,可以看到相关调用堆栈;
    在这里插入图片描述

CMake

上面的开发流程下,整个项目属于CMake项目,后面项目的代码组织,编译控制等都需要通过CMake进行。默认生成的CMake相关的内容集中在项目目录下的 cmake 目录和项目根目录下两个 CMake 开头的文件:

  • cmake/stm32cubemx/CMakeLists.txt: Managed by CubeMX. Do not modify it!
  • cmake/gcc-arm-none-eabi.cmake: Contains toolchain settings. Users can modify this file.
  • CMakeLists.txt: Contains high-level project definition. Users can modify this file.
  • CMakePresets.json: Contains CMake presets. Users can modify this file.

在这里插入图片描述

我们比较常打交道的就是项目根目录下的 CMakeLists.txt ,比如我们需要添加自己的代码就可以像下面那样进行添加(这里的sources是项目目录下的一个目录):
在这里插入图片描述

除了添加代码,像是设置编译优化选项等功能都是在这个 CMakeLists.txt 中进行的。更多内容可以参考官方说明:
https://dev.st.com/stm32cube-docs/stm32cubeide-vscode/latest/en/docs/markup/basic_concepts/cmake.html#

后记

最近这两年很多单片机常见推出的官方的IDE越来越多的从之前基于Eclipse的架构慢慢的迁移到了基于VS Code架构,这其中有ST这样的VS Code扩展的形式,也有直接基于开源的VS Code二次开发的版本,使用体验上真的是好了一大截。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐