目的 STM32是意法半导体(ST)推出的主要基于ARM Cortex-M内核内核的一系列微控制器(MCU、单片机),包含多个系列: ) U+ E2 J8 \/ j$ P0 t) Y; L- t! p
! Q* G2 L. {4 g' b
8 X4 ]+ C- }: b A - @' s; }- w6 w" J6 y' y3 e! q
整体上目前来说STM32系列微控制器性能、功能、价格、开发难易度、资料支持上都中规中矩,没有特别突出的,也没有特别特别短板的,用用还是蛮不错的。这篇文章就介绍下STM32系列入门所需的相关知识点。; }9 ]+ t! u% Z! D
7 S/ O* L" R8 j2 {7 N8 j 基础需求
. e- i$ I6 A6 ?- {+ p* u3 {在入门学习使用STM32系列微控制器前如果有下面两项知识技能那是最好(学习使用其它单片机也一样),当然如果没有也不是太大问题,可以边使用边学习嘛~
8 I( M, D, |2 i; p, h, @! l 电路基础
3 G% m8 S9 |: L& O; ]对于入门学习使用来说电路基础要求不多,了解点初中电学知识,然后在学习过程中能了解 上拉电阻 下拉电阻 的概念就差不多了。 8 q9 d( u' B: ^+ w; L% n
编程语言1 C3 b2 g2 r& P. G) \& p
编程语言的话目前来说只要掌握 C语言 就成,当然语言学习还是边用边学就成。稍微进阶点的话可以学一学 C++ ,毕竟更高级语言,开发起来会更方便快捷些。 - [; R" J9 f& T
入门介绍官方网站
* {2 X @* d, u7 y2 q' x# b' X1 Y3 e使用开发ST的微控制器第一手的资料来源就是ST官网:: {9 A5 A6 C- Z- [6 j& x
http://www.st.com/content/st_com/en.html . Z- L' N6 s5 O* |' f! t
官网可以下载到所有开发所需要的资料、数据包、官方工具。 # ?8 @0 s" s0 `/ _
另外的ST还有一个本地化的中文网站:: N; Y+ H% L) G, ~
http://www.stmcu.com.cn/+ U& V! S3 v9 A: L$ M# [; P
ST本地官网中有大量中文文档、实战资料、培训视频等,是中文语境人员入门STM32的一个非常好的地方。
4 u. m" U |, C2 }" T6 w & ?/ |. d/ g' G P) ~8 s
* C5 N! T) O8 K5 L2 D1 ` 7 K4 n. k9 ]- i. P# c
3 M% x' S: r! E型号选择
& _4 j2 U+ Q8 z8 BSTM32系列微处理器型号非常多,对于入门学习来说的话推荐使用 STM32F103 系列和 STM32F4 系列的, STM32F103 系列在国内教程非常丰富, STM32F4 系列教程没有 STM32F103 系列多,但是性能强上不少,开发起来更加便利。 ) D% U, E# W5 c( c: v X2 b
特别的我个人比较喜欢STM32F405RG这颗芯片,速度快、内存大、价格不算贵,用来开发还是蛮爽的,比如MicroPython首选用的就是这颗料,用MicroPython开发单片机也是别有一番感觉。
$ V i7 B$ N5 A0 U
如果是开发过程中对芯片具体的选型的话可以在官网直接查询,也可以使用ST官方的选型工具 STMCUFinder ,该工具可以分门别类筛选具体型号、查看基本信息、下载文档资料:
* C4 v' \, w) w% T/ k % O! f; d$ ]2 M: X, }; e' G# k! |
! i" E: B1 E ~* M) a+ _
3 U4 I; q$ [ w y) K& jSTMCUFinder 可以在官网搜索下载(包含windows、android、ios版本):
) o4 g/ w' m$ O H) X
' r, u/ A8 T0 B, _5 @1 `
) |$ G, n9 s3 _+ S0 I0 g4 \
" k% d6 |% W. X% Z
' j2 f0 K. ~) P# E; V z. e. D: S1 h: M+ R1 ^* F! W! e
4 c) u V: A2 M, B2 h) f( Y 开发方式
# X( E- {: Q" a8 l6 ~STM32的开发主要指的是通过程序实现功能,ST官方提供的开发方式来说从远及近分别是: 直接读写寄存器 、 标准外设驱动库 SPL 、 硬件抽象层库 HAL库 、 底层库 LL库 。四种开发方式各有优缺点,可以参考ST官方的测试与说明: ! t( l& [7 X" p
N% f( C0 `. S# S; U9 X
$ l9 `5 `* u0 ^3 w# w0 F9 E
6 Y* l2 K5 t$ D* V3 @0 h4 O) y) Z5 H) W/ y5 u" ~% x
总体来看,代码效率与移植性成反比的规律是明显的。但与 Cube HAL 相比, Cube LL 的效率优势还是很明显的,几乎和直接写寄存器的效率相差无几。而且目前 STM32cubeMX 已经开始支持直接生成使用 Cube LL 的工程,对于以后追求效率的开发应用人员来说,非常值得推荐给大家使用。
: Q) Y& P1 {3 D
! q# I9 r# b# P2 \+ g7 I" r: j, r; \# z. o
更多内容可以查看ST官方文档《STM32 库函数性能对比》,下载地址如下:
; x: f3 b8 P: rhttp://www.stmcu.com.cn/Designresource/design_resource_detail/file/458139/lang/ZH/token/2be385b879d6412614c6adcd9616ef98
9 L! n, `: w2 u8 S
直接读写寄存器 开发是最慢的,可移植性最差,基本不推荐使用,只有个别对时间或是内存要求特别高、或者在写操作系统调度器时才需要直接读写寄存器; 标准外设驱动库 是ST最开始提供的库(国内的教程也很多是依据题库出的),现在已经被ST放弃了; HAL库 和 LL库 是近几年推出的库,结合STM32CubeMX使用非常方便, HAL库 性能较差、在STM32系列芯片中可移植性好, LL库 性能好、可移植性差。 $ F4 u, ]$ H/ d
目前来说推荐使用 HAL库 主开发,在时间或内存有要求的场合混合使用 LL库 。 * b8 [, ~/ V9 c0 ]
开发工具% `* p( W. b# a' y5 Z
开发工具主要指两块:STM32CubeMX和具体应用开发编程的工具(IDE)。 5 W/ }: N: c' j3 h! c8 M
STM32CubeMX是一个图形化的用于配置生成STM32系列初始化代码的工具。使用该工具可以直观快速的完成项目的初始化,节省大量的时间。这个工具经过多年的发展目前还是非常好用的,可以直接生成代码给很多IDE用,(虽然也可以不用这个工具手动进行初始布置,但是能省事不是更好么)。STM32CubeMX可以在ST官网搜索下载。 " H5 E; v0 z. q) E4 V, c, p7 r
STM32CubeMX有中文的用户手册《STM32CubeMX用于STM32配置和初始化C代码生成》,下载地址如下(文档不是从最新版本翻译的,仅供参考): 2 ?' K( m6 }" v7 Q0 m4 T& [
http://www.stmcu.com.cn/Designresource/design_resource_detail/file/454999/lang/ZH/token/59f8ce3903a16c6cc354ece119011f63
& d: g ?' N0 I+ D除上面文档以外还有更多中文文档、培训教程等,可以在ST中文网自行搜索下载。
( f, x6 ~7 o+ [- l3 N
IDE的话主流的有下面几个: - EWARM(IAR)
- MDK-ARM(Keil)
% V" S* o ]1 d这个是目前国内教程中使用最多的,不过这个并非商用免费的,但学习来说还行(就我来说并不推荐,主要是人性化角度来说太差); - SW4STM32
- TrueSTUDIO
% x8 P2 S4 k k2 G4 M这个已被ST收购,商用免费的,基于eclipse开发,使用体验比MDK-ARM好多了,虽然国内教程少些,但是我个人觉得花时间去上手这个是值得的(现在有更好的替代品了,见下文) ,该软件可以在ST官网搜索下载;
: r6 o8 o$ a0 P4 g
& j& O7 d3 l3 I : R( r; i4 p `. R( Y
3 t- Z& r3 }% [* j) i; Y
最近ST官方推出了新的IDE: STM32cubeIDE ,这个其实就是整合了STM32CubeMX和TrueSTUDIO,目前刚推出几个月,可能还存在一些问题,但是照以往经验来看,对于STM32的开发这个工具将会在未来成为主力: % b. a, z3 q3 F1 d, N! R9 y4 l& ~0 p, J
7 ^" x! h! U* I7 g
STM32cubeIDE 可以在ST官网搜索下载,包含Win、Mac以及几种Linux发行版的版本,可以参考下面链接:: D6 v, E. G+ g t- \2 V5 k
+ ]) k! }) z: H; y0 t/ b8 ]http://www.st.com/content/st_com/en/products/development-tools/software-development-tools/stm32-software-development-tools/stm32-ides/stm32cubeide.html
& d1 k% F) J7 q* h5 x, N9 | 程序调试
3 J7 v5 Q. Y3 C7 m7 ~程序调试的话方法工具蛮多,推荐使用 ST-LINK ,可以买ST官方的 ST-LINK V2 或者 ST-LINK V3 :
) b: Y4 Q, a5 d
4 n% i9 }' |( N% k) x
2 T- C* x* t$ Z+ }: J4 v( q
; g8 T3 p* s( m$ W' Q也可以买TB上那种十几块的U盘大小的 ST-LINK V2 产品:
% @8 `. l- D% E0 K' W) s) Z6 o
3 F! ]. k, j. D; }4 M+ J ' B- D: U0 f2 }" x* J+ v
* A' `- p$ N5 ^0 h* x! j" r
7 H0 V+ F! U+ R R Q6 J5 G
两者使用是各有优缺点的:
2 Z! {$ N' C( @4 ~. C5 m/ U- ST官方的接口齐全,可以支持SW和SWV方式调试(还有JTAG,没前面两个好用),但是官方的ST-LINK不支持向STM32开发板供电,也就是你还得单独给开发板供电;
- TB上那种便宜的对STM32来说几乎都是只支持SW方式调试的,不支持SWV方式(SWV方式开发者可以向IDE输出调试信息,调试起来更加方便),但是这类模块几乎都可以直接为STM32开发板供电;
/ i: ~% _% H$ q3 n% Q T9 r
! ~; M( W2 c% j' u: m4 m/ S& z
如果手头没有仿真器的话也可以通过串口打印运行关键信息等其它方式来进行调试,不过效果可能差点,关键是没法一步步运行追踪。 + a; Y1 D5 C( K: }, d$ E
固件烧录
5 c. J4 r; T# i6 B, lSTM32固件烧录不管是方式还是软件都挺多的,我个人一般通过UART进行烧录,工具的话推荐使用ST官方的 STM32CubeProgrammer ,该工具将几种烧录方式都整合在一个工具中,可以在官网搜索下载: - A, T* B' A# A* [$ T8 B) C. F
) e: y0 j H( }) `; X2 R3 Q) R7 W' Z- C: L) q8 p
: }, M/ H4 W, |% E
4 K* J% m9 P/ ASTM32CubeProgrammer 还拥有中文的软件说明《UM2237_STM32CubeProgrammer软件工具介绍》,下载地址如下:
6 ] J0 ]7 e# x7 X% o6 G/ Phttp://www.stmcu.com.cn/Designresource/design_resource_detail/file/455015/lang/ZH/token/fa8266101a7f73ebffcb51c3beea9bc4; p/ D5 P& X9 Z; e9 h" C0 s
. m0 r3 }2 V9 j, Y& x H7 X# W+ [
资料说明STM32开发主要用到下面一些官方资料: - Datasheet
9 J6 F( k/ }8 E9 a3 T芯片物理方面的数据资料,包含针脚定义、电气特性等,可以在官网或是STMCUFinder对应芯片文档列表下载; - Reference manual/ x0 k$ f. n' q! Q" j
芯片参考手册主要介绍内核与外设各个功能模块具体原理、逻辑、参数等,可以在官网或是STMCUFinder对应芯片文档列表下载; - User Manual
, T/ I' t( v/ O6 ~* k. j9 Z用户手册,这里主要指直接和编程相关的文档,可以在官网下载。比如使用STM32F4的话可以在官网搜索 STM32CubeF4 ,点击进入该项目后再点击 Resource 条目,该条目下就是相关的文档了,其中 User Manual 标签下可以找到描述为 Description of STM32F4 HAL and LL drivers 的文档,该文档是 HAL 库和 LL 库的库函数手册,对于开发来说非常重要。另外在这里也可以找到各种中间件(RTOS、TCP/IP stack、FatFs等)的使用手册。 - APPLICATION NOTE" C- x v; @0 s
应用笔记一般具体介绍某一功能、外设、模块的使用,可以在官网和STMCUFinder中下载; - 例程
/ h9 [& @. G# A0 |5 s, @7 qST官方也是有具体的例程的,比如使用STM32F4的话可以在官网搜索 STM32CubeF4 ,点击进入该项目后向下滚动页面,在Get Software中可以看到 STM32CubeF4 的条目,下载该内容,解压后在其中的Projects文件夹中就是可以应用在对应官方开发板中的例程; - 其它/ e, `8 O* s9 S: L
其它还有编程手册、勘误手册等,可以根据需求查阅;
3 M/ X3 `" }9 @% \( m. O z/ `0 m j7 F5 @9 P+ |" F
- N+ B7 T) k" g! T# Y+ K1 k
: Q% F6 y; U+ Y3 @, v* @5 Z总结这篇文章是对入门开发学习STM32系列微控制器所相关的内容做个梳理,如果有相关单片机开发经验的人员的话基本依据上面内容就可以进行学习开发了,如果没有其它开发经验的话可以买个带教程的开发板套件进行入门学习。 附图一张-STM32开发全家桶:
) ^2 |% a J' s0 I$ J3 v1 ]' }
c, K0 ?4 {: N& G, f4 Y
7 x, P# w: O& j9 u" z" f2 S4 ^ F) V# q% ~7 r$ U& a
|