在CLion中开发STM32
2025-10-15 来源:bilibili
在 CLion 中开发 STM32 程序的教程在网上随处可见,然而所用操作系统以 MacOS 和 Linux 为主, Windows系统教程较少。且所用 CLion 版本各有不同,界面和配置流程也相差较大。在我于scuteee.com发表本文后,知名博主稚晖君也于多平台发表了 CLion 的开发环境配置,读者可以比较阅读。
在CLion中开发STM32
CLion 是一款现代化 C/C++ 集成开发环境,由 Jetbrain 公司开发,拥有优雅的界面、跨平台的特性和广受好评的智能插件。
STM32 的开发工具有 Keil MDK,STM32CubeIDE,VS Code的 Platform IO 等等。Keil 是功能强大的老牌开发软件,但是上古界面实在令人喜欢不起来。STM32CubeIDE 是 ST 力推的集成开发环境,集成了广受好评的代码初始化工具 STM32CubeMX ,界面也更加现代化,然而其代码补全功能居然还要按下 Alt+/ 才能使用(也可能是我没有找到相关的设置),智能程度也远远比不上 Jetbrain 公司开发的 CLion。
正好最近在尝试使用 CLion 替代 Visual Studio 开发 C/C++ 程序, CLion 新版本又添加了对 STM32CubeMX 的支持,于是果断选择 CLion 作为开发环境。然而,必须指出的是,目前业界,包括 ST 中国在内仍普遍使用 Keil 作为开发工具,学习时不能仅局限在一种开发环境。
背景知识
本文阅读者应具备下列知识背景
STM32CubeMX 软件的基本使用,如果没有使用经验,请仔细阅读本部分内容,并自行学习相关内容
STM32 基本使用方式与简单程序调试
如何 cmd 中执行简单命令
实践本文需要
安装 Windows 10 系统的计算机
带有 SWD 调试接口的 STM32 开发板(一般这个接口以一个独立的 4pin 排针引出)
ST-Link 或者其他适用于 STM32 的调试器
使用 CLion 开发 STM32 程序主要包括下面几个步骤:
STM32CubeMX 初始化代码。STM32CubeMX 是意法半导体推出的代码初始化工具,可以在图形化界面中完成对芯片外设的基本配置并一键生成代码,不需要用户手动导入需要的外设文件、手动编写外设配置代码,大大节约了开发者的时间。此外,初始化代码步骤中 CLion 还将自动构建用于编译的 cmake 相关文件,而不需要用户自行编写。
代码编写。
使用 MinGW 和 arm-gcc 编译器编译程序。
使用 OpenOCD 调试器进行代码下载与调试。OpenOCD 是一款开源调试器,旨在提供针对嵌入式设备的调试,在本文中,我们将使用 ST-Link v2 结合 OpenOCD 进行调试,OpenOCD 也同样支持 JLink 等调试器。
准备
安装下列软件
提示:在ST官网(www.st.com)下载速度可能较慢,ST中国(www.stmcu.com.cn)可提供替代
CLion 2019.3.15 或者更新的版本,过老的版本没有在软件中提供 STM32CubeMX 支持
minGW 编译器,注意安装过程中要选择添加到环境变量,否则要手动添加
arm-gcc-8-2019-Q4 编译器,注意安装过程中要选择添加到环境变量,否则要手动添加
STM32CubeMX,可在 ST 官网下载
ST-Link驱动 根据自己的 ST-Link 版本在官网下载
验证安装
在 cmd 中分别执行 和 命令,若出现下面的输出,则说明编译工具安装已经成功。否则请检查环境变量

下载调试器
下载 openocd 调试器,此软件无需安装,将解压缩后的文件夹放到你想存放的目录即可。记下存放的目录,稍后我们会导入软件路径。
软件配置
设置OpenOCD路径
打开 CLion ,进入 File - setting - Build, Excution, Deployment - Embedded Development(如红圈所示),CubeMX 的安装目录会自动识别,而 OpenOCD 的目录则需要手动填写,将你存放 OpenOCD 的目录输入到里面。完成以后点击 Test 验证是否成功配置

