stm32是意法半导体 (stmicroelectronics) 公司推出的新一代基于cortex-m内核的32位微控制器系列。stm32以其 高性能、低功耗、一流的外设 、简单易用等特点在近几年迅速发展,占领了很大市场,得到了很多开发者青睐。其应用领域包括电机驱动和 应用控制 ,pc游戏****外设和 gps平台 ** , 可编程控制器(plc) 、 变频器 、打印机和扫描仪**等。(除了stm32,意法半导体公司还推出了8位微处理器stm8系列,因其高性价比也有很多开发者在使用。这里暂不介绍stm8系列)
stm32系列成员众多,按其性能可分为入门型(f0系列),基础型(f1系列),增强型(f3系列),高性能型(f4,f7等)。按内核的不同分为cortex-m0(f0系列),cortex-m3(f1、f3系列),cortex-m4(f4系列)等。一般初学者选择f103系列较多,既能满足学习要求,又不至于太贵。
光凭一句“高性能”可能对其性能还是没有什么概念。下面是一个常见单片机的性能分数对照表,可供参考。
对照表最下面的at89c52就是最典型的51单片机,可以看到其分数只有2.36。而stm32f103的分数达到了177,stm32f407更是达到了566。
近几年,国产单片机也迅速崛起,在性能上已经不输国外。例如esp8266、esp32系列已经获得众多单片机开发者的喜爱,不仅性能强大,而且自带wifi模块。又如对标stm32的gd32系列,其性能也已经不低于stm32,只是其学习资源不如stm32多。
很多人都是从51开始学习单片机,大学教材也大都以51单片机为例。stm32相比于51单片机,性能大幅提升,外设也更多,为了方便开发,st官方专门发布了标准外设库,只要调用外设库里的函数就能轻松使用各种外设,而不需要对寄存器进行直接操作。
由于stm32功能较强,内部寄存器复杂且多,所以使用起来也相对较麻烦。比如要给某个io口置高电平,51单片机只要 p0^0=1; 一行程序就能实现,但是stm32首先要调用gpio的标准外设库,然后进行gpio初始化并使能对应的时钟,然后才能将gpio置位(当然也可以直接操作寄存器,不过stm32寄存器太多,使用更不方便)。所以很多51单片机学习者刚开始学习stm32会觉得无从下手,其实只要了解了stm32的库函数,其开发就和51一样简单,而且对于大型的项目开发其优势就体现出来了。学习stm32就是学习其库函数,从官方的库函数使用手册入手,学习起来还是很简单的。
stm32型号很多,所以有着规范的命名规则,从其型号便可知道其部分参数,如产品类型,flash容量,封装。
文将以stm32f103c8t6这款单片机为例来介绍stm32。
从命名规则可以知道,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)。下图是其引脚图。
由于引脚有限,很多io口都是功能复用,下图是其io功能复用情况。
接下来详细介绍各个外设
1.gpio
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口使用,则需要将对应复用功能屏蔽。
2.adc
这款单片机有两个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电源连接即可(之所以分几个电源,是为了提高供电稳定性)
3.晶振
从上面的引脚图可以看出,stm32可以外接两个晶振。其中8m晶振就是单片机cpu运行用的,虽然晶振频率只有8m,但其内部频率最高可以达到72mhz,这得益于其内部的分频器,将8m震荡频率经二分频就得到了16m,经过多次分频就能得到更高的频率。
下图是其时钟树示意图。
另外一个32.768khz的低频晶振是用于内部 rtc时钟 。stm32自带rtc时钟,类似于手机、电脑的系统时钟。不知大家有没有注意过,在我们的手机或者电脑没有联网的时候,重新开机后仍然可以显示时间,其实这就是rtc时钟。原理就是在手机或者电脑主电源断电的情况下,自动启用后备电源(电脑的后备电源就是主板上的纽扣电池),维持rtc时钟晶振工作,以实现主电源断电下也能计时。之所以不采用8m高频晶振作为rtc的振荡源,是因为高频晶振受温度、制作工艺影响大而容易出现误差(rtc的误差就小得多了)。要想使用stm32的rtc,只需要给1号引脚vbat接一个纽扣电池即可,在未接3.3v电源时,会自动使用纽扣电池供电,接了3.3v电源又会自动切换至3.3v电源供电。因为rtc耗电极低,所以一颗纽扣电池也足够使用很长时间。但是在主电源断电情况下,如果纽扣电池也没电了,内部的时钟时间就会丢失,再次上电就恢复成了初始时间。
关于其具体用法,以后再做详细介绍。
4.iic、usart、spi通信
stm32外设丰富,支持硬件级的iic、usart、sp通信。相比于软件实现的通信,硬件级的更快,更稳定,更方便。
iic一般用于单片机与传感器、显示屏、eeprom等外设间的数据传输。其iic接口支持 7 位或 10 位寻址, 7 位从模式时支持双从地址寻址。内置了硬件 crc发生器/ 校验器。
它们可以使用** dma** 操作并支持 smbus 总线 2.0 版 /pmbus 总线。
usart可用于单片机与电脑的的串口通信。usart1接口通信速率可达4.5mbps,其他接口的通信速率可达2.25mbps。usart接口具有硬 件的cts和rts信号管理、支持irda sir endec传输编解码、兼容iso7816的智能卡并提供lin主/ 从功能。 所有usart接口都可以使用dma操作。
spi比前两种通信拥有更快的通信速率,一般用于数据传输量大的场合,比如控制高分辨率或高刷新率的彩屏。spi接口,在从或主模式下,全双工和半双工的通信速率可达18mbps。3位的预分频器可 产生8种主模式频率,可配置成每帧8位或16位。硬件的crc产生/校验支持基本的sd卡和mmc模式。 所有的spi接口都可以使用dma操作。
5.jtag、swd与仿真器
在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,就可以对单片机程序进行在线调试,包括 断点调试 ,变量监 控 ,对于程序查错是非常方便。
swd接口即串行调试(serialwiredebug),是一种和jtag不同的调试模式,最直接的区别是调试接口上,swd只需要4(或者5)个引脚:3.3v、gnd、swdio(pa13)、swclk(pa14)。他的swdio、swclk与jtag的tms、tck复用了。
要想实现在线调试,还需要专门的仿真工具。常用的仿真器有j-link、u-link、st-link
j-link其实就是一个usb转jtag的工具,可将电脑与jtag端口相连。jlink是一个通用的开发工具,可以用于keil、iar、ads 等平台。速度,效率,功能都很好。
u-link是arm/keil公司推出的仿真器,不过现在能买到的都是其升级版本ulink2和ulink pro仿真器。ulink/ulink2可以配合keil软件实现仿真功能,仅可以在keil软件上使用(不支持iar、ads等其他平台)。
st-link是专门针对意法半导体stm8和stm32系列芯片的仿真器。st-link /v2指定的swim标准接口和jtag / swd标准接口,通过st-link可直接将程序写入单片机(swim / jtag / swd)以及eeprom烧写,当然也也支持在线仿真,相比另外两种,更具优势。所以个人非常推荐该仿真器
6.程序开发平台
stm32程序开发平台主要有keil、iar、stm32cudeide等。keil支持众多单片机开发,版本如今已更新到keil 5。iar相比keil,编译的代码更紧凑,实际使用与keil差不多。stm32cudeide是stm专门为stm32开发的ide,但是使用还是比不上前两种平台
7.其他
内部温度传感器:stm内部有一个温度传感器,并连接到pc13,可用于监测芯片温度。
控制器区域网络(can):can 接口兼容规范 2.0a 和 2.0b( 主动 ) ,位速率高达 1mbps 。它可以接收和发送 11 位标识符的标准帧, 也可以接收和发送29 位标识符的扩展帧。具有 3 个发送邮箱和 2 个接收 fifo , 3 级 14 个可调节的滤波器。一般用与单片机与上位机的通信。
通用串行总线 (usb):内嵌一个兼容全速 usb 的设备控制器,遵循全速 usb 设备 (12mbps
) 标准,端点可由软件配置,具有待机 / 唤醒功能。
定时器:中等容量的stm32f103xx增强型系列产品包含1个高级控制定时器、3个普通定时器,以及2个看门 狗定时器和1个系统嘀嗒定时器。
看门狗:用于防止程序跑偏。独立的看门狗是基于一个 12 位的递减计数器和一个 8 位的预分频器,它由一个内部独立的 40khz 的 rc 振荡器提供时钟;因为这个rc 振荡器独立于主时钟,所以它可运行于停机和待机模式。它可以被当 成看门狗用于在发生问题时复位整个系统,或作为一个自由定时器为应用程序提供超时管理。通过 选项字节可以配置成是软件或硬件启动看门狗。
在调试模式下,计数器可以被冻结。窗口看门狗内有一个7 位的递减计数器,并可以设置成自由运行。它可以被当成看门狗用于在发生问 题时复位整个系统。它由主时钟驱动,具有早期预警中断功能;在调试模式下,计数器可以被冻结。
基于ARM的智能综合监控基站方案设计
为移动出行革命铺平道路
FAKRA连接线的作用有哪些?
以太网和SMBus在单一平台上提供数据和电源管理
三星Galaxy A系列和S系列之间的区别
STM32系列成员介绍
vivoX27怎么样 值不值得买
如何利用STM32代码进行读保护功能
LFP电池在乘用车领域的装机占比进一步提升
汽车动力技术未来二十年发展趋势
基于ZEMAX的汽车前照灯的鳞甲反光杯系统设计
配电箱结构 配电箱的主要特点
PI LED驱动LYTSwitch家族添新成员,引入FluxLink技术
韩国LG化学表示正加大马力促进电池组件本土化生产 以减少对日本的依赖性
开关电源的各种拓扑结构之间的关系及由来
特斯拉提升上海超级工厂产能 首次拿下中国新能源汽车产量榜首
吸尘器哪个品牌好?追觅吸尘器助你轻松清洁
Littelfuse完成了对TE Connectivity电路保护业务的并购
直流电源EMI滤波器的设计原则
特斯拉Q3实现营收233.5亿美元,毛利率降至17.9%