
STM32几种最流行的开发环境对比 序 ) G: D8 m. U/ l+ J: I 时间进入2020年年底,越来越多的开发者跟我一样不再满足于高级语言和WEB前后端开发,逐渐开始把玩各类MCU,MPU,FPGA等硬件产品,同时这些嵌入式开发的门槛也随着互联网的发展渐渐降低,更好地吸引了众多开发者的加入。毫无疑问,那些软硬结合、能解决实际生产生活需求的小项目,总是更能引发人们的好奇心和学习欲望。 % @$ C7 T2 t T# D 今天我们就来谈谈当前最流行的几种STM32家族MCU的开发方案,主要向新人朋友们介绍几种集成开发环境,对于大佬们来说,如果您还在使用破解版的KEIL开发项目,不妨试试我下面提到的另外几种IDE,或许会有更好的开发体验。 1 m" t( ?0 H' [, k Keil5 最正统,最经典的嵌入式MCU开发环境。 ( `: n; h, R4 J' g( d: ?* m% ?- R ![]() 价格/跨平台 ★ 收费。国内由米尔科技代理授权,但似乎不面向个人开发者分发授权。我曾经致电米尔科技的销售人员,对方直接要求我提供公司信息,我说我只是个人开发者,想用KEIL进行STM32的开发,对方光明正大地让我用破解注册机,我担心我提供公司信息后,被对方猛查,或者发律师函,这不就暴露了么,果断挂断电话。所以到最后我都没弄明白收费的KEIL,单用户一年到底要支付多少钱,对KEIL的好感度骤降,不断萌生寻找新的替代品的想法。 1 C" m) B2 {/ O8 `8 t& O0 L 跨平台方面,仅限Windows,不支持MAC OS和Linux。" `3 F$ e4 I8 L/ n& i& f/ X9 m$ y: l H. y9 b' z0 W5 Z$ \7 l* R( v 4 |, J7 m+ X3 j 开发库 ★★★★★ 无论是51还是ARM Cortex M0-7,KEIL都有着不错的支持。在51下,KEIL甚至提供RTX-51的RTOS;在ARM下,KEIL的pack manage提供丰富的开发库,无论是STM32的HAL/LL库,还是标准库,无论是FreeRTOS还是RT-Thread Nano,都可以方便地下载使用。 k, O; p. D) r8 \+ J( R* _ + F! p; g! N3 A" }* o$ m ) e6 H9 ]) c" R; V0 }0 ~: O 配色和插件支持 ★★ KEIL没有设置代码配色方案的UI支持,所有的配色方案在/UV4/global.prop文件中定义,可以自行设计配色方案。这里分享一份我自用的global.prop,下载后覆盖源文件后,重启KEIL就是下面这种配色,是我喜欢的sublime风格。 ; l" p- `9 y0 ~1 J2 L" C% C , M7 U9 e- ^9 p. p8 W ![]() ! A Q9 n$ ], J" F9 a' J6 o4 @ KEIL提供简单的插件机制,可以手动下载插件置入安装路径下的TOOLS文件夹启用插件,我经常使用的是CoolFormat的代码格式化插件,可以将代码格式化成我习惯的JAVA/C++高级语言样式,而不用忍受大量陈年C代码中花括号换行的眩晕感。不管怎么说,没有UI界面对主题和插件的支持,只能算是勉强能用。# r' C1 B& o4 }) J& q . a. h( D' p! p) d' v 代码关联和自动提示 ★★★2 b [2 c3 l9 h0 F' x 在KEIL-51中,KEIL几乎不提供任何代码提示功能,但可以使用Go to Definition功能查看变量和函数的定义。, m; c: |& n( m C ; v }$ j$ @9 E+ I 8 y" w5 ~! m+ n, L1 f 在KEIL-ARM中,KEIL的代码提示功能做得不错,输入三个字符以上就可以得到不错的代码提示,调用函数时的参数类型提示也可以。 . d7 [# h$ A% v% v ) B3 d0 A! J# J) z+ W8 C% [ ![]() 7 z9 u- b! V: E) ^( V! p ' z G* y5 E/ M8 X! `9 s 有一个问题:在用户录入过程中,一旦取消提示,比如意外地失去了焦点,又或者按下ESC,临时干了点别的事情,代码提示就此无法继续,无论在原来的代码后面输入什么,都不会再次触发代码提示,只能删除这一行所有已输入的字符,重新录入,以此再次激活代码提示。所以,代码提示和追踪功能KEIL只能算是刚刚及格。 ; s7 x f, f' q! K! l 调试能力 ★★★★★% A$ `: e. A/ p' F ![]() * f: O& Y% ^7 h/ Y KEIL的debug能力很强,基于JTAG和STLINK都可以方便地对设备进行在线仿真调试;在手上没有设备时,甚至还可以离线模拟仿真,通过类似于示波器的界面观察模拟出来的电平信号。在调试时,可以方便地观察CPU寄存器、内存数据、变量数据、当前栈数据等信息,用户也可以直接输入内存地址观察内存数据。 # Q9 Y8 p# k( ~% \0 p8 L7 T KEIL 总体评分64分 D0 g% P. r; o% i STM32CubeIDE/ N% w3 h* L; H4 E ST意法半导体自己出品,用来开发自家MCU产品,体验良好。其本质是集成了STM32CubeMX这一图形-代码配置工具的eclipse,将工具链配好了,开发起来很顺手。 2 Q2 Q7 ~1 u( z* V! m# G 价格/跨平台 ★★★★★ 免费,全平台。0 t5 x: p# E( R1 B6 Q4 d ( D4 k6 g2 ^/ ^6 o 开发库 ★★★★- ^6 b" L$ H) b! ~: M% Q; b7 G 在STM32CubeMX界面中,ST提供STM32所有MCU的HAL/LL库,免去了我们到官网下载的麻烦事,同时提供有限的第三方库供选择,以及基于url的库导入功能,我常用的RT-Thread就是通过录入URL新增了RTT的支持,具体方法可以参考文档: 基于 CubeMX 移植 RT-Thread Nano * X6 n9 u5 o2 U% I, i- n' G 6 Z' ^+ _& v6 x9 U; u/ W ![]() 6 l" G. i3 X- Q1 ~- H, }2 g ( y+ p- D t4 Q! Q8 D. @0 N 配色和插件支持 ★★★★2 g, i5 K- x' s; A& ^. f+ r STM32CubeIDE本身没有做任何代码美化工作,但是我们可以通过Eclipse Marketplace安装丰富的eclipse插件,比如我常用的Color IDE Pack,然后通过该插件将编辑区域的颜色调制成我们喜欢的样子。得益于eclipse长期以来的开源社区支持,插件非常丰富。2 n1 c$ b- Y3 {' o$ ]% P ![]() " p& A& Q# g% q3 E$ u% _% X , m" P7 r; Y7 B$ w 代码关联和自动提示 ★★★7 F) `2 j4 L8 f+ f2 i/ H& ?+ E STM32CubeIDE的代码提示功能并不如人意,使用起来甚至还没KEIL舒服,原因在于必须要输入特定字符才能触发代码提示功能。我们在Windows-Preferences-C/C++-Editor-ContentAssist界面可以一窥端倪。 & N" ^" E& q1 Z9 i- t, x ![]() l) g5 d8 U. D7 x6 B# V 2 N5 Y3 i* z M: A 图中的Auto-Activation区域内,定义了几个关键字符,这些字符敲击后,隔500毫秒,可以触发代码提示。间隔时间可以自由调整,但关键字符这里无法自行调整,带来了极大的弊端。开发过程中大量函数需要代码自动提示,但函数中又不可能有图中定义的., ->, ::这几个关键词,因此,在我们需要对函数进行自动提示时,只有使用alt+/进行强制提示,无疑影响了开发体验。3 W& T5 X7 m' d ' A- d7 `/ \+ j( G) p2 h/ p ' S" b0 ]7 a2 E& n5 e% u+ h/ I' U% O8 I 追踪功能可以右击代码块然后Open Decleration或者按F3进行操作,全环境搜索也可以通过ctrl+H进行,这一部分没毛病。 / g7 |( w# a* y9 n0 v4 p+ d * d ], f$ K. i: t5 ~ 调试能力 ★★★★★ 配合GDB服务,在线调试功能还是不错的,特有的SFRs选项卡,还可以观察到内存寄存器的状态,尤其方便使用寄存器开发模式的开发者。虽然没有KEIL那种离线仿真能力,但不影响使用,真实的开发环境下几乎没人会用到那个功能。 : C2 M. o% Q% C" P% W( d ! h( t+ @5 m! P! J/ _ ![]() & V, B( d+ t* G$ s: E y6 [+ j f 8 e7 _2 t# R; X STM32CubeIDE总体评价 84分6 F) |5 H2 a+ z7 U0 S * _8 l) L0 ?, f. ~ 7 p: c% T+ B+ z9 ] 5 a: a: X+ C6 W% X; r% |' z CLion CLion是大名鼎鼎的JetBrains推出的C/C++开发环境,拥有极佳的响应速度和开发体验,舒服养眼的代码配色,甚至连编程字体都是JetBrains精心设计的。在全球众多开发者眼中,JetBrians全家桶真的是最香的,没有之一。; o4 E5 |1 g* f 6 i9 s- D2 X4 k$ } 价格/跨平台 ★★★( ^' g9 v P; y2 W; j! V 收费,全平台。价格如下:/ J1 L$ ~6 i% X# F. H" _4 f 5 C6 G/ d7 e' c* e( x5 _ $ I1 Z+ y4 \3 j4 R ![]() % U+ C* a4 a; ]7 |2 Y! ~% D. ]5 g5 ^ 8 t, ?4 Z2 C# [* V 值得一提的是:开源项目开发者和学生可以通过一年一度的申请获得JetBrains全家桶的免费使用权利,开源项目开发者可以通过其github数据申请,学生可以通过edu邮箱申请。我本人跟当年上大学时的老师关系一直挺好,一直都是登录她的edu邮箱来免费使用JetBrains全家桶的,某宝虽然一直在查封,但断断续续也有edu邮箱的代收发服务,可以自行了解,这里不多介绍。8 V; s/ L2 W& G) [ ! z5 L s' E: _' N: V ' `3 a. \. b6 j 开发库 ★★★& K: U# |: G- z. w4 D CLion的嵌入式开发目前有两种主流方案,一种是仅针对STM32产品的STM32CubeMX方案,另一种是使用插件PlatFormIO。前者安装完最新的CLion,在新建项目时就可以看到入口,后者需要在Plugins中搜索安装PlatFormIO插件,安装完成后,也可以在新建项目时看到入口。使用STM32CubeMX方案时,开发库的丰富程度与STM32CubeMX一样,参考上面的介绍,不再赘述。使用PlatFormIO时,几乎没有第三方库可以集成使用,所有引入和移植工作均需要手动完成。# N5 R3 t. c X: B4 K " }" V: r3 v* f/ u/ L3 v. V- ? ; [# F! i. J& ~2 U% R$ E. o 配色和插件支持 ★★★★★ 这个不用多讲,即使完全不进行额外的设置,CLion秉承JetBrains家族产品一贯的界面风格,代码配色相当舒服,Plugins也非常丰富。 代码关联和自动提示 ★★★★. Y( E4 S" d7 y8 Y- Z 这个打四星的理由是,使用CLion+PlatFormIO方案时,开发环境对于CMSIS和HAL库,只提供了.h文件的关联,对所有的.c文件并没有纳入项目工程。这种做法导致一个问题,比如一个函数,我们只能关联查看到它在头文件中的定义,却没法方便地查看它的在C文件中的实现。 8 j' p* v* h4 o; T! g, \ 同样,在Clion+PlatFormIO的方案中,还存一些不合理的设置,比如如果我现在进行一个STM32F1系列的产品开发,那么像stm32f1xx_hal_conf.h这种配置文件,所有工程项目都要公用一个配置头文件。开发环境强行检索platformio安装路径下的这种头文件。导致实际项目的工程一旦与标准开发板配置不同,很难修改相关配置。最明显的问题出在高速外部晶振频率的定义(HSE_VALUE),我手上大部分开发板都是8MHz的晶振,但默认配置文件stm32f1xx_hal_conf.h中HSE_VALUE的值为25MHz,原本仅仅需要修改一下头文件就可以,这里却很麻烦,不得不利用编译选项强制定义宏来解决。: V/ H) W2 Z7 O" ? 3 X0 q: x3 n7 J) I, D 3 |% H! q- ?# ~: w. q$ p' [' Z' S 后面,我打算后面录制两段视频节目,专门介绍一下使用CLion+CubeMX以及CLion+PlatFormIO这两种方案开发STM32项目的完整过程。$ \8 j3 A. n# M ) s0 J' Y6 Y% R" v5 x# } , M8 T! Z2 L) M9 P" ] 调试能力 ★★★★ CLion使用开源的OCD进行调试,支持基本的断点、单步、变量监控、内存观察等操作,从ST官网可以下载相关芯片的svd文件,导入到CLion中后可以对芯片内的内存寄存器进行观察,但是没有CPU寄存器的观察窗口。. y* Z0 I; T% E* c$ a Y! g- J ![]() 3 q& n9 b* ^( o , C. B' N" \& ?1 a. C CLion总体评分 76分 RT-Thread Studio ![]() - R3 W) M1 P, ?/ x& h& z3 | RT-Thread是著名的国产RTOS,个人认为,相较于目前众多国内互联网巨头出品的RTOS(阿里、腾讯、小米、华为都有推出自家的RTOS),RT-Thread无论名气、生态、成熟度、易用性都远胜之。在学习RT-Thread时,我注意到这款基于eclipse改造的嵌入式开发工具,这款IDE的初衷是为了方便开发者将各大MCU在集成使用RT-Thread,但随着深度使用,我发现这是目前最适合我的一款嵌入式编程环境,无论是开发裸机项目还是RTOS项目,没有之一。 5 c0 Z1 D3 Q3 h# b6 y5 `- K + I X! z: c/ l; S6 ]) u. } 这里不得不为国产软件产品做个推广,希望国人能不断开发出能在全世界流行的软件产品,与君共勉。下载地址:https://www.rt-thread.org/page/studio.html ' _2 C) i1 F& ]" j+ b6 t 价格/跨平台 ★★★★) @3 H! E1 R' O% R! Z 免费,目前只支持Windows。RT-Thread基于eclipse改造,虽然目前只提供了Windwos平台的下载,但移植到Linux无非是时间的问题。根据相关论坛的帖子来看,Linux版的RT-Thread已经在筹备移植中了。 * o6 P( E% F. }% O' Q, y. S 开发库 ★★★★★ RT-Thread Studio在新建项目时,可以选择MCU,在打开的SDK管理器中,可以看到为我们提供了简单直白的库列表,而且这份列表在不断更新中,一开始只有STM32系列,目前已经又扩展了GD32和NXP相关型号的MCU支持,开源社区还在基于RT-Thread不断丰富支持的硬件资源。% T( H; W; \9 ~' _ $ h6 f' B- {, N6 I& k* G! s E & M6 ^/ U- Q. k/ S1 L ![]() 4 f2 b3 e5 I8 P7 Q4 Z, o* K. I. r 配色和插件支持 ★★★★★, I8 J- `3 [) C$ A- |, ? 比起STM32CubeIDE,RTT Studio默认安装了Color Themes插件,这个插件可以很容易修改整个开发环境的配色方案,注意是整个主程序窗口,包括菜单栏、工程资源部分、命令行终端、以及代码编辑区域的配色全部修改。这比起部分插件只修改代码编辑区域的配色要舒服得多。五星好评。9 X( i3 x( F' P& P L % h6 d/ C, R4 Z& j ![]() $ q" }) [! ?8 N6 V0 X ![]() + I% H4 A: K. y* z" _, q 代码关联和自动提示 ★★★★★; Y, c2 K2 |* G, _+ E0 z RTT Studio拥有跟CLion一样舒服的代码自动补全提示。上文说到STM32CubeIDE的在Content Assist配置界面,只对特定字符进行了代码提示的触发,而青出于蓝而胜于蓝的RTT Studio,显然发现了这一编码痛点,在它的Content Assist配置界面,我们欣慰地发现这样的配置方案:0 h0 Z( E N0 x$ N/ Y 7 l1 a5 o8 n+ S$ l; |+ c) M0 ?( _ 7 j# i( D! @; V: n0 V, S* y ![]() 2 Q! O/ |' e" O7 l& l 经过这么一修改,编码流畅度瞬间如丝般顺滑,输入任何字符,都会立刻得到提示,开发者将体验到相当舒服的编码体验。. O4 C& O& K" T % i H8 `) U1 D/ y M& N6 e 调试能力 ★★★★★ 这个跟STM32CubeMX和Keil一样,各种调试都是得心应手,用户只需要选择烧录接口就可以了,支持的编译和烧录接口有J-Link,ST-Link,DAP-Link和QEMU仿真,RTT Studio自带了QEMU仿真能力,可以在没有真实板子的情况下使用QEMU模拟,因为我没这方面需求也一直没研究过。总之,5星好评。5 o0 b+ c5 a7 [/ e1 u* X; b6 N! `1 N ! J, |/ t6 A3 F* V9 L: A# r ![]() RT-Thread Studio总体评分 96分 : o# o8 [" w4 T2 T" N" P 总结 最后做个总结,我个人认为目前开发STM32最优方案应该是国产的RT-Thread Studio。即使不用RTOS,它也能给予非常棒的开发体验;如果项目需要使用RTOS,它更是可以一键生成符合RTT所规范的工程框架,同时提供GUI的组件配置界面。0 q0 x5 |$ m7 p/ l5 B1 o/ S 此外,STM32CubeIDE可以提供不错项目初始化代码生成能力,极大地简化外设的配置工作,但是STM32CubeIDE本身的编码体验较差,不建议使用,推荐使用STM32CubeIDE+RTT Studio结合的方法进行开发。 % m4 Z( E" U( x 至于CLion,这个适合尝尝鲜,新项目开发的时候玩一玩,毕竟目前还是比较小众,CLion+STM32CubeMX的方案要比CLion+PlatFormIO的方案好一些,目前PlatFormIO的问题感觉还是比较多。* P$ H/ P' W9 `2 p6 L KEIL可能也不能少,很多祖传项目都是KEIL的工程,不建议新项目使用它开发,毕竟收费,而且吃相难看。还有一些闭源的三方协议栈,只提供KEIL环境下的库文件,所以免不了还是要安装。 ' e5 h6 `3 w4 t2 p6 P, G |
下图中是下载G0的库,一会就完成了: _& J+ o3 y1 f7 O; k0 m! e k$ \1 U
下图新建裸机程序,就是不清楚这个串口怎么使用??研究中
源文件一定要写上.c 才行
配色和自动提示功能真的强大,哈哈