你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32单片机初学1-STM32介绍

[复制链接]
STMCU小助手 发布时间:2022-10-31 23:47
STM32以其高性能、低功耗、一流的外设、简单易用等特点在近几年迅速发展,占领了很大市场,得到了很多开发者青睐。其应用领域包括电机驱动和应用控制,PC游戏外设和GPS平台 ,可编程控制器(PLC)、变频器、打印机和扫描仪等。(除了STM32,意法半导体公司还推出了8位微处理器STM8系列,因其高性价比也有很多开发者在使用。这里暂不介绍STM8系列)
9 B) R: D3 j/ H8 l) S1 |4 P# }' ?% C! Q/ N
1a56fdfbe3da4f00b4bc4568e8b644ea.png
! x) Y' d2 w0 h0 \6 B9 E
# ?7 K6 M/ t2 D3 Z8 tSTM32系列成员众多,按其性能可分为入门型(F0系列),基础型(F1系列),增强型(F3系列),高性能型(F4,F7等)。按内核的不同分为Cortex-M0(F0系列),Cortex-M3(F1、F3系列),Cortex-M4(F4系列)等。一般初学者选择F103系列较多,既能满足学习要求,又不至于太贵。
- g* h( g2 L, i4 v% N" {4 o& X* U/ z
1 ~6 B3 G1 X' F: k+ [' j* C9 p光凭一句“高性能”可能对其性能还是没有什么概念。下面是一个常见单片机的性能分数对照表,可供参考。6 I) g. ^+ j% H
/ R1 E* U2 ~( ]/ f* A$ n6 B$ T9 z
6baf1fa03b874141a097aad1187c0e6d.jpg
7 c9 b! X9 r& I: Y, d
$ Q' x% B7 U" Z( S& v' e4 g; @ 73911a6db0914cf2afd6ae7b0b529c5b.jpg
6 |# U' Z: T, n4 u! o5 b
% g- F# r9 _+ z: P& `4 c; ` 578200f25f9a41bd94a27f3073eeb275.jpg
- n4 R6 x6 \. Z: o
+ s; H) P. g* u4 `1 n" _& v 对照表最下面的AT89C52就是最典型的51单片机,可以看到其分数只有2.36。而STM32F103的分数达到了177,STM32F407更是达到了566。) N/ l2 J7 |9 J; [+ H( p7 u

+ F' `  s- h& k" z" D& _! ?/ n近几年,国产单片机也迅速崛起,在性能上已经不输国外。例如ESP8266、ESP32系列已经获得众多单片机开发者的喜爱,不仅性能强大,而且自带wifi模块。又如对标STM32的GD32系列,其性能也已经不低于STM32,只是其学习资源不如STM32多。4 S) k  f/ v" a$ Q. i! }/ a
. T+ Q9 V% X# g; }& k; t, J
很多人都是从51开始学习单片机,大学教材也大都以51单片机为例。STM32相比于51单片机,性能大幅提升,外设也更多,为了方便开发,ST官方专门发布了标准外设库,只要调用外设库里的函数就能轻松使用各种外设,而不需要对寄存器进行直接操作。
( H% F$ g1 E* W3 g2 ~
! H0 I3 B* J+ \; t" T. I" p+ C由于STM32功能较强,内部寄存器复杂且多,所以使用起来也相对较麻烦。比如要给某个IO口置高电平,51单片机只要 P0^0=1; 一行程序就能实现,但是STM32首先要调用GPIO的标准外设库,然后进行GPIO初始化并使能对应的时钟,然后才能将GPIO置位(当然也可以直接操作寄存器,不过STM32寄存器太多,使用更不方便)。所以很多51单片机学习者刚开始学习STM32会觉得无从下手,其实只要了解了STM32的库函数,其开发就和51一样简单,而且对于大型的项目开发其优势就体现出来了。学习STM32就是学习其库函数,从官方的库函数使用手册入手,学习起来还是很简单的。% ^% S' {$ {+ Y: T. f8 e: E( Y% M
) |; V6 {+ _4 ~: T
STM32型号很多,所以有着规范的命名规则,从其型号便可知道其部分参数,如产品类型,Flash容量,封装。3 Z  ~: E, k% P- w

; c- R7 h  U4 H ce97bc29bfbe4141a57be764761086d5.png
9 D3 X6 N5 h) Z& G$ @0 {! F) ], z9 v( u* T; x3 Y0 i
本文将以STM32F103C8T6这款单片机为例来介绍STM32。  q/ s* f/ m9 H9 e' J5 M
4 u* S% c# p7 E1 L% W0 f
从命名规则可以知道,STM32F103C8T6是STM32基础型单片机,采用LQFP 48 封装,带有64KB的Flash(闪存程序存储器)。其最高工作频率72MHz,20KB的SRAM,2个12位ADC(模数转换器),7通道DMA控制器并支持定时器、ADC、SPI、IIC等,带有7个定时器,多达9个通信接口(2个IIC、3个USART、2个SPI、CAN接口、USB2.0)。下图是其引脚图。+ Q+ w5 j3 k  c  N" M# E

; l6 g% x7 Y6 F* c  h' \* u 2f6856fc68ca4342a7818b4a03a4fe21.png : e* L1 ], E8 ~. o' y

1 ?- ~# V' p* B$ M 由于引脚有限,很多IO口都是功能复用,下图是其IO功能复用情况。0 J9 A/ U  Y8 Z' a& A

3 k8 `  L7 R. K3 @( ~& Z) ?' f6 X 8cbefe404ed04af18d8054ece4873540.png
- [/ [. x+ s3 A; H1 [, ], D
. c9 g! Y: P6 v; p8 B. ]7 }  I3 v-----------------------------------------------------------7 q: {. q8 d# {1 F) w2 d) n7 u

* q8 g% R3 O8 z! o7 ^1 H  Q接下来详细介绍各个外设  S- F2 Z/ ~0 u1 E9 m' G2 C+ T0 N

4 O2 y8 L* c3 A1.GPIO
; `% V* x; @. ~( m" b) z+ i- `8 u8 y7 i5 c( X5 ?4 q# W
GPIO即通用输入输出口,也就是我们常说的IO口。这款单片机有PA(PA0-PA15)、PB(PB0-PB15)、PC 3组IO(PC13-PC15),类似于STC89C52的P0、P1、P2口,A与B组每组16个,但C组只有3个。GPIO的排列分布不像51单片机那么规则,其实是考虑到开发者需要扩展IO时减少电路图的更改。有些GPIO默认是不做普通IO口的,例如PB4、PB3默认是作为JTAG使用,PC14、PC15默认作为RTC的晶振接口,如需作为普通IO口使用,则需要将对应复用功能屏蔽。# `& S. a- A4 l2 q% K: J8 |

- g  E- Y6 ?! j' C3 F/ a/ `关于GPIO的具体使用可参考文章《STM32-GPIO详解》。
: H7 `$ v6 m- b3 G8 D  T
2 [$ G* o1 U' y' W- g: |( N/ O: |0 D2.ADC
3 _$ r* _9 N& E" f7 ]2 I# j# u( P5 M. `% r: f  o
这款单片机有两个12位的ADC(PB0:ADC_IN8、PB1:ADC_IN9),用以将0-3.3V的电压模拟量转成数字量(0-2^12)。每个ADC共用多达16个外部通道, 可以实现单次或扫描转换。在扫描模式下,自动进行在选定的一组模拟输入上的转换。需要注意的是,ADC的电源是独立于供电电源的,其供电引脚为VSS-A与VDD-A,一般可以将这两个引脚直接与3.3V电源相连。包括其他的几组VDD和VSS,直接与3.3V电源连接即可(之所以分几个电源,是为了提高供电稳定性)。
) m5 d& ?, ^: l( Q+ B: Y/ E" r# i; t0 k& l+ Y0 g0 L. N: [6 z
3.晶振
& I. O: S, j% _& P$ G1 o. c$ g0 Q
) e% I2 m0 H$ R( d) ]/ {从上面的引脚图可以看出,STM32可以外接两个晶振。其中8M晶振就是单片机CPU运行用的,虽然晶振频率只有8M,但其内部频率最高可以达到72MHz,这得益于其内部的分频器,将8M震荡频率经二分频就得到了16M,经过多次分频就能得到更高的频率。
( S4 o, M: L1 Y6 H% X/ W
+ G) W. `4 X. t) Q$ }下图是其时钟树示意图。
$ E+ Z1 a6 R5 _9 F. K& V( j9 f* H! I- F: ~$ l
07f2dec9e666477ab15f7325f73af1f6.png $ c/ ~, {0 [& K6 ~+ P( k1 r4 v/ c

- J4 m9 o( R8 P: d" X" r- M另外一个32.768kHz的低频晶振是用于内部RTC时钟。STM32自带RTC时钟,类似于手机、电脑的系统时钟。不知大家有没有注意过,在我们的手机或者电脑没有联网的时候,重新开机后仍然可以显示时间,其实这就是RTC时钟。原理就是在手机或者电脑主电源断电的情况下,自动启用后备电源(电脑的后备电源就是主板上的纽扣电池),维持RTC时钟晶振工作,以实现主电源断电下也能计时。之所以不采用8M高频晶振作为RTC的振荡源,是因为高频晶振受温度、制作工艺影响大而容易出现误差(RTC的误差就小得多了)。要想使用STM32的RTC,只需要给1号引脚Vbat接一个纽扣电池即可,在未接3.3V电源时,会自动使用纽扣电池供电,接了3.3V电源又会自动切换至3.3V电源供电。因为RTC耗电极低,所以一颗纽扣电池也足够使用很长时间。但是在主电源断电情况下,如果纽扣电池也没电了,内部的时钟时间就会丢失,再次上电就恢复成了初始时间。( S" A  E9 \" M1 `
5 N2 }1 F4 x2 z- F+ m2 C
除了内部的RTC,也可使用外置RTC芯片,实现断电计时的功能。外置RTC时钟IC的计时精度可以更高,但是其一般需要通过IIC通信来读写时钟数据。
! d. y# s6 n+ {& v! k- q' H
3 H5 H3 R6 j; t  |+ H cf9584ec1a1f47ac9a7219591c8b39e2.png ' ^" C& J/ t3 W+ T( H" d+ ~