在CubeMX中初始化代码
菜单栏中选择 File - New Project 创建新项目,选择 STM32CubeMX,如果你没有这个选项,请检查 CLion 版本是否过低。工程文件目录对应你希望创建的项目的位置,在这里,名为 F103ZET6 的文件夹是我用于存放这个单片机的项目的文件夹,在里面我新建一个工程,名为 temperature_mqtt_F103ZET 。为了规范归档,最好科学地为项目文件夹命名。如下图蓝色箭头所示。

按下 Create 键以后 CLion 会默认创建一个 STM32F030 的 STM32CubeMX 配置文件,我们首先需要修改芯片的型号,点击屏幕中央的 Open with STM32CubeMX 链接,CLion 会自动打开 STM32CubeMX 程序,CubeMX 程序界面如下图所示。

若需要修改芯片型号,点击上图左上角的 “STM32F030” 字样,将打开选型工具。选型工具界面如下所示,此处已经选择了本教程测试使用的 STM32F103ZE 芯片

选型完成后即可进行引脚配置、时钟配置等步骤,此部分请参阅 STM32CubeMX 的使用教程,本文不再赘述。随后进入到 Project Manager 页面,按如下选项配置。此时 Project Name 一栏应为空,填入本项目的文件夹名。Project Location 无需修改。Toolchain/IDE 选择 STM32CubeIDE 或者 SW4STM32 均可用于 CLion,如果想用 Keil/IAR等其他 IDE,可在此选择对应的选项。

完成这个步骤后,CubeMX 的任务已经完成。点击 CubeMX 界面右上角的 Generate Code 按钮生成代码, CLion 检测到代码已成功生成后,界面将显示配置已完成(如下图所示),提示代码初始化已成功完成。如果你的界面没有发生变化,那很可能是上一步中 CubeMX 中项目路径写错了,删除生成的文件重试一遍吧。

如果正确配置了 OpenOCD 路径,代码初始化完成后还会出现下面配置文件选择界面,此处我们先不选择,留待下面再做选择

在初始化代码完成后,若发现之前外设功能配置得不对,也可以重新打开 项目名.ioc 文件重新配置。为了避免重新配置时用户代码被程序覆盖,应按照程序生成的代码中的注释指引在指定的位置编写代码。

代码编写完成后,点击界面右上角的锤子即可编译代码生成 .elf 文件。如果不需要调试,可使用 STM32Cube Programmer 或者其他烧录工具完成将程序下载到单片机中
修改/创建调试配置文件
调试单片机程序需要调试器,在 Keil 或者 IAR 等 IDE 中可以通过图形界面选择需要的调试器,但 CLion 本身并没有调试 STM32 的能力,而是要通过 OpenOCD。OpenOCD 则通过调试配置文件确定使用的调试器和目标芯片类型。打开 OpenOCD 的软件目录 openocd-0.10.0shareopenocdscripts (不同版本可能有所差异),可以看到下面三个文件夹:board, interface, target
board 文件夹存储了各家厂商官方开发板的配置文件,如果你使用的是 ST 官方出品的开发板,就可以直接使用其中的调试文件,例如 NUCLEO-F103RB(如下图) ,那么 board 文件夹中的 st_nucleo_f103rb.cfg 就是你应该选择的,其他官方开发板同理。

