使用STM32CubeMX2+CLion时的注意事项

最近入手了一块 NUCLEO-C562RE 开发板,需要用到新的 STM32CubeMX2 开发环境。本来想着都是 CMake 编译,环境也大差不差,依葫芦画瓢就可以了,结果出现编译失败和下载失败的问题。稍微踩坑后解决,故编写本文。

本次复现环境为STM32CubeMX2 1.1.1 + CLion 2026.1.2

编译失败

排查

用 STM32CubeMX2 生成 CMake 工程后,使用 CLion 打开。加载生成的预设debug_GCC_NUCLEO-C562RE

结果 CMake 输出报错:

1
2
CMake Error at CMakeLists.txt:12 (add_executable):
  No SOURCES given to target: STM32C5

CMakeLists.txt 长这样:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
cmake_minimum_required(VERSION 3.30)
set(CMAKE_EXPORT_COMPILE_COMMANDS TRUE)
set(CMAKE_C_COMPILER_FORCED TRUE)
set(CMAKE_CXX_COMPILER_FORCED TRUE)

include(cmake/target.cmake)
include(cmake/${TOOLCHAIN_FILE})

project(STM32C5)

add_executable(STM32C5)

include(cmake/files.cmake)
include(cmake/flags.cmake)
include(cmake/components.cmake)

进入cmake/files.cmake查看生成的文件:

1
2
3
if(CMAKE_BUILD_TYPE STREQUAL "debug_GCC_NUCLEO-C562RE")  
  target_sources(${CMAKE_PROJECT_NAME} PRIVATE main.c main.h)  
endif()

这里看到 target_sources 前有一个条件判断,怀疑是CMAKE_BUILD_TYPE出现问题。在 CMakeLists.txt 中加入 debug 语句 message("Build type: " ${CMAKE_BUILD_TYPE})后发现输出Build type: ${presetName}。真相大白:就是因为CMAKE_BUILD_TYPE被错误地设置了。

原因

CMakePresets.json 中定义的是

1
2
3
"cacheVariables": {  
    "CMAKE_BUILD_TYPE": "${presetName}"
}

CLion 把 preset 导入成只读的 CMake profile 时并没有解析这个 variable,Build type 直接变成了 ${presetName},执行命令的时候就把这个字面量原样传给了 -DCMAKE_BUILD_TYPEfiles.cmake中什么都没有添加。

解决办法

在 CLion 里复制一份 preset,然后手动改 CMAKE_BUILD_TYPE:

  1. 打开 设置 -> 构建、执行、部署 -> CMake
  2. 选中 debug_GCC_NUCLEO-C562RE 预设,点击复制
  3. 复制出来的配置里把 构建类型 改成 debug_GCC_NUCLEO-C562RE
  4. 启用复制出来的配置
  5. 重新加载 CMake 项目并编译

更改后的配置

下载失败

排查

编译没问题了,结果下载又报错……反复尝试后发现 STM32CubeProgrammer 能正常下载,但是 CLion 的 ST-LINK GDB Server 连不上。

搜了一下,有人遇到过一模一样的问题: ST-LINK GDB Server issue with STM32C5 | Community

回复说这个芯片的 CPU core 在 access port 1 上,需要加 -m 1 参数。

原因

参考手册的 Debug support(DBG)章节写了有两个 AP:

  • AP0:System debug access port,访问 DBGMCU 和系统 ROM 表
  • AP1:Cortex-M33 debug access port,访问内核的调试和 trace 功能

GDB Server 默认连的是 AP0,但内核在 AP1,所以找不到。STM32CubeProgrammer 估计是内置了这部分的处理逻辑,所以什么都不用改就连上了。

解决办法

  1. 打开 设置 -> 调试器 -> 调试服务器
  2. 选中 ST-LINK 配置
  3. 多核 -> 访问端口 改成 1
  4. 确定后重新调试

访问端口改为1

改完就正常了。

Licensed under CC BY-NC-SA 4.0