序
时间进入2020年年底,越来越多的开发者跟我一样不再满足于高级语言和WEB前后端开发,逐渐开始把玩各类MCU,MPU,FPGA等硬件产品,同时这些嵌入式开发的门槛也随着互联网的发展渐渐降低,更好地吸引了众多开发者的加入。毫无疑问,那些软硬结合、能解决实际生产生活需求的小项目,总是更能引发人们的好奇心和学习欲望。
今天我们就来谈谈当前最流行的几种STM32家族MCU的开发方案,主要向新人朋友们介绍几种集成开发环境,对于大佬们来说,如果您还在使用破解版的KEIL开发项目,不妨试试我下面提到的另外几种IDE,或许会有更好的开发体验。
Keil5
最正统,最经典的嵌入式MCU开发环境。
价格/跨平台 ★
收费。国内由米尔科技代理授权,但似乎不面向个人开发者分发授权。我曾经致电米尔科技的销售人员,对方直接要求我提供公司信息,我说我只是个人开发者,想用KEIL进行STM32的开发,对方光明正大地让我用破解注册机,我担心我提供公司信息后,被对方猛查,或者发律师函,这不就暴露了么,果断挂断电话。所以到最后我都没弄明白收费的KEIL,单用户一年到底要支付多少钱,对KEIL的好感度骤降,不断萌生寻找新的替代品的想法。
跨平台方面,仅限Windows,不支持MAC OS和Linux。
开发库 ★★★★★
无论是51还是ARM Cortex M0-7,KEIL都有着不错的支持。在51下,KEIL甚至提供RTX-51的RTOS;在ARM下,KEIL的pack manage提供丰富的开发库,无论是STM32的HAL/LL库,还是标准库,无论是FreeRTOS还是RT-Thread Nano,都可以方便地下载使用。
配色和插件支持 ★★
KEIL没有设置代码配色方案的UI支持,所有的配色方案在/UV4/global.prop文件中定义,可以自行设计配色方案。这里分享一份我自用的global.prop,下载后覆盖源文件后,重启KEIL就是下面这种配色,是我喜欢的sublime风格。
KEIL提供简单的插件机制,可以手动下载插件置入安装路径下的TOOLS文件夹启用插件,我经常使用的是CoolFormat的代码格式化插件,可以将代码格式化成我习惯的JAVA/C++高级语言样式,而不用忍受大量陈年C代码中花括号换行的眩晕感。不管怎么说,没有UI界面对主题和插件的支持,只能算是勉强能用。
代码关联和自动提示 ★★★
在KEIL-51中,KEIL几乎不提供任何代码提示功能,但可以使用Go to Definition功能查看变量和函数的定义。
在KEIL-ARM中,KEIL的代码提示功能做得不错,输入三个字符以上就可以得到不错的代码提示,调用函数时的参数类型提示也可以。
有一个问题:在用户录入过程中,一旦取消提示,比如意外地失去了焦点,又或者按下ESC,临时干了点别的事情,代码提示就此无法继续,无论在原来的代码后面输入什么,都不会再次触发代码提示,只能删除这一行所有已输入的字符,重新录入,以此再次激活代码提示。所以,代码提示和追踪功能KEIL只能算是刚刚及格。
调试能力 ★★★★★
KEIL的debug能力很强,基于JTAG和STLINK都可以方便地对设备进行在线仿真调试;在手上没有设备时,甚至还可以离线模拟仿真,通过类似于示波器的界面观察模拟出来的电平信号。在调试时,可以方便地观察CPU寄存器、内存数据、变量数据、当前栈数据等信息,用户也可以直接输入内存地址观察内存数据。
KEIL 总体评分64分
STM32CubeIDE
ST意法半导体自己出品,用来开发自家MCU产品,体验良好。其本质是集成了STM32CubeMX这一图形-代码配置工具的eclipse,将工具链配好了,开发起来很顺手。
价格/跨平台 ★★★★★
免费,全平台。
开发库 ★★★★
在STM32CubeMX界面中,ST提供STM32所有MCU的HAL/LL库,免去了我们到官网下载的麻烦事,同时提供有限的第三方库供选择,以及基于url的库导入功能,我常用的RT-Thread就是通过录入URL新增了RTT的支持,具体方法可以参考文档: 基于 CubeMX 移植 RT-Thread Nano
配色和插件支持 ★★★★
STM32CubeIDE本身没有做任何代码美化工作,但是我们可以通过Eclipse Marketplace安装丰富的eclipse插件,比如我常用的Color IDE Pack
,然后通过该插件将编辑区域的颜色调制成我们喜欢的样子。得益于eclipse长期以来的开源社区支持,插件非常丰富。
代码关联和自动提示 ★★★
STM32CubeIDE的代码提示功能并不如人意,使用起来甚至还没KEIL舒服,原因在于必须要输入特定字符才能触发代码提示功能。我们在Windows-Preferences-C/C++-Editor-ContentAssist
界面可以一窥端倪。
图中的Auto-Activation
区域内,定义了几个关键字符,这些字符敲击后,隔500毫秒,可以触发代码提示。间隔时间可以自由调整,但关键字符这里无法自行调整,带来了极大的弊端。开发过程中大量函数需要代码自动提示,但函数中又不可能有图中定义的.
, ->
, ::
这几个关键词,因此,在我们需要对函数进行自动提示时,只有使用alt+/
进行强制提示,无疑影响了开发体验。
追踪功能可以右击代码块然后Open Decleration
或者按F3
进行操作,全环境搜索也可以通过ctrl+H
进行,这一部分没毛病。
调试能力 ★★★★★
配合GDB服务,在线调试功能还是不错的,特有的SFRs选项卡,还可以观察到内存寄存器的状态,尤其方便使用寄存器开发模式的开发者。虽然没有KEIL那种离线仿真能力,但不影响使用,真实的开发环境下几乎没人会用到那个功能。
STM32CubeIDE总体评价 84分
CLion
CLion是大名鼎鼎的JetBrains推出的C/C++开发环境,拥有极佳的响应速度和开发体验,舒服养眼的代码配色,甚至连编程字体都是JetBrains精心设计的。在全球众多开发者眼中,JetBrians全家桶真的是最香的,没有之一。
价格/跨平台 ★★★
收费,全平台。价格如下:
值得一提的是:开源项目开发者和学生可以通过一年一度的申请获得JetBrains全家桶的免费使用权利,开源项目开发者可以通过其github数据申请,学生可以通过edu邮箱申请。我本人跟当年上大学时的老师关系一直挺好,一直都是登录她的edu邮箱来免费使用JetBrains全家桶的,某宝虽然一直在查封,但断断续续也有edu邮箱的代收发服务,可以自行了解,这里不多介绍。
开发库 ★★★
CLion的嵌入式开发目前有两种主流方案,一种是仅针对STM32产品的STM32CubeMX方案,另一种是使用插件PlatFormIO。前者安装完最新的CLion,在新建项目时就可以看到入口,后者需要在Plugins中搜索安装PlatFormIO插件,安装完成后,也可以在新建项目时看到入口。 使用STM32CubeMX方案时,开发库的丰富程度与STM32CubeMX一样,参考上面的介绍,不再赘述。 使用PlatFormIO时,几乎没有第三方库可以集成使用,所有引入和移植工作均需要手动完成。
配色和插件支持 ★★★★★
这个不用多讲,即使完全不进行额外的设置,CLion秉承JetBrains家族产品一贯的界面风格,代码配色相当舒服,Plugins也非常丰富。
代码关联和自动提示 ★★★★
这个打四星的理由是,使用CLion+PlatFormIO方案时,开发环境对于CMSIS和HAL库,只提供了.h文件的关联,对所有的.c文件并没有纳入项目工程。这种做法导致一个问题,比如一个函数,我们只能关联查看到它在头文件中的定义,却没法方便地查看它的在C文件中的实现。
同样,在Clion+PlatFormIO的方案中,还存一些不合理的设置,比如如果我现在进行一个STM32F1系列的产品开发,那么像stm32f1xx_hal_conf.h
这种配置文件,所有工程项目都要公用一个配置头文件。开发环境强行检索platformio安装路径下的这种头文件。导致实际项目的工程一旦与标准开发板配置不同,很难修改相关配置。最明显的问题出在高速外部晶振频率的定义(HSE_VALUE),我手上大部分开发板都是8MHz的晶振,但默认配置文件stm32f1xx_hal_conf.h
中HSE_VALUE的值为25MHz,原本仅仅需要修改一下头文件就可以,这里却很麻烦,不得不利用编译选项强制定义宏来解决。
后面,我打算后面录制两段视频节目,专门介绍一下使用CLion+CubeMX以及CLion+PlatFormIO这两种方案开发STM32项目的完整过程。
调试能力 ★★★★
CLion使用开源的OCD进行调试,支持基本的断点、单步、变量监控、内存观察等操作,从ST官网可以下载相关芯片的svd文件,导入到CLion中后可以对芯片内的内存寄存器进行观察,但是没有CPU寄存器的观察窗口。
CLion总体评分 76分
RT-Thread Studio
RT-Thread是著名的国产RTOS,个人认为,相较于目前众多国内互联网巨头出品的RTOS(阿里、腾讯、小米、华为都有推出自家的RTOS),RT-Thread无论名气、生态、成熟度、易用性都远胜之。在学习RT-Thread时,我注意到这款基于eclipse改造的嵌入式开发工具,这款IDE的初衷是为了方便开发者将各大MCU在集成使用RT-Thread,但随着深度使用,我发现这是目前最适合我的一款嵌入式编程环境,无论是开发裸机项目还是RTOS项目,没有之一。
这里不得不为国产软件产品做个推广,希望国人能不断开发出能在全世界流行的软件产品,与君共勉。下载地址:https://www.rt-thread.org/page/studio.html
价格/跨平台 ★★★★
免费,目前只支持Windows。RT-Thread基于eclipse改造,虽然目前只提供了Windwos平台的下载,但移植到Linux无非是时间的问题。根据相关论坛的帖子来看,Linux版的RT-Thread已经在筹备移植中了。
开发库 ★★★★★
RT-Thread Studio在新建项目时,可以选择MCU,在打开的SDK管理器中,可以看到为我们提供了简单直白的库列表,而且这份列表在不断更新中,一开始只有STM32系列,目前已经又扩展了GD32和NXP相关型号的MCU支持,开源社区还在基于RT-Thread不断丰富支持的硬件资源。
配色和插件支持 ★★★★★
比起STM32CubeIDE,RTT Studio默认安装了Color Themes插件,这个插件可以很容易修改整个开发环境的配色方案,注意是整个主程序窗口,包括菜单栏、工程资源部分、命令行终端、以及代码编辑区域的配色全部修改。这比起部分插件只修改代码编辑区域的配色要舒服得多。五星好评。
代码关联和自动提示 ★★★★★
RTT Studio拥有跟CLion一样舒服的代码补全自动提示。上文说到STM32CubeIDE的在Content Assist配置界面,只对特定字符进行了代码提示的触发,而青出于蓝而胜于蓝的RTT Studio,显然发现了这一编码痛点,在它的Content Assist配置界面,我们欣慰地发现这样的配置方案:
经过这么一修改,编码流畅度瞬间如丝般顺滑,输入任何字符,都会立刻得到提示,开发者将体验到相当舒服的编码体验。
调试能力 ★★★★★
这个跟STM32CubeMX和Keil一样,各种调试都是得心应手,用户只需要选择烧录接口就可以了,支持的编译和烧录接口有J-Link,ST-Link,DAP-Link和QEMU仿真,RTT Studio自带了QEMU仿真能力,可以在没有真实板子的情况下使用QEMU模拟,因为我没这方面需求也一直没研究过。总之,5星好评。
RT-Thread Studio总体评分 96分
总结
最后做个总结,我个人认为目前开发STM32最优方案应该是国产的RT-Thread Studio。即使不用RTOS,它也能给予非常棒的开发体验;如果项目需要使用RTOS,它更是可以一键生成符合RTT所规范的工程框架,同时提供GUI的组件配置界面。
此外,STM32CubeIDE可以提供不错项目初始化代码生成能力,极大地简化外设的配置工作,但是STM32CubeIDE本身的编码体验较差,不建议使用,推荐使用STM32CubeIDE+RTT Studio结合的方法进行开发。
至于CLion,这个适合尝尝鲜,新项目开发的时候玩一玩,毕竟目前还是比较小众,CLion+STM32CubeMX的方案要比CLion+PlatFormIO的方案好一些,目前PlatFormIO的问题感觉还是比较多。
KEIL可能也不能少,很多祖传项目都是KEIL的工程,不建议新项目使用它开发,毕竟收费,而且吃相难看。还有一些闭源的三方协议栈,只提供KEIL环境下的库文件,所以免不了还是要安装。