完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
7个回答
|
|
单片机的内部重要功能,重要功能是可以让单片机高效完成工作任务。但是重要功能所能做的只是通过GPIO读取逻辑电平,用ADC采集模拟电压。所做的工作都是些采集、控制之类。可是随着单片机系统的功能越来越多,有一些功能的实现是通过专用的芯片和模块来完成的。如果芯片和模块与单片机之间需要交换的数据太多,那么通过GPIO端口简单的高低电平是不够用的。这时就需要在芯片和单片机之间做专门用于通信的接口,虽然通信接口也是输入输出逻辑电平,但是它们都按照一个固定的格式规范来通信。这种通信的格式规范叫“通信协议”,针对不同的场合和应用需要,很多行业协会或大公司都会做出自己的通信协议,每一种协议都会有自己的名字。比如飞利浦公司做出了“I2C总线协议”,英特尔公司联合多家同行发布了“USB接口协议”。这些公司不仅设计出通信协议,还会把它们用在自己生产的芯片上。比如飞利浦旗下的NXP公司生产的LM75温度传感器,就使用了自家的I2C总线做为通信接口。由于行业巨头的引领,很多芯片厂商都用各种通信协议来生产芯片,很多单片机公司(包括ST公司)都会把最常用的通信协议加入到单片机内部。单片机用户想外接芯片时就能很方便地完成通信的开发。单片机与电脑的通信,其本质也是用某种通信协议来完成的。
每一种通信功能都包括硬件和软件两个层面。在硬件上的是通信接口,即通信需要几条连接线,单片机与芯片之间怎样连接。在软件上的是协议规范,也就是以什么样的逻辑电平方式通信。比如发送高电平代表什么,连发3个高电平代表什么,只有收发双方使用相同的规范,通信都能进行。接下来我们只从硬件层面介绍各通信功能的特性和电路连接,待讲到编程开发的时候再讲协议规范的部分。各通信功能没有高低贵贱之分,它们是依不同的场合和应用而设计的,各有各的优势。本篇只要先了解它们即可,今后会着重学习它们的使用。本篇的最后还要讲CRC校验、芯片ID两个功能,它们与通信功能无关,只是顺便一讲。CRC校验和芯片ID比较少用,学习起来也非常简单。 【图1】数据手册第1页中的通信功能描述 |
|
|
|
【I2C总线】
I2C总线(读做“I方C”或“I2C”)是飞利浦公司发布了一款通信总线标准。所谓总线是指在一线数据线上同时并联多个设备,设备是指连接在通信线上的芯片或模块。在I2C总线上的设备分为主设备和从设备,每一组I2C总线上只能有1个主设备,主设备是主导通信的,它能主动读取各从设备上的数据。而从设备只能等待主设备对自己读写,如果主设备无操作,从设备自已不能操作总线。I2C总线理论上可挂接几百个从设备,每个从设备都有一个固定的7位或10位从设备地址,相当于身份证号码。主机想读写哪个从设备就向所有从设备发送一个从设备地址,只有号码一致的从设备才会回应主设备。 如【图2】所示,STM32单片机在I2C总线上是主设备,3个I2C设备即是从设备。I2C总线由SCL和SDA两条数据线构成,SCL是总线的时钟线,用于主设备与从设备之间的计数同步。SDA是总线的数据线,用于收发数据。另外主设备和从设备都必须共地(GND连在一起)。I2C总线的通信速度分3档,低速模式可达100KHz,快速模式可达400KHz,高速模式可达3.4MHz。但是在实际使用中I2C在快速和高速模式下都不稳定,经常出现总线出错卡死的问题。所以目前I2C总线主要应用在单片机周边芯片或模块的低速通信,也就是近距离低速通信。I2C的优点是协议简单易学,相关的芯片模块成本低,在只占用2个IO端口的情况下可挂接上百个从设备。目前有很多EEPROM存储器、温度传感器、RTC时钟、气压传感器等都使用I2C总线做通信接口。 STM32F103单片机内部有2个I2C总线控制器,都支持DMA功能。在硬件上完成了I2C的通信协议,用户只需要在指定的I2C寄存器中写入从设备的地址和要读写的数据就行了,余下的工作自动完成。经过我实验测试,STM32硬件I2C总线工作在100KHz以下时,通信非常稳定,当大于100KHz就会出现错误。但这个速度已经够用了,如果你需要高速通信,那还是要换用SPI总线。关于I2C的通信时序与编程方法,我会在后面讲到编程开发再细讲。 【图2】I2C总线电路连接示意图 |
|
|
|
【USART串口】
接下来说单片机中最常用的USART串口,USART串口的协议相比于I2C要简单很多,它没有地址的概念,也没有主设备、从设备的区别,用户可以自己定义地址和主从,不定义也可以,完全自由开放。正因为USART本身的协议简单,硬性规定少,所以它有很好的扩展性。如【图3】所示,USART串口可以有3种常用的通信方式。最基本的是TTL电平直接连接,多用于单片机与带有USART串口的模块通信。比如WIFI模块、GPS模块、蓝牙模块都支持USART串口。另外它还常用于单片机与电脑的通信,今后我们要用电脑给单片机下载程序,就是通过USART串口。 还有一种基于USART串口的扩展接口,叫RS232。它用于工业控制类设备的通信接口,常见于电脑和工控设备之间的通信。比如电脑与PLC(工控常用的可编程控制器)之间的通信就是RS232。RS232接口并没有改变USART串口的协议规范,而是通过专用的RS232转换芯片,把TTL的5V电平转换成了正负12V电平。因为电平电压的升高,通信的距离和稳定性都有所提高。RS232的连接线可达20米长,在干扰众多的工业场合使用依然稳定。但是随着工业技术的发现,20米的距离已经满足不了需要,于是市场上又出来了性能更好的RS485接口。RS485的通信线长度可达1000米,而且传输速度还要比RS232快很多。虽然RS232和RS485都可以挂接多个设备,可是因为RS232的通信距离太短,20米的距离内挂多个设备的意义不大。所以RS232多用于一对一通信,而RS485被用于多个设备挂接的总线,当然也可以一对一通信。RS485的应用非常广泛,高层住宅和商场里的电梯直梯就是用RS485连接各楼层,控制叫梯和显示楼层信息。是属于非常成熟的通信接口之一。但不论如何,RS232和RS485的协议还是USART,本质上是一个功能的不同扩展。STM32单片机内部只有支持USART协议的TTL电平的接口,如果想使用RS232或RS485需要外接一个芯片才能实现。【图3】所示是USART串口的三种通信形式。 STM32F103单片机上有3个USART串口,都支持DMA功能。其中USART1的速度可达4.5MB/S,其他可达2.5MB/S,算是相当快的速度。在8051单片机中也有一种叫UART的串口,少了一个S,它们是什么关系呢?其实USART的全称是同步/异步收发器,而UART是异步收发器,它们之间差了一个“同步”,USART接口比UART多了一个“USART_CK”的同步时钟线,可以同步时钟通信,但这个功能很少用到,所以它们在应用上并没有什么差别。 【图3】USART串口电路连接示意图 |
|
|
|
【SPI总线】
SPI和I2C一样是一种总线。SPI总线也有主设备和从设备之分,单片机是主设备,各种周边芯片是从设备。SPI和I2C一样是板级总线,也就是只能在PCB板上近距离通信,而不能引出导线到较远的距离。SPI最大的优势是有很高的通信速度,而且在高速下还能稳定工作,这是I2C所不能的。之所以SPI有如此的速度优势,正是因为其没有采用地址的概念,不在通信数据里放入地址信息,而是使用硬件来选择总线上的设备。每个SPI从设备都有一条开关控制线与主设备(单片机)独立连接(【图4】中的CS线)。当主设备想与哪个从设备通信时,只要开启那个从设备的开关控制线,总线上就只有这个设备是开启的,总线变成了一对一通信。正是用硬件选择从设备才让SPI的协议简单、速度飞快。 SPI速度快的另一个原因是全双工。全双工的意思是总线在通信时能同时收发数据。而I2C总线是半双工,即不能同时收发。如果把总线通信比喻成两人对话,半双工状态就是我说你听,或者你听我说,同一时间只有一人在说。全双工状态就是两个人同时说话,又同时听对方讲话。这样的对话效率要高很多,只可惜人脑没有这么快的反应,生活中也看不到这样的对话。但是单片机能全双工,所以全双工的SPI在速度上很难被其他总线超越。 STM32F103单片机上有2个SPI总线,最大速度可达18MB/S,而且还支持DMA功能和SD卡读写功能。我们常见的SD卡(或TF卡)都支持SPI模式,可以用SPI总线直接读写卡上数据。SPI总线在高速通信上有非常大的优势,只可惜受到控制从设备的I/O端口数量的限制,总线上不能挂接太多从设备。持讲到SPI编程开发时,再对其使用性能做进一步讲解吧。 【图4】SPI总线电路连接示意图 |
|
|
|
【CAN总线】
CAN总线是一种工业控制、汽车电子上常用的高级总线,之所以说它高级是因为CAN总线的功能复杂且智能。【图5】所示是CAN总线的电路连接示意图,CAN总线只需要两条导线,理论上可以连接无限多的设备,每一个设备即可做主设备也可做从设备。CAN总线的通信距离可达10千米,速度可达1MB/S。听上去好像速度照SPI的18MB/S差很远,但CAN是远程通信,1MB/S已经很优秀了。另外,CAN总线的功能也很强大,当总线上的某个设备损坏时,总线可以把这个设备从总线上断开。在我看来,CAN总线算是RS485总线的升级版,RS485是开放的、原始的底层协议,虽然简单但功能太少。CAN总线在加入了区分总线上设备的标识附概念,也加入了更复杂的协议规范。这让用户在使用CAN时更方便了,不用自己设计总线地址之类的事情。所以CAN总线的工作很稳定,在汽车行业中被用于车内各电子设备的通信。 STM32F103单片机有1个CAN总线接口,但必须外加一片CAN收发器芯片(用于电平转换)才能正常使用。由于CAN总线的知识太多也太复杂,所以这里不能讲解太多,有兴趣的朋友可以自己研究,未来讲到CAN总线通信编程开发的时候还会细讲。 【图5】CAN总线电路连接示意图 |
|
|
|
【USB接口】
USB接口是大家再熟悉不过的了,所有的电脑上都会有至少1个USB接口,因为USB接口正是为电脑与周边设备通信而设计的。比如U盘、鼠标、打印机。而STM32F103单片机上有1个USB 2.0接口,它被定义为USB从设备,也就是说它只能用来与电脑连接来做电脑周边设备,比如用STM32做鼠标或打印机。USB虽然不是总线,但它和CAN总线一样都有底层非常复杂的通信协议,但在用户使用层面上又变得较简单。【图6】是USB接口的电路连接示意图,从中可以看出USB有2条数据线,另外还有2条电源线,可以由电脑端给USB设备(单片机)供电。USB接口与之前讲到的USART串口都能与电脑通信,可是USB接口有明确的主从关系,单片机只能做为电脑的从设备。而USART串口的通信上没有主从关系,电脑与单片机的通信是平等的,任何一方都能主动发出数据。 【图6】USB接口电路连接示意图 |
|
|
|
【CRC校验和芯片ID】
说完了通信功能,再补充两个附加功能。它们是CRC校验和芯片ID。CRC校验是一种用于数据校对的计算器。上面讲过的所有通信功能都可以使用CRC功能。CRC能验证通信过程中的数据有没有出现错误。要知道任何通信在过程中都可能出现错误。接收端要怎么判断收到的数据是没有错误的呢?最简单的方法是接收端把数据原原本本地再发回给发送端,如果接收端发回的数据与发送端发出的数据完全一致,那就表示数据正确。可惜这种方法太麻烦了,每一组数据都要来回发2次,浪费了时间降低了速度。于是开发者们研究出一种算法,它能把一组数据按一个公式计算得出一个短小的值,这种算法就是CRC。接收端只要比对这个值是否正确,就能判断整组数据的正确性。 【图7】所示是STM32F103单片机的CRC校验应用原理示意图。通过这张图能很快理解CRC的工作过程。设备1是数据发送端,它在发出数据之前先把这组数据分解成每32位一组送入到CRC功能。当整组数据依次放入后,CRC就会得出一个32位的计算结果。这时设备1再把整组数据和这个CRC结果一同发送给设备2,设备2再把整组数据通过自己的CRC功能进行计算,也会得到一个结果。然后设备2再把自己CRC结果与设备1发来的CRC结果进行比较,一致则表示数据正确。CRC校验虽然也有可能出现错误,但这种错误的概率非常微小。CRC校验功能常被用在对数据正确性要求很高的地方,比如射频卡、无线通信。 芯片ID功能说起来非常简单,就是每一片STM32单片机内部都有一组96位(二进制)全球唯一的序列号。它就像每个人的身份证号码一样,是唯一的。别小看这组ID序列号,它的做用可不小。用户可以用它来当做自己产品的序列号,而不需要再单独设计。它能作为一种加密方法,还能防止用户的程序被复制到其他芯片上运行。日后我们用到的时候再来细讲。 【图7】CRC校验应用原理示意图 【功能总结】 至此我们讲完了STM32F103单片机数据手册第1页上所有的内部功能。我们了解了每个功能的特性和用途,可是各功能之间又是什么关系?它们是怎么联系在一起的呢?这就需要用全局的角度回看所学的知识。【图8】是在数据手册中的一张单片机内部功能关系框图,【图9】是我加入了中文说明的关系图,大家可以对照这两张图来看。图中用方框列出了各功能,并用空心箭头连接它们。单片机内部功能是通过内部总线连接的,内部总线不同与上文讲过的通信总线,内部总线只用于内部功能之间的通信。而所有内部功能又根据它们的特性被分别连接在不同性能的内部总线上。例如GPIO、TIM1、SPI1、USART、ADC这种需要高速操作的功能都被连接在APB2高速内部总线上(图左下方),一些对操作速度要求不高的功能被连接在APB1低速内部总线上(图右下方)。另外ARM内核与FLASH、SRAM的关系更密切,它们有专用的内部总线彼此连接。【图9】当中有叹号的部分是让大家注意灰色背景处的电源特性。标有VDD的是逻辑电源供电,VDDA的是模拟电源供电,VBAT的是备用电池供电。【图9】还用不同的方框颜色区分核心功能(红色)、重要功能(绿色)、通信功能(蓝色)。图中紫色的方框表示内部总线。 仔细研究这张框图,彻底了解所有内部功能之间的关系,可以帮助我们清晰地认识这款单片机,再学习某些知识时会有更深刻的理解和记忆。下一讲开始,我们将介绍STM32单片机的实践操作部分,会讲到开发环境的建立、固件库的安装、ISP程序下载等一系列内容。但还是请大家认真地复习理论知识,基础决定上层建筑,理论是打基础的过程,不要忽略。 【图8】STM32F10x的功能关系框图 【图9】加入注释的功能关系框图 |
|
|
|
只有小组成员才能发言,加入小组>>
801 浏览 1 评论
999 浏览 1 评论
12433 浏览 0 评论
5885 浏览 3 评论
17675 浏览 6 评论
996浏览 1评论
971浏览 1评论
809浏览 1评论
3857浏览 1评论
1003浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 19:24 , Processed in 0.878080 second(s), Total 60, Slave 51 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号