单片机
返回首页

在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 程序主要包括下面几个步骤:

  1. STM32CubeMX 初始化代码。STM32CubeMX 是意法半导体推出的代码初始化工具,可以在图形化界面中完成对芯片外设的基本配置并一键生成代码,不需要用户手动导入需要的外设文件、手动编写外设配置代码,大大节约了开发者的时间。此外,初始化代码步骤中 CLion 还将自动构建用于编译的 cmake 相关文件,而不需要用户自行编写。

  2. 代码编写。

  3. 使用 MinGW 和 arm-gcc 编译器编译程序。

  4. 使用 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 文件也同样可从官网获得。导入完成后,寄存器显示效果如下

至此,我们已经完成了整个软件配置过程


进入单片机查看更多内容>>
相关视频
  • 【TI MSPM0 应用实战】智能小车+工业角度编码器+血氧仪+烟雾探测器!硬核参考设计详解!

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

  • 直播回放: Microchip Timberwolf™ 音频处理器在线研讨会

  • 基于灵动MM32W0系列MCU的指夹血氧仪控制及OTA升级应用方案分享

精选电路图
  • 锂离子/锂聚合物USB电池充电器

  • 6晶体管H桥

  • AVR LCD温度计—LM35

  • AVR PC步进电机驱动器

  • AVR温度计TCN75

  • JDM2 PIC 18F 编程器

    相关电子头条文章