CLion+STM32CubeMX
Why CLion?
使用STM32CubeMX + CLion进行日常开发,相比于使用CubeIDE,你可以得到:
- 更加美观可高度自定义的图形化界面;
- 更加完善的社区和插件支持,包括git;
- 软件使用过程中几乎不会出现任何恶性BUG;
- 对FreeRTOS更加高级的调试支持;
- 更强大的AI自动补全代码功能,以及可自定义的代码格式化;
但与此同时...你将会:
- 调试过程中无法使用Live Expressions(现场表达式)和Live Watch,这意味着你无法在IDE内部的调试界面动态观测变量值;
- 占用更多的CPU和内存。
工具链与软件安装
STM32CubeMX、STM32CubeCLT以及OpneOCD
CLion
- 点击此处进入CLion官网,下载并安装CLion,在安装过程中,在此界面请将【更新PATH变量】、【更新上下文菜单】复选框都勾选,其余可参考自身需求;
- 如果是第一次打开CLion,在完成语言和区域设置后,应该首先会弹出一个授权窗口,如下图所示。请选择【非商业使用】,并【登录以进行非商业使用】(或者注册);
- 在浏览器中完成账号登录后,就可以开始进行免费的非商业使用啦;
工程生成的配置
- 欢迎来到CLion!首先让我们点击新建工程吧;
- 在左侧的列表中找到STM32CubeMX,来到此界面,点击【启动STM32CubeMX】;
注意注意!
如果你的STM32CubeMX和STM32CubeCLT没有安装在默认位置,那么你可能需要点击【编辑...】,并手动定位STM32CubeMX和STM32CubeCLT。
在STM32CubeMX中,像往常一样完成项目配置,最后在Project Manager中,检查以下项目,完成后即可点击右上角【GENERATE CODE】生成代码;
将刚才复制的路径粘贴到CLion新建工程窗口的【位置】一栏中,点击【继续】完成工程创建;
将会自动弹出【打开项目向导】窗口,首先推荐勾选CMake自动重载以避免每次手动重载,将预设中的【工具链】修改为STM32预设;
看这里!
如果没有的话,就点击【管理工具链】创建一个吧!
如何做?
- 点击【管理工具链】后,来到工具链管理页面,首先新建一个配置,选择【系统】;
- 按照下图,选择你刚刚安装的STM32CubeCLT中的文件完成工具链的配置,完成后点击【应用】;
看这里!
如果你正在使用的CubeMX版本为6.15.0或更高,请将【C编译器】与【C++编译器】栏位留空!
- 随后转到构建、执行、部署→嵌入式开发选项卡下配置嵌入式工具链,如图,选择OpenOCD、STM32CubeMX与STM32CubeCLT的安 装路径,并确保右侧的【测试】全部通过;
注意注意!
正常情况下,【生成器】选项中将会默认选择Ninja(使用默认值),如果不是这样,请手动选择【生成器】为
Ninja
- 点击【管理工具链】后,来到工具链管理页面,首先新建一个配置,选择【系统】;
- 可选步骤转到编辑器→检查选项卡下,导入配置CodeCheck.xml(可在本Github仓库中找到,或直接点击下载);
- 可选步骤转到编辑器→代码样式→C\C++ 选项卡下,导入配置CodeFormat.xml(同样可在Github仓库中找到,或直接点击下载);
CLion内置GDB服务,并支持直接使用JLink或STLink进行烧录,不过我们需要来到【设置】中,根据下图所示的位置,手动将其开启;
看这里!
同时,推荐在如下位置,开启【启用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(现场表达式)功能,需要借助其他软件(例如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中,直接点击小锤子进行调试就好啦~