
STM32几种最流行的开发环境对比 , o/ [/ g% c5 d) j( Y2 Y序1 y/ i% |7 H3 j. Y ) V3 S" f, ~8 K+ q8 I( ` 时间进入2020年年底,越来越多的开发者跟我一样不再满足于高级语言和WEB前后端开发,逐渐开始把玩各类MCU,MPU,FPGA等硬件产品,同时这些嵌入式开发的门槛也随着互联网的发展渐渐降低,更好地吸引了众多开发者的加入。毫无疑问,那些软硬结合、能解决实际生产生活需求的小项目,总是更能引发人们的好奇心和学习欲望。$ i4 l3 U, [/ D# ?9 } * m0 U9 p$ s4 M* }7 ~% o: W 今天我们就来谈谈当前最流行的几种STM32家族MCU的开发方案,主要向新人朋友们介绍几种集成开发环境,对于大佬们来说,如果您还在使用破解版的KEIL开发项目,不妨试试我下面提到的另外几种IDE,或许会有更好的开发体验。 . l7 d$ Z1 [! }$ |/ g- K" k2 m' e9 j6 I Keil5 最正统,最经典的嵌入式MCU开发环境。. {# o9 y! G5 N) H+ @; ^ 7 K3 e6 T) l8 j( K- [/ d0 P5 e ![]() $ H5 Y% t% j! i 价格/跨平台 ★ 收费。国内由米尔科技代理授权,但似乎不面向个人开发者分发授权。我曾经致电米尔科技的销售人员,对方直接要求我提供公司信息,我说我只是个人开发者,想用KEIL进行STM32的开发,对方光明正大地让我用破解注册机,我担心我提供公司信息后,被对方猛查,或者发律师函,这不就暴露了么,果断挂断电话。所以到最后我都没弄明白收费的KEIL,单用户一年到底要支付多少钱,对KEIL的好感度骤降,不断萌生寻找新的替代品的想法。% o# O# i$ u# h/ g& Y ; }2 @( l* |9 z4 E c% y5 w: W 跨平台方面,仅限Windows,不支持MAC OS和Linux。 , O2 q3 @) q3 F# s' Y( c+ b7 X( o) } 开发库 ★★★★★2 d# Q& ^: E G1 g* U- Q6 W* k# ^0 l 无论是51还是ARM Cortex M0-7,KEIL都有着不错的支持。在51下,KEIL甚至提供RTX-51的RTOS;在ARM下,KEIL的pack manage提供丰富的开发库,无论是STM32的HAL/LL库,还是标准库,无论是FreeRTOS还是RT-Thread Nano,都可以方便地下载使用。: s- N. d7 u8 {$ D% ? , Z+ e7 F% k$ \3 V" {* q 配色和插件支持 ★★ KEIL没有设置代码配色方案的UI支持,所有的配色方案在/UV4/global.prop文件中定义,可以自行设计配色方案。这里分享一份我自用的global.prop,下载后覆盖源文件后,重启KEIL就是下面这种配色,是我喜欢的sublime风格。( u; j' l) @/ E5 W5 y K5 R + W' L8 w8 g( w' E1 w: W* {, e ![]() ) n% ~ F6 o1 E6 f KEIL提供简单的插件机制,可以手动下载插件置入安装路径下的TOOLS文件夹启用插件,我经常使用的是CoolFormat的代码格式化插件,可以将代码格式化成我习惯的JAVA/C++高级语言样式,而不用忍受大量陈年C代码中花括号换行的眩晕感。不管怎么说,没有UI界面对主题和插件的支持,只能算是勉强能用。 m+ ?6 v& B; T% y" B. T; E : \4 W g- |! X+ w* M9 W2 M) }+ I 代码关联和自动提示 ★★★ 在KEIL-51中,KEIL几乎不提供任何代码提示功能,但可以使用Go to Definition功能查看变量和函数的定义。 ! `% T. z$ G- ?1 Z* q 在KEIL-ARM中,KEIL的代码提示功能做得不错,输入三个字符以上就可以得到不错的代码提示,调用函数时的参数类型提示也可以。 $ j! A8 |& N0 P4 a- h ![]() # t2 u$ Z: _4 H8 h" L: E! J 有一个问题:在用户录入过程中,一旦取消提示,比如意外地失去了焦点,又或者按下ESC,临时干了点别的事情,代码提示就此无法继续,无论在原来的代码后面输入什么,都不会再次触发代码提示,只能删除这一行所有已输入的字符,重新录入,以此再次激活代码提示。所以,代码提示和追踪功能KEIL只能算是刚刚及格。 6 h/ a: {( U% y# n 0 e3 r$ U& f' u& `% B 调试能力 ★★★★★ ![]() * @) k& t+ }! t7 y x : ]3 G8 @& j6 V4 O2 B' m1 U! k KEIL的debug能力很强,基于JTAG和STLINK都可以方便地对设备进行在线仿真调试;在手上没有设备时,甚至还可以离线模拟仿真,通过类似于示波器的界面观察模拟出来的电平信号。在调试时,可以方便地观察CPU寄存器、内存数据、变量数据、当前栈数据等信息,用户也可以直接输入内存地址观察内存数据。 4 |# R5 T$ W" ]0 D% j0 p7 p% ]: n KEIL 总体评分64分8 u8 W4 S7 J0 `* x! t. J4 g ( t9 w" `. ~' k- m2 p3 z, D STM32CubeIDE' _# p% j0 J) n7 }; L ST意法半导体自己出品,用来开发自家MCU产品,体验良好。其本质是集成了STM32CubeMX这一图形-代码配置工具的eclipse,将工具链配好了,开发起来很顺手。$ p. d" Z3 H- q' L1 h' x# V5 y 0 g. G: H- {( E3 n6 S# Q7 n9 g" ` 价格/跨平台 ★★★★★ 免费,全平台。 : k" Q/ j! o4 r5 y0 f9 {* Y5 ~1 L 开发库 ★★★★: n& Q. J6 X6 T& z 在STM32CubeMX界面中,ST提供STM32所有MCU的HAL/LL库,免去了我们到官网下载的麻烦事,同时提供有限的第三方库供选择,以及基于url的库导入功能,我常用的RT-Thread就是通过录入URL新增了RTT的支持,具体方法可以参考文档: 基于 CubeMX 移植 RT-Thread Nano3 _$ Y8 a- q3 U; D2 e/ K 0 W: U% l, _; h0 l $ G5 _% B y+ \3 k: ^4 s ![]() 配色和插件支持 ★★★★ STM32CubeIDE本身没有做任何代码美化工作,但是我们可以通过Eclipse Marketplace安装丰富的eclipse插件,比如我常用的Color IDE Pack,然后通过该插件将编辑区域的颜色调制成我们喜欢的样子。得益于eclipse长期以来的开源社区支持,插件非常丰富。 9 t' g: V, f" L2 S4 H" o3 \ ) p% k" S% e3 x" X ![]() v6 i% s- ?2 x E 代码关联和自动提示 ★★★ STM32CubeIDE的代码提示功能并不如人意,使用起来甚至还没KEIL舒服,原因在于必须要输入特定字符才能触发代码提示功能。我们在Windows-Preferences-C/C++-Editor-ContentAssist界面可以一窥端倪。 . W X8 f' N3 N0 {+ t9 ] + o& R- ]7 z5 Y3 q( Q+ m7 u ![]() 0 ~0 I5 F) g4 Y/ ?5 C# o; q 图中的Auto-Activation区域内,定义了几个关键字符,这些字符敲击后,隔500毫秒,可以触发代码提示。间隔时间可以自由调整,但关键字符这里无法自行调整,带来了极大的弊端。开发过程中大量函数需要代码自动提示,但函数中又不可能有图中定义的., ->, ::这几个关键词,因此,在我们需要对函数进行自动提示时,只有使用alt+/进行强制提示,无疑影响了开发体验。9 n# n9 T6 `3 ?8 o5 x & N4 \) X0 o) C 追踪功能可以右击代码块然后Open Decleration或者按F3进行操作,全环境搜索也可以通过ctrl+H进行,这一部分没毛病。 8 A8 i7 P6 a, x# [# w7 s- T . g1 M4 N% i# {2 |0 E, { 调试能力 ★★★★★ 配合GDB服务,在线调试功能还是不错的,特有的SFRs选项卡,还可以观察到内存寄存器的状态,尤其方便使用寄存器开发模式的开发者。虽然没有KEIL那种离线仿真能力,但不影响使用,真实的开发环境下几乎没人会用到那个功能。 * s# G6 M" J9 c) T. b; J& Y ![]() ) c6 L' r$ y" m8 i( H( y. }0 H ) Y. f3 F F5 U) X STM32CubeIDE总体评价 84分 3 e" q# Q+ v) s$ [- k! E% p3 w CLion4 f# t; B& V5 ~% z8 A CLion是大名鼎鼎的JetBrains推出的C/C++开发环境,拥有极佳的响应速度和开发体验,舒服养眼的代码配色,甚至连编程字体都是JetBrains精心设计的。在全球众多开发者眼中,JetBrians全家桶真的是最香的,没有之一。. h2 \4 c, J" K! g5 L. D N6 v $ v- b9 \8 c! e- f 价格/跨平台 ★★★4 w. K, `. C: a X" X 收费,全平台。价格如下:2 k, T; |7 G, b/ L, u8 H - B' Q2 ~1 R6 ^$ }. x1 ?3 a ![]() 值得一提的是:开源项目开发者和学生可以通过一年一度的申请获得JetBrains全家桶的免费使用权利,开源项目开发者可以通过其github数据申请,学生可以通过edu邮箱申请。我本人跟当年上大学时的老师关系一直挺好,一直都是登录她的edu邮箱来免费使用JetBrains全家桶的,某宝虽然一直在查封,但断断续续也有edu邮箱的代收发服务,可以自行了解,这里不多介绍。2 |6 X8 J3 X {0 q8 O 8 i) Z7 v% g+ b 开发库 ★★★ CLion的嵌入式开发目前有两种主流方案,一种是仅针对STM32产品的STM32CubeMX方案,另一种是使用插件PlatFormIO。前者安装完最新的CLion,在新建项目时就可以看到入口,后者需要在Plugins中搜索安装PlatFormIO插件,安装完成后,也可以在新建项目时看到入口。使用STM32CubeMX方案时,开发库的丰富程度与STM32CubeMX一样,参考上面的介绍,不再赘述。使用PlatFormIO时,几乎没有第三方库可以集成使用,所有引入和移植工作均需要手动完成。7 G+ g9 C! V T. W. c0 ] 5 U1 N4 w; J$ z5 p) K/ z 配色和插件支持 ★★★★★& S3 [7 j. t: X, J- w) J 这个不用多讲,即使完全不进行额外的设置,CLion秉承JetBrains家族产品一贯的界面风格,代码配色相当舒服,Plugins也非常丰富。 代码关联和自动提示 ★★★★( v* A2 Y( @2 A7 ~$ n 这个打四星的理由是,使用CLion+PlatFormIO方案时,开发环境对于CMSIS和HAL库,只提供了.h文件的关联,对所有的.c文件并没有纳入项目工程。这种做法导致一个问题,比如一个函数,我们只能关联查看到它在头文件中的定义,却没法方便地查看它的在C文件中的实现。 * N& b" V/ D: M: ^4 c! J 同样,在Clion+PlatFormIO的方案中,还存一些不合理的设置,比如如果我现在进行一个STM32F1系列的产品开发,那么像stm32f1xx_hal_conf.h这种配置文件,所有工程项目都要公用一个配置头文件。开发环境强行检索platformio安装路径下的这种头文件。导致实际项目的工程一旦与标准开发板配置不同,很难修改相关配置。最明显的问题出在高速外部晶振频率的定义(HSE_VALUE),我手上大部分开发板都是8MHz的晶振,但默认配置文件stm32f1xx_hal_conf.h中HSE_VALUE的值为25MHz,原本仅仅需要修改一下头文件就可以,这里却很麻烦,不得不利用编译选项强制定义宏来解决。 ; W9 I; {& ^5 W7 _; }& w/ G * E7 M' u' S; Q! H. }, L 后面,我打算后面录制两段视频节目,专门介绍一下使用CLion+CubeMX以及CLion+PlatFormIO这两种方案开发STM32项目的完整过程。 o8 K+ n/ f, u! B5 j( E2 ^ r: C) H: \5 _8 d 调试能力 ★★★★ CLion使用开源的OCD进行调试,支持基本的断点、单步、变量监控、内存观察等操作,从ST官网可以下载相关芯片的svd文件,导入到CLion中后可以对芯片内的内存寄存器进行观察,但是没有CPU寄存器的观察窗口。 . J/ ^' _( k0 _( \ + e. s) C M: {$ I ![]() " P6 d7 e9 L! |1 H+ l7 |' Q: |/ [ CLion总体评分 76分+ P! G3 u( r' T2 [: q- g$ s & }) G0 C$ P8 s! I" Q RT-Thread Studio* `9 ^ \3 J, B ![]() / ~' U# Y5 A2 v1 f u, R h% M) ?9 p RT-Thread是著名的国产RTOS,个人认为,相较于目前众多国内互联网巨头出品的RTOS(阿里、腾讯、小米、华为都有推出自家的RTOS),RT-Thread无论名气、生态、成熟度、易用性都远胜之。在学习RT-Thread时,我注意到这款基于eclipse改造的嵌入式开发工具,这款IDE的初衷是为了方便开发者将各大MCU在集成使用RT-Thread,但随着深度使用,我发现这是目前最适合我的一款嵌入式编程环境,无论是开发裸机项目还是RTOS项目,没有之一。% E, { {% q% |( J; ~" s 这里不得不为国产软件产品做个推广,希望国人能不断开发出能在全世界流行的软件产品,与君共勉。下载地址:https://www.rt-thread.org/page/studio.html - r* r7 h. K$ t 价格/跨平台 ★★★★2 k( }$ ^7 \ g4 W% [' O8 N 免费,目前只支持Windows。RT-Thread基于eclipse改造,虽然目前只提供了Windwos平台的下载,但移植到Linux无非是时间的问题。根据相关论坛的帖子来看,Linux版的RT-Thread已经在筹备移植中了。! k; D5 m* n/ D/ O' [ 8 Q1 {/ \. F) s/ P4 u9 L; } 开发库 ★★★★★ RT-Thread Studio在新建项目时,可以选择MCU,在打开的SDK管理器中,可以看到为我们提供了简单直白的库列表,而且这份列表在不断更新中,一开始只有STM32系列,目前已经又扩展了GD32和NXP相关型号的MCU支持,开源社区还在基于RT-Thread不断丰富支持的硬件资源。 $ _, f1 F* [/ {+ X9 P 5 ~7 `, E5 s R A V- O ![]() 9 s0 \* |; V) t 配色和插件支持 ★★★★★ 比起STM32CubeIDE,RTT Studio默认安装了Color Themes插件,这个插件可以很容易修改整个开发环境的配色方案,注意是整个主程序窗口,包括菜单栏、工程资源部分、命令行终端、以及代码编辑区域的配色全部修改。这比起部分插件只修改代码编辑区域的配色要舒服得多。五星好评。# i$ [: X- l! ^4 x1 q; @ $ v+ M/ ^; n) ?6 e1 A( Z1 B/ u( N ![]() ' ]7 w/ g9 g7 z/ b `8 e ![]() / ?7 O E8 Z; P e 5 M( _ k% N' p0 {, o6 b3 D 代码关联和自动提示 ★★★★★ RTT Studio拥有跟CLion一样舒服的代码自动补全提示。上文说到STM32CubeIDE的在Content Assist配置界面,只对特定字符进行了代码提示的触发,而青出于蓝而胜于蓝的RTT Studio,显然发现了这一编码痛点,在它的Content Assist配置界面,我们欣慰地发现这样的配置方案:/ v& W d' T3 O% [ " K6 s! k9 A5 _( E! z ![]() 0 K/ w/ I! q9 x6 f* m9 a. [ 经过这么一修改,编码流畅度瞬间如丝般顺滑,输入任何字符,都会立刻得到提示,开发者将体验到相当舒服的编码体验。 / | G9 M9 P0 q- X 调试能力 ★★★★★# A% b# Z# i3 P' r" m$ M 这个跟STM32CubeMX和Keil一样,各种调试都是得心应手,用户只需要选择烧录接口就可以了,支持的编译和烧录接口有J-Link,ST-Link,DAP-Link和QEMU仿真,RTT Studio自带了QEMU仿真能力,可以在没有真实板子的情况下使用QEMU模拟,因为我没这方面需求也一直没研究过。总之,5星好评。7 D, B4 j- ?+ e$ F5 f( Y & B( n6 R+ A' J; U ![]() RT-Thread Studio总体评分 96分2 u7 @2 E t; Q & X7 e5 j1 z( D3 U1 x# S 5 b, i' q5 C9 R* w9 S0 m 总结$ j( N$ ?, t; a/ c: d5 G3 J+ |6 A 最后做个总结,我个人认为目前开发STM32最优方案应该是国产的RT-Thread Studio。即使不用RTOS,它也能给予非常棒的开发体验;如果项目需要使用RTOS,它更是可以一键生成符合RTT所规范的工程框架,同时提供GUI的组件配置界面。 3 \; [# M1 X6 F, \3 r8 T ( n; [0 q# Q" ] 此外,STM32CubeIDE可以提供不错项目初始化代码生成能力,极大地简化外设的配置工作,但是STM32CubeIDE本身的编码体验较差,不建议使用,推荐使用STM32CubeIDE+RTT Studio结合的方法进行开发。 至于CLion,这个适合尝尝鲜,新项目开发的时候玩一玩,毕竟目前还是比较小众,CLion+STM32CubeMX的方案要比CLion+PlatFormIO的方案好一些,目前PlatFormIO的问题感觉还是比较多。) i8 }% R$ R6 K- L8 {0 x8 E* n " ]. q0 K) W( z KEIL可能也不能少,很多祖传项目都是KEIL的工程,不建议新项目使用它开发,毕竟收费,而且吃相难看。还有一些闭源的三方协议栈,只提供KEIL环境下的库文件,所以免不了还是要安装。 |
下图中是下载G0的库,一会就完成了
下图新建裸机程序,就是不清楚这个串口怎么使用??研究中! R3 X- a C" v# S
源文件一定要写上.c 才行2 |8 d0 K1 j6 d ^
配色和自动提示功能真的强大,哈哈 u$ A3 S9 h) r# \, |0 R1 D: o