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,但其学习资源很少。
很多人都是从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口使用,则需要将对应复用功能屏蔽。
关于GPIO的具体使用可参考文章《STM32-GPIO详解》。
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耗电极低,所以一颗纽扣电池也足够使用很长时间。但是在主电源断电情况下,如果纽扣电池也没电了,内部的时钟时间就会丢失,再次上电就恢复成了初始时间。
除了内部的RTC,也可使用外置RTC芯片,实现断电计时的功能。外置RTC时钟IC的计时精度可以更高,但是其一般需要通过IIC通信来读写时钟数据。
关于其具体用法,以后再做详细介绍。
4.IIC、USART、SPI通信
STM32外设丰富,支持硬件级的IIC、USART、SP通信。相比于软件实现的通信,硬件级的更快,更稳定,更方便。
USART可用于单片机与电脑的的串口通信。USART1接口通信速率可达4.5Mbps,其他接口的通信速率可达2.25Mbps。USART接口具有硬 件的CTS和RTS信号管理、支持IrDA SIR ENDEC传输编解码、兼容ISO7816的智能卡并提供LIN主/ 从功能。 所有USART接口都可以使用DMA操作。
参考文章《STM32-USART串口通信》。
SPI比前两种通信拥有更快的通信速率,一般用于数据传输量大的场合,比如控制高分辨率或高刷新率的彩屏。SPI接口,在从或主模式下,全双工和半双工的通信速率可达18Mbps。3位的预分频器可 产生8种主模式频率,可配置成每帧8位或16位。硬件的CRC产生/校验支持基本的SD卡和MMC模式。 所有的SPI接口都可以使用DMA操作。
参考文章《STM32-SPI驱动IPS彩屏》。
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,可用于监测芯片温度。
文章浏览阅读408次。 在ubuntu 8.04下安装Oracle 11g2008年05月22日 星期四 11:02oracle 11g 数据库虽然提供了linux x86的版本,但是支持的linux版本只有Red Hat,Novell and Solaris 这几个,debian 和 ubuntu 不在支持之列,所以在ubuntu下安装就相对麻烦一些,请照着下文的方法一步一步的安装,不
文章浏览阅读166次。新东方在线中考网整理了《初一英语下册语法知识点全汇总》,供同学们参考。一. 情态动词can的用法can+动词原形,它不随主语的人称和数而变化。1. 含有can的肯定句:主语+can+谓语动词的原形+其他。2. 含有can的否定句:主语+can't+动词的原形+其他。3. 变一般疑问句时,把can提前:Can+主语+动词原形+其他? 肯定回答:Yes,主语+can。否定回答:No,主语+can't...._七年级下册计算机知识点
文章浏览阅读3k次。在平时开发中,可能会遇到UFUN函数没有的功能,比如创建PTP的加工程序(我目前没找到,哪位大神可以指点一下),可以使用Grip创建PTP,然后用UFUN函数UF_call_grip调用Grip程序。具体如下截图(左侧UFUN,右侧Grip程序):..._uf调用grip
文章浏览阅读156次。第一个:原生普通样式(随着主题不同,样式会变)第二个:原生普通样式-小icon第三个:自定义RatingBar 颜色第四个:自定义RatingBar DrawableRatingBar 各样式实现===============原生样式原生样式其实没什么好说的,使用系统提供的style 即可<RatingBarstyle="?android:attr/ratingBarStyleIndicator"android:layout_width=“wrap_cont.._ratingbar样式修改
文章浏览阅读4.6k次,点赞6次,收藏11次。安装vs2017:参考vs2017下载和安装。安装cmake3.12.3:cmake是一个工程文件生成工具。用户可以使用预定义好的cmake脚本,根据自己的选择(像是Visual Studio, Code::Blocks, Eclipse)生成不同IDE的工程文件。可以从它官方网站的下载页上获取。这里我选择的是Win32安装程序,如图所示:然后就是运行安装程序进行安装就行。配置glfw3...._vs2017的opengl环境搭建(完整篇)
文章浏览阅读976次。MLC NAND,UBIFS_ubifs warning
文章浏览阅读2.2k次。计算机系统的两种存储器形式介绍时间:2016-1-6计算机系统的存储器一般应包括两个部分;一个是包含在计算机主机中的主存储器,简称内存,它直接和运算器,控制器及输入输出设备联系,容量小,但存取速度快,一般只存放那些急需要处理的数据或正在运行的程序;另一个是包含在外设中的外存储器,简称外存,它间接和运算器,控制器联系,存取速度虽然慢,但存储容量大,是用来存放大量暂时还不用的数据和程序,一旦要用时,就..._计算机存储器系统采用的是主辅结构,主存速度快、容量相对较小,用于 1 分 程序,外
文章浏览阅读5.6k次。1. STEP 7(Simatic Manager):STEP 7或者Simatic Manager是西门子PLC编程最常用的软件开发环境。4. STEP 7 MicroWin:STEP 7 MicroWn是一款专门针对微型PLC(S7-200系列PLC)的编程软件,是Simatic Manager的简化版。如果需要与PLC系统配合使用,则需要与PLC编程工具进行配合使用。除了上述软件之外,西门子还提供了一些配套软件和工具,如PLC模拟器、硬件调试工具等,以帮助PLC编程人员快速地进行调试和测试。_西门子plc编程软件
文章浏览阅读36次。【代码】HashMap扩容。_hashma扩容
文章浏览阅读2.9k次。1mvn dependency:copy-dependencies2 项目右键 -> Maven -> Disable Maven Nature3 项目右键 -> Configure -> Convert to Maven Project_maven资源加载不全,怎么重新加载
文章浏览阅读527次。DMLDML的全称是Database management Language,数据库管理语言。主要包括以下操作:insert、delete、update、optimize。本篇对其逐一介绍INSERT数据库表插入数据的方式:1、insert的完整语法:(做项目的过程中将字段名全写上,这样比较容易看懂)单条记录插入语法:insert into table_name (column_name1,......_dml的全称是
文章浏览阅读136次。可以参考: http://git.oschina.net/jrain-group/ 组织下的Java Modbus支持库Modbus-系列文章1、虚拟成对串口(1)下载虚拟串口软件VSPD(可在百度中搜索)image.png(2)打开软件,添加虚拟串口。在设备管理中,看到如下表示添加成功。..._最好用的 modebus调试工具