在传统的 STM32 开发中,Keil MDK 凭借其一键安装、开箱即用的工程模板和集成调试器,长期占据主流地位。然而,Keil 也存在代码编辑体验一般、索引速度慢、跨平台能力弱以及高昂的授权费用等问题。相比之下,JetBrains CLion 作为现代 IDE,拥有智能代码补全、深度 CMake 集成、强大的调试前端以及统一的 UI 风格,能够显著提升嵌入式开发效率。但 CLion 本身并不直接支持 STM32,需要开发者手动配置交叉编译工具链、调试接口和构建系统,门槛较高。本文基于实际开发经验,系统对比了 Keil 与 CLion 开发流程的差异,并详细记录了在 Ubuntu 与 Windows 平台下使用 CLion + OpenOCD + STM32CubeMX + arm-none-eabi-gcc 搭建 STM32 开发环境的完整步骤,涵盖从工具安装、工程生成到编译、下载、调试的全流程,同时提供针对 F103 系列常见报错的具体修复方法。无论你是希望摆脱 Keil 束缚的资深工程师,还是初次尝试 CLion 的嵌入式爱好者,本文都能帮助你快速搭建一套稳定、高效的 CLion STM32 开发环境。
参考:https://zhuanlan.zhihu.com/p/628628503
1.安装OpenOCD
OpenOCD 是一个开源的片上调试器,负责与调试探头(如 ST‑Link、J‑Link、CMSIS‑DAP)通信,向目标 MCU 发出调试和编程指令。它实现了 GDB 远程调试协议,使得 GDB 或 IDE(如 CLion)能够通过它实现断点设置、单步执行、寄存器/内存查看以及固件下载。在 CLion 环境中,通过“OpenOCD 运行/调试配置”调用,实现一键下载和调试。
1.1 Ubuntu
sudo apt install openocd
- 对应版本:
- Ubuntu-20.04 :0.10.0
- Ubuntu-22.04 :0.11.0
1.2 Windows
1.2.1 下载
首先,您需要从 OpenOCD 官方网站下载 Windows 版本的 OpenOCD。访问 https://gnutoolchains.com/arm-eabi/openocd/ 并选择合适的版本。通常您可以选择预编译的 Windows 执行文件。
1.2.2 安装并配置环境变量
在Path中配置OpenOCD可执行文件的路径
2.安装STM32CubeMX
STM32CubeMX 是 ST 官方推出的图形化配置工具,用于初始化 STM32 的时钟树、外设(GPIO、USART、I2C、SPI、ADC 等)、中间件(FreeRTOS、USB、FATFS)以及引脚分配。它能够自动生成初始化代码,并支持多种 IDE/工具链(Keil、IAR、STM32CubeIDE、Makefile 等)。
特点:
- 图形化界面,无需手动查阅数据手册配置寄存器,大幅降低入门门槛。
- 可计算并优化系统时钟,避免无效或冲突的配置。
- 生成的外设初始化代码基于 STM32 HAL 库或 LL 库,具有良好的可读性和可移植性。
- 在 CLion 开发流程中:
- 先用 CubeMX 创建 .ioc 文件,配置好芯片和外设。
- 在Project Manager中将 Toolchain/IDE 选为 STM32CubeIDE(会生成结构清晰的源码目录和 CMakeLists.txt)。
- 随后在 CLion 中直接打开该工程,CLion 会识别 CMake 结构,再按本文档后续步骤添加编译选项和调试配置即可。
下载链接:https://www.st.com/en/development-tools/stm32cubemx.html
3.安装MinGW(Windows平台)
MinGW 是一套在 Windows 平台上原生支持 GNU 工具链(GCC、GDB、make 等)的开发环境。它不需要模拟层(如 Cygwin),生成的程序直接调用 Windows API,运行效率高。在 STM32 开发中,MinGW 主要用于提供make工具和必要的命令行环境,以便 CLion 或手动方式能够执行 CMake 构建、编译脚本等操作。
- 下载地址:https://www.mingw-w64.org/downloads/
- 配置环境变量:在Path中配置
4.安装arm-none-eabi-gcc
是一套专为裸机 Arm Cortex‑M/R 处理器(包括 STM32)打造的交叉编译工具链。它包含编译器(arm‑none‑eabi‑gcc)、汇编器、链接器、库文件(newlib)以及调试器(arm‑none‑eabi‑gdb)。使用该工具链,可以在 PC(x86/x64)上编译出能在 STM32 上运行的二进制代码。在 CLion 中,通过 CMake 的 toolchain 文件或直接在 target_compile_options 中指定该工具链路径,即可无缝使用。
4.1 Ubuntu
sudo apt install arm-none-eabi-gcc
4.2 Windows
- 下载:https://developer.arm.com/downloads/-/gnu-rm
- 解压并添加环境变量:将bin文件夹路径添加到Path中
5.创建项目
5.1 使用Clion新建STM32CubeMX项目
选择好项目路径后点击创建
这里先跳过
5.2 使用STM32CubeMX打开.ioc文件
5.3 配置STM32工程(这里不详细说明了,简单说下怎么修改芯片型号)
将 `Toolchain/IDE` 参数修改为:`STM32CubeIDE`
如果没有弹出这个,说明路径配置的有问题
点击Yes,弹出这个窗口:
点击Close
5.4 Clion配置编译、下载、调试
回到Clion界面,先点击跳过
点击加载CMake项目
出现这些就是成功了
编辑配置
添加OpenOCD配置
配置如下:
面板配置文件参考这个:配置CLion用于STM32开发【优雅の嵌入式开发】 - 知乎
新建好.cfg文件后选择即可
点击编译
6.编译选项和宏配置
# Add project symbols (macros) target_compile_definitions(${CMAKE_PROJECT_NAME} PRIVATE # 告诉 CMSIS 头文件:此设备有 FPU __FPU_PRESENT=1 # 告诉 CMSIS:项目将使用 FPU(通常由编译器选项隐式设置,但显式定义更安全) __FPU_USED=1 # 如果你使用 Keil/IAR 的兼容宏,可以加上,但 GCC 下非必需 # __CC_ARM # __TARGET_FPU_VFP # HAL 库相关定义(根据你的实际配置调整) USE_HAL_DRIVER ARM_MATH_CM4 STM32F429xx # 确保这个是正确的!F429IGT6 属于 F429/439 系列 ) target_compile_options(${PROJECT_NAME} PRIVATE # 指定目标 CPU 架构 (Cortex-M4) -mcpu=cortex-m4 # 生成 Thumb-2 指令集代码(必须) -mthumb # 启用单精度 FPU (FPUv4-SP) —— STM32F4 系列的标准 -mfpu=fpv4-sp-d16 # 使用硬浮点 ABI,性能最佳 # 注意:这要求整个工具链(包括链接库)都支持硬浮点 -mfloat-abi=hard # 其他常用优化和警告选项 -O0 # 调试时建议用 -O0,发布时可改为 -Os 或 -O2 -g -Wall -Wextra ) |
完成cmakelists示例
cmake_minimum_required(VERSION 3.22) # # This file is generated only once, # and is not re-generated if converter is called multiple times. # # User is free to modify the file as much as necessary # # Setup compiler settings set(CMAKE_C_STANDARD 11) set(CMAKE_C_STANDARD_REQUIRED ON) set(CMAKE_C_EXTENSIONS ON) # Define the build type if (NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "Debug") endif () # Set the project name set(CMAKE_PROJECT_NAME RC_car) # Include toolchain file include("cmake/gcc-arm-none-eabi.cmake") # Enable compile command to ease indexing with e.g. clangd set(CMAKE_EXPORT_COMPILE_COMMANDS TRUE) # Core project settings project(${CMAKE_PROJECT_NAME}) message("Build type: " ${CMAKE_BUILD_TYPE}) # Enable CMake support for ASM and C languages enable_language(C ASM) # Create an executable object type add_executable(${CMAKE_PROJECT_NAME} ) # Link directories setup target_link_directories(${CMAKE_PROJECT_NAME} PRIVATE # Add user defined library search paths ) # Add sources to executable target_sources(${CMAKE_PROJECT_NAME} PRIVATE startup_stm32f103v8tx.s #重点!!!! # 其他需要编译的文件 ) # Add include paths target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE # Add user defined include paths ) # Add project symbols (macros) target_compile_definitions(${CMAKE_PROJECT_NAME} PRIVATE # Add user defined symbols STM32F10X_HD USE_STDPERIPH_DRIVER) # Add linked libraries target_link_libraries(${CMAKE_PROJECT_NAME} # Add user defined libraries ) target_compile_options(${PROJECT_NAME} PRIVATE # 其他常用优化和警告选项 -O0 #关闭优化,便于调试 -g #生成调试信息 -Wall -Wextra #启用常用警告 -mcpu=cortex-m3 -mthumb #指定目标处理器和Thumb指令集 -mthumb-interwork #支持Thumb与ARM指令混合使用 -ffunction-sections -fdata-sections #将函数和数据放入独立段,便于链接器优化 -fno-common #避免未初始化全局变量的公共符号冲突 -fmessage-length=0 #取消编译器消息长度限制 ) |
7.避坑
7.1 F103报错:may not be the same -- `strexb r3,r2,[r3]……
修改core_cm3.c中736,753,770行
__ASM volatile ("strexh %0, %2, [%1]" : "=&r" (result) : "r" (addr), "r" (value) );
将"=r"修改为"=&r"
8.总结
与 Keil 的“一体化但封闭”不同,CLion + 开源工具链的方案虽然初期配置略显繁琐,但带来了更好的编辑体验、跨平台能力(Windows/Linux 通用)、CMake 原生支持以及自由定制的编译/调试选项。成功搭建环境的关键在于三点:
- 工具链路径正确配置(OpenOCD、arm-none-eabi-gcc、MinGW)
- STM32CubeMX 生成工程时选择 STM32CubeIDE 类型
- 以及CLion 中 CMakeLists.txt 的精确调整(包括 FPU 宏、CPU 架构标志、启动文件等)。
文中提供的编译选项示例、F103 系列 core_cm3.c 的内联汇编修复技巧,均来自真实踩坑经验。完成配置后,开发者即可享受 CLion 带来的代码跳转、实时分析、图形化调试等现代 IDE 特性,大幅提升 STM32 开发效率。建议初次配置者严格按步骤操作,并善用文中 .cfg 面板示例确保调试器正常连接。若遇到新问题,可结合官方文档与社区资源进一步排查。