CLion嵌入式开发上手

CLion从2019.1开始正式加入了对嵌入式开发的支持,虽然仅仅是整合了之前已经有的OpenOCD和STM32CubeMX的插件,但也有很强的可玩性了。其实大概一年前这个特性刚出来的时候我就试过,因为某些原因不了了之,具体内容可以在我原来博客的存档里面找到。好久没有做嵌入式了,这次因为选修嵌入式课程开始重操旧业。

现在是2020年3月,我正在Windows 10上面使用CLion 2019.3.4,Toolbox检查已是最新版本。还是要说明,这篇文章不是什么教程,仅仅只是我个人尝试的经历,分享出来希望能和大家一起交流,如果有哪里不好烦请不吝赐教。底部有评论区,恳请大家留点经验意见。

表情包来自互联网,侵删。

准备工作

在开始之前,你需要准备一些东西:

一块开发板(废话)。等了几天快递,今天终于刚到手一块NUCLEO-F446RE。用什么板子应该是无所谓的,最多是后面选Board config file的时候没有,要自己写(其实大部分都没几句话,应该问题不大)。

表情包来自互联网,侵删。

有了开发板还要调试器,通常还要给调试器安装驱动程序,由于NUCLEO板载ST-LINK/V2,所以去到STSW-LINK009 – ST-LINK, ST-LINK/V2, ST-LINK/V2-1 USB driver signed for Windows7, Windows8, Windows10 – STMicroelectronics安装驱动程序。

事先安装好CLion(废话)。我推荐先安装JetBrains Toolbox,然后再通过Toolbox安装CLion,使用Toolbox来管理这些IDE会比较方便。当然,要是你真的从头到尾都只使用他家的CLion的话,直接安装CLion也没啥问题。

Toolbox长这样的,方便管理各个工具和最近的项目

Mingw-w64。我是使用MSYS2安装的,不用应该也可以(比如那些预构建包,在MinGW-w64 – for 32 and 64 bit Windows download | SourceForge.net)。

平时偶尔写写C/C++,所以事先基本包已经怼上了

这个环境是用来构建C/C++程序的,这里主要好像只是用到了make(就是那个mingw32-make.exe)。根据文档,你想使用MinGW应该也没有问题。另外,我之前用子系统Ubuntu(官方文档没说可以)的工具链好像构建总是会失败,忘记报错信息了,你可以试试然后来分享一下。

OpenOCD。不是很了解,不敢瞎BB。看到这篇好像不错?跟我一起学OpenOCD(一) – 知乎,有空再看看文档。根据官方文档,如果有MSYS2,那么安装比较简单:

pacman -S mingw-w64-x86_64-openocd

没有好像也没关系,Getting OpenOCD « Open On-Chip Debugger下面有非官方的预构建包可以下载,解压后即可使用。随后都需要在设置中指定其位置(找不到可以两下Shift来Search Everywhere,然后搜你想要的)。

Settings->Build, Execution, Deployment->Embedded Development
测试一下

STM32CubeMX。用来生成代码框架等,官网下载安装即可,如果是默认的安装路径的话CLion中应该能自动检测到。

STM32CubeMX

gcc-arm-none-eabi。最重要的工具,交叉编译用。虽然GitHub – msys2/MINGW-packages: Package scripts for MinGW-w64 targets to build under MSYS2.里面有PKGBUILD:

但是根据How to install mingw-w64-arm-none-eabi-gcc · Issue #4068 · msys2/MINGW-packages · GitHub,需要自行构建,pacman暂时没法直接装上。不过可以直接到ARM的官网上下载预编译好的工具链,链接找不到可以点上面的。CLion此时的文档仍然是写的支持2019-q3或者2018-q2及之前的版本。看了一下,2019-q3是GCC 8,2019-q4是GCC 9,估计是没测试完就没写支持吧,自己斟酌。而且印象中这个时候的CLion对于版本高于8的gdb仍然会给出不支持的警告(虽然还是能用)。

我下载的.zip包,解压到了MSYS2环境里(自己建了个3rd文件夹),放哪里应该都是无所谓的。然后要到设置中手动指定arm-none-eabi-gcc.exearm-none-eabi-g++.exearm-none-eabi-gdb.exe。(这个方法是我突然想到的,感觉应该有更好的?)