interface 文件夹存储了各种调试器的配置文件,包括 cmsis-dap、stlink-v2 等。target 文件夹则存储了各种芯片的配置文件,例如 stm32f1x.cfg 就对应着 STM32F1 系列。正点原子、野火等国内企业出品的开发板不属于官方开发板,自然在 board 文件夹中不会有他们的配置文件,因此我们需要根据自己使用的调试器和芯片,写自己的配置文件。下面是我自己使用的 F1 系列芯片的配置文件,使用淘宝卖十几块钱的盗版 ST-Link v2 调试器。将内容复制到文本文档,并重命名为 .cfg 文件即可使用
# st_my_F1_stlink-v2.cfg# 文件名可以随便取,放到 board 文件夹中方便在 CLion 中选择# 使用 stlink-v2 调试器source [find interface/stlink-v2.cfg]# 使用 hla_swd 调试接口transport select hla_swd# 目标芯片设定为 STM32F1 系列source [find target/stm32f1x.cfg]# 不使用复位接口reset_config none
DAPLink 是 Arm 出品的开源软件项目,可对在Arm Cortex CPU上运行的应用程序软件进行编程和调试,没有盗版、掉固件等问题,还拥有虚拟串口、拖拽更新等功能,因此 DAPLink 同样是我经常使用的调试器,下面是使用 DAPLink 时的配置文件。
# st_my_F1_cmsis-dap.cfg# CMSIS-DAP 和 DAPLink 其实不是同一个东西,但都使用同一个调试器配置source [find interface/cmsis-dap.cfg]# 使用 swd 调试接口transport select swd# 目标芯片设定为 STM32F1 系列source [find target/stm32f1x.cfg]# 不使用复位接口reset_config none
如果使用其他调试器和芯片 interface 和 target 文件夹中找到对应的配置,按上述格式编写即可。如果有需要使用调试器的复位引脚,可以参考 OpenOCD 文档设置 reset_config 选项。
如果在一开始没有选择好调试配置文件,可以先点击红色箭头所指的位置,选择 Edit Configurations.. ,再在蓝色箭头所指的位置选择配置文件即可。

调试设置
调试功能,还需要进入到设置,在 ToolChains 中将 debugger 设置为 ARM-GCC 的 GDB 服务器,如右边的红色箭头所示,否则调试无法运行。如果你平时还会使用 CLion 开发一般的 C/C++ 项目,可以创建两个工具链配置,一个作为普通 C/C++ 开发工具使用,另一个配置 arm-none-eabi-gcc 用于 STM32 的开发。

完成所有的配置以后,点击右上角的虫子按钮即可开始调试。与 STM32CubeIDE 开始调试后自动在 main 函数停止不同,CLion 中调试要手动添加断点才会停下来。下图展示了 Debug 状态下的程序界面,可以进行单步调试。Variables 栏中可以查看当前变量,操作均与 C/C++ 程序调试类似。

寄存器调试
有时候我们还希望能够直接查看 STM32 单片机各寄存器的值,方便在寄存器层面进行调试。OpenOCD 同样提供了这个功能,调试界面中 Peripherals 栏即为寄存器描述的区域(下图红色箭头所指)。但是此时点开,只会看到一条 "svd file is not loaded" 的提示。这是因为 OpenOCD 并不清楚单片机内部的寄存器配。需要到 ST 官网下载到对应芯片的系统视图描述(SVD)文件,导入后才能正常显示。对于 STM32F1系列的单片机,可在此处获取。其他系列单片机文件 SVD 文件也同样可从官网获得。导入完成后,寄存器显示效果如下

至此,我们已经完成了整个软件配置过程
- 六大全新产品系列推出,MCX A微控制器家族迎来创新
- 意法半导体全新STM32C5系列,重新定义入门级微控制器性能与价值,赋能万千智能设备
- 从控制到系统:TI利用边缘AI重塑嵌入式MCU的边界
- 模组复用与整机重测在SRRC、CCC、CTA/NAL认证中的实践操作指南
- 有源晶振与无源晶振的六大区别详解
- 英飞凌持续巩固全球微控制器市场领导地位
- 使用 Keil Studio for Visual Studio Code开发 STM32 设备
- LoRa、LoRaWAN、NB-IoT与4G DTU技术对比及工业无线方案选型分析
- 蓝牙信道探测技术原理与开发套件实践
- 意法半导体中国本地造STM32微控制器启动规模量产




