发布于  更新于 

在 VSCode 上使用 CMake 开发 STM32CubeMX 项目

stm32 电子设计 指北 cmake vscode

本文提供了一种在 VSCode 上基于 CMake 开发 STM32CubeMX 项目的方案,配置了 Clangd 以获得更好的静态检查,并使用 Ninja 加快编译速度。本文的 CMake 配置文件能从 STM32CubeMX 生成的 Makefile 中读取编译参数,能自动同步 CubeMX 中的更改,也能在 CubeMX 重新生成项目时保留自定义选项。本文中的配置文件理论上适用于 Windows, Linux 和 macOS. 由于芯片相关信息是从 Makefile 中读取的, 本文的配置文件理论上适用于所有 STM32CubeMX 支持的 MCU.

需要安装的软件

不需要 Keil!

需要安装以下编译和调试工具, 并将其添加到系统 PATH 中. 在 Windows 上推荐使用 Scoop. Scoop 能自动下载安装这些工具 (需要好的网络连接), 并将其添加到 PATH.

  • gcc-arm-none-eabi
  • openocd
  • cmake
  • llvm (提供 clangd 和 clang-format)
  • ninja (加快编译速度)

可以使用 scoop install 这些软件包的最新版本, 安装后建议重启所有打开的 VSCode 窗口以应用更改. 只需在 PowerShell 中运行以下命令即可安装所有软件包:

1
2
3
4
5
6
7
# 如果你还没有安装 Scoop
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Invoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression

# 安装软件包
scoop bucket add extras
scoop install gcc-arm-none-eabi openocd cmake llvm ninja

另外还需要安装以下来自 ST 的软件

还需要以下 VSCode 插件. 使用下列的配置文件打开项目后, 会自动提示安装.

  • ms-vscode.cpptools
  • llvm-vs-code-extensions.vscode-clangd
  • ms-vscode.cmake-tools
  • marus25.cortex-debug

使用方法

  1. 使用 STM32CubeMX 正常地创建并配置项目, 需要如图选择 Makefile 类型的项目, 然后点击 Generate Code 生成项目

  2. 打开生成的项目, 将 代码仓库 中的 CMakeLists.txt.vscode 文件夹放置在与 ioc 文件相同的目录

  3. 用 VSCode 打开文件夹, 并用 CMake 插件配置 (Configure) 项目.

  4. 提示选择 Kit 时, 由于配置文件中已指定使用 gcc-arm-none-eabi, 直接选择 [Unspecified]. (请确保编译器已在 PATH 中, 使用 Scoop 安装会自动添加 PATH)

  5. 首次配置后, 重新启动或者刷新 VSCode, clangd 应当已经能正常工作, 能正确的找到系统头文件

  6. 按这个编译

  7. 这个选项已配置成编译并下载

  8. 按这个编译,下载并调试

  9. 如果需要新增源文件或动态库,可以直接在 CMakeLists.txt 中添加,不会在 CubeMX 重新生成时被覆盖. 添加后需重新配置 (Configure) 项目. 上方的 CMakeLists.txt 中有一个在 Cortex M7 设备上使用 CMSIS-DSP 库的例子.

如果 OpenOCD 烧录失败, 可尝试用 STM32CubeProgrammer 更新 ST-Link 固件版本.