6 X. z1 Y! ~  C4 U+ _# `( @
% o( S9 v1 T! g  `0 U2 @+ y3 G 4.IIC、USART、SPI通信

! c; N+ o4 s2 a2 F( }) Z2 x; D0 d2 W* i* @5 |+ a1 v6 }" o  H
STM32外设丰富,支持硬件级的IIC、USART、SP通信。相比于软件实现的通信,硬件级的更快,更稳定,更方便。
, g2 T% {% ?; _% a/ P. z" g8 f) x- S
IIC一般用于单片机与传感器、显示屏、EEPROM等外设间的数据传输。其IIC接口支持 7 位或 10 位寻址, 7 位从模式时支持双从地址寻址。内置了硬件 CRC发生器/ 校验器。$ f. V# P, `5 p! E6 a  r2 j6 _& N
它们可以使用 DMA 操作并支持 SMBus 总线 2.0 版 /PMBus 总线。
; J4 D) r8 r  P. _. ]' Y" U; [ 5fddef57ba7440d394ea67fe2a1c37e1.png 7 [+ y7 l  D# b$ N

3 s& F, ]; k: @4 ~' `# {$ g2 gUSART可用于单片机与电脑的的串口通信。USART1接口通信速率可达4.5Mbps,其他接口的通信速率可达2.25Mbps。USART接口具有硬 件的CTS和RTS信号管理、支持IrDA SIR ENDEC传输编解码、兼容ISO7816的智能卡并提供LIN主/ 从功能。 所有USART接口都可以使用DMA操作。
' v& b! e0 ^" ~5 S2 c1 @; D  _' L$ g- N% W
07e05e1063bc48b7af81189582980cb6.png ; b( j' `- ^, B6 t9 b8 d

0 k. ~2 w  i9 g" o( _
: P5 |/ X' k" v3 m: N7 h* hSPI比前两种通信拥有更快的通信速率,一般用于数据传输量大的场合,比如控制高分辨率或高刷新率的彩屏。SPI接口,在从或主模式下,全双工和半双工的通信速率可达18Mbps。3位的预分频器可 产生8种主模式频率,可配置成每帧8位或16位。硬件的CRC产生/校验支持基本的SD卡和MMC模式。 所有的SPI接口都可以使用DMA操作。4 D8 U, p8 n, V9 D' J$ r
9 I9 l, V% ^3 v5 \# D
287557e74bcc499fbd0ae8bb813beb18.png 8 L4 ?( {$ O( W2 R* @5 C
  [9 p4 _2 P0 [& i1 Q+ Q9 I
& r% M+ a* n1 O' K
5.JTAG、SWD与仿真器) p6 z6 J+ d8 Z- K

; }( r, {7 H$ ~在STM32上有几个接口称为JTAG、SWD。JTAG接口(Joint Test Action Group,联合测试工作组),是一种国际标准测试协议(IEEE 1149.1兼容),主要用于芯片内部测试。现在多数的高级器件都支持JTAG协议,如DSP、FPGA器件等。标准的JTAG接口是4线:TMS(PA13)、TCK(PA14)、TDI(PA15)、TDO(PB3),分别为模式选择、时钟、数据输入和数据输出线。有了JTAG,就可以对单片机程序进行在线调试,包括断点调试,变量监控,对于程序查错是非常方便。
, q6 n/ W& I: H5 {3 W& G, f0 K# b+ Y9 c. u- D5 u/ L/ W8 C
ebc1f22cc2563257f4d1f11ad749f641.png
& J7 d( [) b/ Z
9 P6 G5 Z6 p0 K8 jSWD接口即串行调试(SerialWireDebug),是一种和JTAG不同的调试模式,最直接的区别是调试接口上,SWD只需要4(或者5)个引脚:3.3V、GND、SWDIO(PA13)、SWCLK(PA14)。他的SWDIO、SWCLK与JTAG的TMS、TCK复用了。
* E+ Y4 }/ ^0 q6 m  ?7 Z0 G3 u' i! B
. j9 P4 y4 V, P9 {0 u) F# T要想实现在线调试,还需要专门的仿真工具。常用的仿真器有J-Link、U-Link、ST-Link。+ N+ N, o$ C% l9 ?* q% p

) Y6 s0 l8 i- O2 j* l3 ~J-Link其实就是一个USB转JTAG的工具,可将电脑与JTAG端口相连。JLINK是一个通用的开发工具,可以用于KEIL、IAR、ADS 等平台。速度,效率,功能都很好。$ o: X! X2 F7 N: I* S+ r8 H6 `
3 I! I1 m) P/ w7 Q1 c
983922ec89216973b3d955919589b74c.jpg % |+ R% @" Q5 q
* m4 N; \! C  M  ]( y$ t. ^
U-Link是ARM/KEIL公司推出的仿真器,不过现在能买到的都是其升级版本ULINK2和ULINK Pro仿真器。ULINK/ULINK2可以配合Keil软件实现仿真功能,仅可以在Keil软件上使用(不支持IAR、ADS等其他平台)。' A5 ~. J8 u/ F  [# X' `
, c* C& @) |" k+ j8 Z& {! q
8bc6e4fe15a14226095cc397ae4023cc.jpg
& b5 N7 H  v4 |1 H" G
$ ?" K6 d1 Z+ ^% }! B5 p( o4 [3 BST-Link是专门针对意法半导体STM8和STM32系列芯片的仿真器。ST-LINK /V2指定的SWIM标准接口和JTAG / SWD标准接口,通过ST-Link可直接将程序写入单片机(SWIM / JTAG / SWD)以及EEPROM烧写,当然也也支持在线仿真,相比另外两种,更具优势。所以个人非常推荐该仿真器。7 ~: c1 O6 c" {$ \" M% m) j
: M6 `5 Y  {" s* u  H
3a0c43262fd18d9763553dc561dbb63b.jpg
- Q  P! X$ Z/ y2 k7 ~, d: M& r3 Z$ |* T# n- \1 O4 n5 m+ p/ N
6.程序开发平台
4 M5 b2 |9 F. q2 }, g
' f/ M7 A8 ^. l' g; y% }
STM32程序开发平台主要有Keil、IAR、STM32CudeIDE等。Keil支持众多单片机开发,版本如今已更新到Keil 5。IAR相比Keil,编译的代码更紧凑,实际使用与Keil差不多。STM32CudeIDE是STM专门为STM32开发的IDE,但是使用还是比不上前两种平台。
4 j# w' C7 L5 w+ u; X: D$ F8 H* n$ X
5 i& A% b9 J2 z' F! |. e* D7.其他
) |$ ~. p2 [0 _2 S3 p4 }) @/ a) u
内部温度传感器:STM内部有一个温度传感器,并连接到PC13,可用于监测芯片温度。
7 j# p! i" I& P# I
" ]7 Z# U. b* b2 ]控制器区域网络(CAN):CAN 接口兼容规范 2.0A 和 2.0B( 主动 ) ,位速率高达 1Mbps 。它可以接收和发送 11 位标识符的标准帧, 也可以接收和发送29 位标识符的扩展帧。具有 3 个发送邮箱和 2 个接收 FIFO , 3 级 14 个可调节的滤波器。一般用与单片机与上位机的通信。* j8 G0 x- n+ B) R
通用串行总线 (USB):内嵌一个兼容全速 USB 的设备控制器,遵循全速 USB 设备 (12Mbps) _+ v& _- \; F0 ^- _% C0 J
) 标准,端点可由软件配置,具有待机 / 唤醒功能。! B" {3 b: l, i
定时器:中等容量的STM32F103xx增强型系列产品包含1个高级控制定时器、3个普通定时器,以及2个看门 狗定时器和1个系统嘀嗒定时器。
* i' s0 D3 B8 }  [) A3 R2 }- [3 M5 E  [+ ]: T: O
928878e7075246038ae33e8273b8ec30.png
* K* y4 X4 o" O  b- ~3 E% G& b  P" q$ k# I# d
看门狗:用于防止程序跑偏。独立的看门狗是基于一个 12 位的递减计数器和一个 8 位的预分频器,它由一个内部独立的 40kHz 的 RC 振荡器提供时钟;因为这个RC 振荡器独立于主时钟,所以它可运行于停机和待机模式。它可以被当 成看门狗用于在发生问题时复位整个系统,或作为一个自由定时器为应用程序提供超时管理。通过 选项字节可以配置成是软件或硬件启动看门狗。. ~+ G* [, [1 d2 L9 z
在调试模式下,计数器可以被冻结。窗口看门狗内有一个7 位的递减计数器,并可以设置成自由运行。它可以被当成看门狗用于在发生问 题时复位整个系统。它由主时钟驱动,具有早期预警中断功能;在调试模式下,计数器可以被冻结。
+ E" T' N( o0 t: _1 @) p, D————————————————; B# z9 L$ @) b
版权声明:#liufenges#/ ~1 ^) p' X" [- ~& w9 A1 F5 |

8 k8 D  G% l+ r5 T8 I& z; i
3 H9 W  E9 `3 E/ i4 k
赞 收藏 评论0 发布时间:2022-10-31 23:47

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版