在传统的 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/6286285031.安装OpenOCDOpenOCD 是一个开源的片上调试器负责与调试探头如 ST‑Link、J‑Link、CMSIS‑DAP通信向目标 MCU 发出调试和编程指令。它实现了 GDB 远程调试协议使得 GDB 或 IDE如 CLion能够通过它实现断点设置、单步执行、寄存器/内存查看以及固件下载。在 CLion 环境中通过“OpenOCD 运行/调试配置”调用实现一键下载和调试。1.1 Ubuntusudo apt install openocd对应版本Ubuntu-20.04 0.10.0Ubuntu-22.04 0.11.01.2 Windows1.2.1 下载首先您需要从 OpenOCD 官方网站下载 Windows 版本的 OpenOCD。访问 https://gnutoolchains.com/arm-eabi/openocd/ 并选择合适的版本。通常您可以选择预编译的 Windows 执行文件。1.2.2 安装并配置环境变量在Path中配置OpenOCD可执行文件的路径2.安装STM32CubeMXSTM32CubeMX 是 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.html3.安装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。使用该工具链可以在 PCx86/x64上编译出能在 STM32 上运行的二进制代码。在 CLion 中通过 CMake 的 toolchain 文件或直接在 target_compile_options 中指定该工具链路径即可无缝使用。4.1 Ubuntusudo apt install arm-none-eabi-gcc4.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弹出这个窗口点击Close5.4 Clion配置编译、下载、调试回到Clion界面先点击跳过点击加载CMake项目出现这些就是成功了编辑配置添加OpenOCD配置配置如下面板配置文件参考这个配置CLion用于STM32开发【优雅の嵌入式开发】 - 知乎新建好.cfg文件后选择即可点击编译6.编译选项和宏配置# Add project symbols (macros)target_compile_definitions(${CMAKE_PROJECT_NAME} PRIVATE# 告诉 CMSIS 头文件此设备有 FPU __FPU_PRESENT1# 告诉 CMSIS项目将使用 FPU通常由编译器选项隐式设置但显式定义更安全__FPU_USED1# 如果你使用 Keil/IAR 的兼容宏可以加上但 GCC 下非必需# __CC_ARM# __TARGET_FPU_VFP # HAL 库相关定义根据你的实际配置调整USE_HAL_DRIVERARM_MATH_CM4STM32F429xx # 确保这个是正确的F429IGT6 属于 F429/439 系列)target_compile_options(${PROJECT_NAME} PRIVATE# 指定目标 CPU 架构 (Cortex-M4) -mcpucortex-m4# 生成 Thumb-2 指令集代码必须-mthumb# 启用单精度 FPU (FPUv4-SP) —— STM32F4 系列的标准-mfpufpv4-sp-d16# 使用硬浮点 ABI性能最佳# 注意这要求整个工具链包括链接库都支持硬浮点-mfloat-abihard# 其他常用优化和警告选项-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 settingsset(CMAKE_C_STANDARD 11)set(CMAKE_C_STANDARD_REQUIRED ON)set(CMAKE_C_EXTENSIONS ON)# Define the build typeif (NOT CMAKE_BUILD_TYPE)set(CMAKE_BUILD_TYPE Debug)endif ()# Set the project nameset(CMAKE_PROJECT_NAME RC_car)# Include toolchain fileinclude(cmake/gcc-arm-none-eabi.cmake)# Enable compile command to ease indexing with e.g. clangdset(CMAKE_EXPORT_COMPILE_COMMANDS TRUE)# Core project settingsproject(${CMAKE_PROJECT_NAME})message(Build type: ${CMAKE_BUILD_TYPE})# Enable CMake support for ASM and C languagesenable_language(C ASM)# Create an executable object typeadd_executable(${CMAKE_PROJECT_NAME})# Link directories setuptarget_link_directories(${CMAKE_PROJECT_NAME} PRIVATE# Add user defined library search paths)# Add sources to executabletarget_sources(${CMAKE_PROJECT_NAME} PRIVATEstartup_stm32f103v8tx.s #重点# 其他需要编译的文件)# Add include pathstarget_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 symbolsSTM32F10X_HDUSE_STDPERIPH_DRIVER)# Add linked librariestarget_link_libraries(${CMAKE_PROJECT_NAME}# Add user defined libraries)target_compile_options(${PROJECT_NAME} PRIVATE# 其他常用优化和警告选项-O0 #关闭优化便于调试-g #生成调试信息-Wall -Wextra #启用常用警告-mcpucortex-m3 -mthumb #指定目标处理器和Thumb指令集-mthumb-interwork #支持Thumb与ARM指令混合使用-ffunction-sections -fdata-sections #将函数和数据放入独立段便于链接器优化-fno-common #避免未初始化全局变量的公共符号冲突-fmessage-length0 #取消编译器消息长度限制)7.避坑7.1 F103报错may not be the same -- strexb r3,r2,[r3]……修改core_cm3.c中736753770行__ASM volatile (strexh %0, %2, [%1] : r (result) : r (addr), r (value) );将r修改为r8.总结与 Keil 的“一体化但封闭”不同CLion 开源工具链的方案虽然初期配置略显繁琐但带来了更好的编辑体验、跨平台能力Windows/Linux 通用、CMake 原生支持以及自由定制的编译/调试选项。成功搭建环境的关键在于三点工具链路径正确配置OpenOCD、arm-none-eabi-gcc、MinGWSTM32CubeMX 生成工程时选择 STM32CubeIDE 类型以及CLion 中 CMakeLists.txt 的精确调整包括 FPU 宏、CPU 架构标志、启动文件等。文中提供的编译选项示例、F103 系列 core_cm3.c 的内联汇编修复技巧均来自真实踩坑经验。完成配置后开发者即可享受 CLion 带来的代码跳转、实时分析、图形化调试等现代 IDE 特性大幅提升 STM32 开发效率。建议初次配置者严格按步骤操作并善用文中 .cfg 面板示例确保调试器正常连接。若遇到新问题可结合官方文档与社区资源进一步排查。