CLion+STM32CubeMX
Why CLion?
使用STM32CubeMX + CLion进行日常开发,相比于使用CubeIDE,你可以得到:
- 更加美观可高度自定义的图形化界面;
- 更加完善的社区和插件支持,包括git;
- 软件使用过程中几乎不会出现任何恶性BUG;
- 对FreeRTOS更加高级的调试支持;
- 更强大的AI自动补全代码功能,以及可自定义的代码格式化;
- 使用CMake构建工程,可以与VSCode互通工程;
但与此同时...你将会:
- 调试过程中无法使用Live Expressions(现场表达式),这意味着你无法在IDE内部的调试界面动态观测变量值;
- 占用更多的CPU和内存。
工具链与软件安装
STM32CubeMX、STM32CubeCLT以及OpenOCD
CLion
- 点击此处在微软商店内安装JetBrains Toolbox,它可以为我们更好地管理CLion软件的安装与更新;

- 在开始菜单中找到JetBrains Toolbox并打开它,随后它就会出现在你的任务栏右下角,单击其图标打开界面;

- 同意使用协议后,首先请点击右上角【设置】,登录你的JetBrains账号;

- 登录完成后,在下方即可找到CLion,点击安装即可;

- 安装完成后即可立刻启动CLion!如果是第一次打开CLion,在完成语言和区域设置后,应该会直接登好账号,选择【开始非商业使用】;

注意注意!
如果你没有在JetBrains Toolbox内登录或注册账号,此处会要求你登录或注册一个!
工程生成的配置
欢迎来到CLion!首先让我们点击新建工程吧;

在左侧的列表中找到STM32CubeMX,来到此界面,点击【启动STM32CubeMX】;

注意注意!
如果你的STM32CubeMX和STM32CubeCLT没有安装在默认位置,那么你可能需要点击【编辑...】,并手动定位STM32CubeMX和STM32CubeCLT。
在STM32CubeMX中,像往常一样完成项目配置,最后在Project Manager中,检查以下项目,完成后即可点击右上角【GENERATE CODE】生成代码;

将刚才复制的路径粘贴到CLion新建工程窗口的【位置】一栏中,点击【继续】完成工程创建;

将会自动弹出【打开项目向导】窗口,首先推荐勾选CMake自动重载以避免每次手动重载,将预设修改为
Debug - Debug预设;
看这里!
图中选择的配置有误,请选择
Debug - Debug预设,同时将你新建的【工具链】置顶设为默认!(因为Debug - Debug预设不允许用户自己选择工具链)如何新建【工具链】?
- 点击【管理工具链】后,来到工具链管理页面,首先新建一个配置,选择【系统】;

- 按照下图,选择你刚刚安装的STM32CubeCLT中的文件完成工具链的配置,然后将你刚刚新建的工具链置顶/设为默认,完成后点击【应用】;

- 随后转到构建、执行、部署→嵌入式开发选项卡下配置嵌入式工具链,如图,选择OpenOCD、STM32CubeMX与STM32CubeCLT的安装路径,并确保右侧的【测试】全部通过;

- 点击【管理工具链】后,来到工具链管理页面,首先新建一个配置,选择【系统】;
- 可选步骤转到编辑器→检查选项卡下,导入配置CodeCheck.xml(可在本Github仓库中找到,或直接点击下载);

- 可选步骤转到编辑器→代码样式→C\C++ 选项卡下,导入配置CodeFormat.xml(同样可在Github仓库中找到,或直接点击下载);

CLion内置GDB服务,并支持直接使用JLink或STLink进行烧录,不过我们需要来到【设置】中,根据下图所示的位置,手动将其开启;

注意注意!
在最新版CLion中,此选项文本已改为“为所有项目启用调试服务器”,同样需要勾选上。
看这里!
同时,推荐在如下位置,开启【启用RTOS集成】,并在配置FreeROTS时开启相关设置,即可解锁更高级的FreeRTOS专用调试,可以更方便地查看每个线程的运行状态等信息;



在上方菜单栏处,展开调试服务器选择,并【编辑调试服务器】;

点击添加配置,可以看到CLion已经为我们准备好JLink或STLink下载器的相关配置文件,我们直接点选STLink后,右侧的一切保持默认,【确定】即可;

注意注意!
如果要使用JLink,则需要在右侧手动指定GDB服务器和设备型号。
- 完成后,调试服务器应该会自动切换为你刚刚添加的STLink,这之后你就可以使用右侧的老三样按钮,狠狠滴开始嵌入式开发了;

