电力电子技术
直播中

刘柳

7年用户 198经验值
私信 关注
[问答]

STM32内部通信功能有哪些?

STM32内部通信功能







回帖(7)

杨晓静

2020-12-29 10:11:12
  单片机的内部重要功能,重要功能是可以让单片机高效完成工作任务。但是重要功能所能做的只是通过GPIO读取逻辑电平,用ADC采集模拟电压。所做的工作都是些采集、控制之类。可是随着单片机系统的功能越来越多,有一些功能的实现是通过专用的芯片和模块来完成的。如果芯片和模块与单片机之间需要交换的数据太多,那么通过GPIO端口简单的高低电平是不够用的。这时就需要在芯片和单片机之间做专门用于通信的接口,虽然通信接口也是输入输出逻辑电平,但是它们都按照一个固定的格式规范来通信。这种通信的格式规范叫“通信协议”,针对不同的场合和应用需要,很多行业协会或大公司都会做出自己的通信协议,每一种协议都会有自己的名字。比如飞利浦公司做出了“I2C总线协议”,英特尔公司联合多家同行发布了“USB接口协议”。这些公司不仅设计出通信协议,还会把它们用在自己生产的芯片上。比如飞利浦旗下的NXP公司生产的LM75温度传感器,就使用了自家的I2C总线做为通信接口。由于行业巨头的引领,很多芯片厂商都用各种通信协议来生产芯片,很多单片机公司(包括ST公司)都会把最常用的通信协议加入到单片机内部。单片机用户想外接芯片时就能很方便地完成通信的开发。单片机与电脑的通信,其本质也是用某种通信协议来完成的。
  每一种通信功能都包括硬件和软件两个层面。在硬件上的是通信接口,即通信需要几条连接线,单片机与芯片之间怎样连接。在软件上的是协议规范,也就是以什么样的逻辑电平方式通信。比如发送高电平代表什么,连发3个高电平代表什么,只有收发双方使用相同的规范,通信都能进行。接下来我们只从硬件层面介绍各通信功能的特性和电路连接,待讲到编程开发的时候再讲协议规范的部分。各通信功能没有高低贵贱之分,它们是依不同的场合和应用而设计的,各有各的优势。本篇只要先了解它们即可,今后会着重学习它们的使用。本篇的最后还要讲CRC校验、芯片ID两个功能,它们与通信功能无关,只是顺便一讲。CRC校验和芯片ID比较少用,学习起来也非常简单。
  
  【图1】数据手册第1页中的通信功能描述
举报

尚继鹏

2020-12-29 10:11:31
  【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总线电路连接示意图
举报

王秀珍

2020-12-29 10:11:48
  【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串口电路连接示意图
举报

李秦

2020-12-29 10:12:06
  【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总线电路连接示意图
举报

更多回帖

发帖
×
20
完善资料,
赚取积分