Settings->Build, Execution, Deployment->Toolchains

你会注意到,如果这个配置文件在队列里不是第一个的话,并不会显示default,也就是说平时并没有用这个配置。如果你平时在使用多个Toolchain于不同用途,你并不需要一直在这里切换,而是可以在这里为每个Project单独设置:

Settings->Build, Execution, Deployment->CMake

你会注意到上面有个地方可以设置环境变量,因为我没有在PATH中设置编译器位置时,后续建好Project的时候CMake还是会找不到,像这样:

Reload CMake Project

你可以写一个.cmake文件来设置,不过我在这里直接给这个Project设置环境变量(这样不会影响系统的):

Settings->Build, Execution, Deployment->CMake->Environment

此时应该就没有问题了:

开工吧!

准备了这么多东西,现在该来尝试一下了。你需要先打开CLion,然后新建一个Project,就像这样:

New Project

项目名字自己起一个,尽量别untitled一路下来(我真的见过一堆项目untitled一直到untitled200的)。

点击打开STM32CubeMX来配置

默认上来的型号通常不是你想要的,点击Open with STM32CubeMX来启动STM32CubeMX。你可以在这里点击型号来改变:

点按STM32F030F4Px
搜索你的开发板或是MCU等

这是文档里这么干的,感觉有点奇怪。这并不能直接改型号,而是新建了一个Project,我感觉还不如直接新建好,然后再用CLion打开呢…因为这是新建的,所以你需要到这里来设置好名称和工具链。你需要保证生成的代码的位置和刚刚你在CLion中新建的Project一样,不然就白折腾了半天。就像下面这样:

Project Manager

此时点按GENERATE CODE来生成代码,会提示是否覆盖CLion自动生成的那份.ioc文件。覆盖吧,反正没啥用。总之我感觉这么干有点多此一举。

生成正常的话,现在就可以回到CLion中了。此时右下角应该会有气泡窗口显示已经自动检测到了:

这次弹窗要我选择Board config file,由于这里有现成的,就直接用了:(没有的话,应该在OpenOCD目录下的scripts里面可以依葫芦画瓢一下)

Board Config File

由于我之前设置环境变量是单独为Project设置的,所以每次新建都需要设置,不然就会:

Reload CMake Project

同样地,像上面那样设置好环境变量就OK了。回来再点击一下上一个图里左上角这个Reload CMake Project图标,应该就没有问题了。

注意到右上角,要执行任务的配置还是没设置好,此时还不能Run:

右上角,Edit Configurations

很简单,点按Edit Configurations…来修复错误。注意到窗口下方的错误信息是:

Edit Configurations下方有错误信息

那么只要指定Target就好了:

指定Target

此时Run和Debug的图标应该就不是灰色的了。插上开发板,点按Run(此时的配置应该是那份OCD的而不是CMake的),顺利的话应该很快就会:

此时应该已经烧录成功了,你也可以尝试着写点小程序来测试一下。

只能Run还不够,Debug也很重要。打上断点,点按Debug图标来启动,应该没有问题的:

下方的Debug窗口应该会显示变量、堆栈等信息。不知道你会不会在Debug窗口的第一栏看到这个很好使的小工具:

划重点,点按后即可在当前现场执行你想要的语句,有点像脚本语言一样?总之很好使就对了。

如果你想查看引脚信息,需要导入.svd文件,根据SVD files on ARM website – Keil forum – Software Tools – Arm Community,你可以在MDK5 Software Packs里先下载pack,然后从里面拿到。

如果你之前就在使用Keil做嵌入式开发,那么你应该已经有了这个pack,直接去找就好了。导入后就可以正常查看了。

应该暂时就这么多吧。想到啥再补充。

引用:(文中已做超链接的就不再列出了)
CLion 2019.1 EAP: CLion for Embedded Development, Part III | CLion Blog
STM32CubeMX Projects – Help | CLion
CLion for embedded development | CLion Blog
CLion for Embedded Development Part II | CLion Blog
MSYS2 installation · msys2/msys2 Wiki · GitHub
How to cross compile with cmake + arm-none-eabi on windows? – Stack Overflow
[柴工带你学习LiteOS系列]之—Windows下的GCC环境搭建_云博客_云社区-华为云
使用CLion做嵌入式开发 | 王晓磊贴代码用的Blog

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据