如果要使用DAP-Link
- ...比较可惜的是,CLion官方似乎还并没有内置DAP-Link下载器的配置,因此我们需要手动配置DAP-Link。首先来到本Github仓库中,将daplink.cfg配置文件复制进工程根目录;

看这里!
实际上放哪都行,放根目录只是为了方便管理。
- 点开上方的【运行/调试配置】,点击【编辑配置】,在【添加新配置】的菜单中,选择【OpenOCD下载并运行】;

- 进行如图所示的配置,修改途中两个红框所示的选项至图中所示,其中【面板配置文件】需要选择你刚刚复制进来的
.cfg文件,或直接粘贴绝对路径,最后【确定】;
- 在使用DAP-Link时,需要将【调试服务器】改回【原生】,之后你就可以正常使用右侧的老三样按钮了!同样的,如果需要使用STLink,则再将【调试服务器】改回【STLink】的同时,也别忘了将【运行/调试配置】改回默认!

注意注意!
无论是选择VSCode还是CLion,其内置的调试工具都无法实现STM32CubeIDE中强大的Live Expressions(现场表达式)功能,需要借助其他软件(例如RTT Viewer、Ozone、Serial Port等)。不过另一种比较折中的方式是,你可以在第三方IDE中进行代码的编写,而仅在STM32CubeIDE中进行调试,相关配置方法请见这一节。
如果要使用J-Link
下载J-Link驱动程序包:官网下载
运行配置请保持默认的CMake应用程序,调试服务器需要以下额外配置:“可执行文件”选择J-Link驱动程序包中的JLinkGDBServerCL.exe,务必取消勾选“持久会话”!


CMakeLists.txt配置
CMake 是一个跨平台构建系统生成工具。它并不是编译器本身,而是用来生成平台相关的构建脚本(如 Makefile、Ninja、MSBuild 等)的工具。借助CMake,我们可以很好地管理构建、模块化管理、引用头文件等。
- 想必你也一定发现了,CLion的工程构建(编译)高度依赖于
CMake,而CMake的配置文件由STM32CubeMX生成,并存放在项目根目录,其名为CMakeLists.txt;
- 双击打开
CMakeLists.txt,可见STM32CubeMX为我们生成的CMakeLists.txt文件非常整洁,注释完善。如果可以的话推荐自己阅读一遍注释,这样你基本就能够搞清楚其中每个段落的具体用法了;
- 头文件与源文件加入构建的方法如下图所示,路径全部使用相对路径即可;

看这里!
- 对于源文件路径,有办法做到批量一键复制!首先将你想要添加的源文件都选中,然后右键打开菜单,并点击【复制路径/引用】;

- 在弹出窗口中选择【来自内容根的路径】,即可批量复制相对路径,随后直接在CMakeLists.txt中直接粘贴即可!

导入STM32CubeIDE工程
- 在工程文件夹中双击
.ioc文件,用STM32CubeMX打开;
- 将工具链修改为
CMake后,直接点击生成,之后就可以用CLion打开了(用CLion打开文件夹)!
仅使用STM32CubeIDE进行调试的配置
首先,我们需要我们要创建一个空壳工程作为STM32CubeIDE调试入口。按照STM32CubeIDE教程中记录的方法,轻车熟路地新建一个工程,进入.ioc文件后,不要进行任何修改;

删除这两个文件夹以避免干扰;

进入工程【首选项】,找到
C/C++ Build → Builder Settings,取消勾选Use default build command;
将下方的【Build command】修改为如下内容,完成后保存关闭:
bashecho "No build required - using CLion"在 STM32CubeIDE 顶部菜单栏,点击Run > Debug Configurations...,在左侧展开
STM32 C/C++ Application,右键点击 →New Configuration;
在【Main】标签页下,【Project】选择
DebugWrapper,C/C++ Applications需要粘贴你在CLion中编译出来的.elf文件的绝对路径;
注意注意!
每次用 CLion 构建后,.elf路径要保持一致。
- 来到【调试器】标签页下,配置方法同STM32CubeIDE部分教程(取决于你使用的下载器),随后点击【应用】并【调试】,让STM32CubeIDE自动生成烧录脚本;

- 跟之前一样,报错一次后,修改
.cfg文件;
- 配置完成!要进行代码调试时,先在CLion中【编译】,产生最新的
.elf文件后,再来到STM32CubeIDE中,直接点击小锤子进行调试就好啦~