(注意:笔者在win下进行安装演示,linux或MacOS下安装请参考其他教程调整部分操作)
为什么是CLion?
尽管对于STM32的开发而言,Keil已经是一个很好的工具了,作为一个老牌的嵌入式开发用IDE,该有的功能都有,升级到5.XX版本之后界面看着也挺现代。但是,作为一个属于上一个时代的开发环境,写代码时会感觉到它的自动补全、智能提示等等功能非常弱,特别是在CubeMX工具大大改善了初始化配置的体验以后,这种不足就显得更加突出了。
而Keil的缺点正是CLion的重要优点,CLion由JetBrains公司开发,是一个广受赞誉的IDE,自动补全、智能提示能力一流,活动模板等特性可以大大提升开发效率。
当然,早期CLion是不能用于单片机开发的,不过,用户要求添加相关功能的呼声一直很高,也一直有人通过各种魔改来在CLion下进行单片机开发工作。终于,在2019.1版本中,CLion添加了对于CubeMX的支持(2020.1版本则更加完善),然后,辅以几个其他的工具,可以在CLion下完成STM开发中的全部工作。而且,相关配置可以在任意主流桌面平台上搭建。
So,赶紧折腾起来,换上属于新时代的开发工具!
安装步骤
所需的软件
- CLion -------主角
- STM32CubeMX ST官方力推的自动化配置和代码生成工具
- OpenOCD ------调试工具
- gcc-arm-none-eabi --------交叉编译工具链
- MinGW --------额,你可以认为这是一个大礼包
- Everything -------一个本地文件搜索工具,不是必备的
- 可能还包括你所使用的调试器的驱动,之前安装过就行。
详细的步骤
一、Everything
笔者想从简单的讲起,所以先说这个小家伙。下载链接在这里,这个小工具会自己维护一份文件目录,所以搜索起来超级快,搜索时可以通过名称和文件类型进行筛选,同时还支持对于后缀名的检索,比如你可以通过“hello .c”这样的关键字搜索名称中包含“hello”的.c文件。
二、MinGW
- 首先,从这里下载MinGW(其实是MinGW-w64,兼容MinGW且更强大),然后解压到某个目录(以后不要改动)。
- 然后,添加环境变量,具体到bin目录,比如“D:ToolChainmingw64bin”这样,根据自己安装目录确定。
- 打开命令行,输入
gcc -v
测试一下,没有提示不是可用的指令而是返回了一大堆信息就说明一切正常。(补充:安装过Dev-cpp之类的自带MinGW的软件的话这个安装环节可以省略)
三、OpenOCD
- 首先,在这里下载并解压到某个目录(之后不要改动),笔者选择的版本为20200524。
- 然后,添加环境变量,还是具体到bin目录。
- 最后同样要测试一下,命令行输入
openocd -v
,回车,返回版本信息说明状态正常。
四、gcc-arm-none-eabi
- 下载地址,高版本的该工具链在CLion里适用貌似有些问题,笔者使用的版本为“gcc-arm-none-eabi-7-2017-q4-major”
- 然后,添加环境变量。
- 开命令行用
arm-none-eabi-gcc -v
测试一下,返回版本信息说明正常。
五、STM32CubeMX
- CubeMX是基于Java开发的软件,所以需要先安装Java运行环境(JRE、Java Runtime Environment),下载地址在这里,根据自己系统和CPU选择版本,如intel+win10 64位应选择“jre-8u251-windows-x64.exe”
- 安装JRE以后,命令行下用
java -version
进行测试,返回版本信息则正常。 - 然后,我们来安装STM32CubeMX,从这里下载即可,安装过程没什么特别的。
(补充:JRE必须是64位的,否则CubeMX会不正常)
六、CLion
- 终于到咱们的主角了,首先去这里下载,CLion是收费软件,下载的版本为完全版本但是许可证只有30天有效期,但是没关系,学生的话通过教育邮箱认证一下就可以获取教育许可证从而免(bai)费(piao)使用,至于破解什么的,咳咳,咱不研究这个。
- 下载的时候有这么个环节需要自己选择一下,如图,全勾上即可。
- 然后第一次使用的话会先要求登录,然后是这么个界面,识别出了MinGW并且添加了路径,假如想跟着教程走的话,默认的就可以。
- 然后是CLion的开始界面,选择右下角的“Config”,然后选择“Setting”
- 然后,如图,在"Build, Execution, Deployment --> Embedded Devlopment"下添加OpenOCD和STM32CubeMX的路径,自动识别到的不一定正确,点击Test之后弹出的提示消息背景色为绿色而不是红色则路径已经正确添加。
- 安装OpenOCD插件,然后根据提示重启IDE
- "Setting --> Build, Execution, Deployment --> OpenOCD Support",添加OpenOCD安装路径
- "Setting --> Build, Execution, Deployment --> Toolchains",修改Debugger为“arm-none-eabi-gdb.exe”(bin目录下)
到这里,CLion下STM32开发环境的配置就算完成了,但是平常的使用中还有一些需要注意的,所以我们来建个工程演示一下。
CLion新建工程演示
- 首先来建个工程,选择CubeMX,然后选好路径,创建。
- 然后,CLon会调用STM32CubeMX创建一个.ioc文件(也就是Cube的工程文件),选中它,然后“Open With STM32CubeMX”
- 然后就是Cube的常规使用了,网上教程很多,各位看官随便找点看下即可。总之,先修改芯片,然后保存并覆盖原先工程,然后按一般的方式建个LED的demo,稍微要注意的就是生成的工程类型选择“SW4STM32”,因为目前CLion还无法管理Keil工程(不过IAR工具链已经支持了,有兴趣的童鞋可以探索一下在CLion下使用IAR工具链的方法)。
- 关闭Cube,返回CLion,会有这么一个界面弹出来让你选择cfg文件,这个文件定义了工程里面一些关于芯片型号、Flash容量、使用的调试器和调试接口类型等等的信息,选择是以开发板为选项进行的,可能无法和芯片匹配上,没关系,之后可以修改,根据选择一个主芯片与自己所用芯片同系列且尽量相似的板子,然后选择"Copy to Project & Use",复制一份到工程里便于之后修改。笔者这里选择103C8
-
除注释外,cfg文件原内容如下:
set FLASH_SIZE 0x20000 source [find target/stm32f1x.cfg]
-
我们修改之后的内容如下:
# 设置调试器为cmsis-dap source [find interface/cmsis-dap.cfg] # 设置调试器所用接口为SWD transport select swd # 定义Flash大小为64K set FLASH_SIZE 0X10000 # 设置芯片 source [find target/stm32f1x.cfg]
- 然后,点击右上角的小三角进行编译下载(或者使用快捷键Shift + F10 )
- 虽然提示信息是红色(这一点值得吐槽),但是确实下载成功了。
- 点击小三角旁边的小虫虫,可以正常debug,打断点、单步都正常。
- 然后,终于要用到我们的Everything了,当我们想查看寄存器值的时候,提示要加载.svd文件。
- 用Everything搜索“stm32F103 .svd”。笔者电脑上的话,在RT-Thread Studio和Keil的安装目录下都有名为“stm32F103xx.svd”的文件被发现,但是没有安装过类似软件的童鞋可能会发现啥也搜不到,这样的话就需要自己上网找相应文件了,网上能搜到很多资源,例如这个。不过笔者没有做过测试,如有需要请读者自行验证。
加载.svd文件以后就能查看寄存器值了。
- OK,之后就能在CLion下愉快地开发STM32了。
一些可选的配置
- 添加背景图片
依次选择“File --> Settings --> Appearance & Behavior --> Appearance”,然后你就能看到“Background Image”的选项了
- 添加活动模板
活动模板是个很强大的功能,能减少大量不必要的劳动,比如写for循环。
这里用了个printf,很多童鞋都知道,在单片机开发中用printf需要把它重定向到串口,简单点的话就是重写fputc,当然,对编译器类型进行判断后在分别处理的代码更加优秀,比如这样的:
/* USER CODE BEGIN 1 */
#ifdef __GNUC__
/* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
set to 'Yes') calls __io_putchar() */
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
/**
* @brief Retargets the C library printf function to the USART.
* @param None
* @retval None
*/
PUTCHAR_PROTOTYPE
{
/* Place your implementation of fputc here */
/* e.g. write a character to the EVAL_COM1 and Loop until the end of transmission */
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
return ch;
}
/* USER CODE END 1 */
(来源:http://www.waveshare.net/stud...)
至于如何自定义活动模板让这段代码在你需要它的时候于3S内出现,请各位看官移步文末的第二条参考链接。
尾声
如果需要在CLion下进行其他单片机的开发的话,可以考虑一下PlatformIO,具体看这里
参考链接
- https://zhuanlan.zhihu.com/p/...
- https://www.bilibili.com/vide...
- 图都是原创的,正好重装系统了。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。