USART(RS232/422/485)、I2C、SPI、CAN、USB总线

9 篇文章 7 订阅
订阅专栏
8 篇文章 6 订阅
订阅专栏

【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串口电路连接示意图

 

 

RS-232、RS422 和 RS-485 区别

一、串口简介
        RS-232、RS-422 与 RS-485 都是串行数据接口标准,最初都是由电子工业协会(EIA)制订并发布的,RS-232 在1962 年发布,命名为 EIA-232-E,作为工业标准,以保证不同厂家产品之间的兼容。RS-422 由 RS-232 发展而来,它是为弥补 RS-232 之不足而提出的。为改进 RS-232 通信距离短、速率低的缺点,RS-422 定义了一种平衡通信接口,将传输速率提高到 10Mb/s,传输距离延长到 4000 英尺(速率低于 100kb/s 时),并允许在一条平衡总线上连接最多 10 个接收器。RS-422 是一种单机发送、多机接收的单向、平衡传输规范,被命名为 TIA/EIA-422-A 标准。为扩展应用范围,EIA 又于 1983 年在 RS-422 基础上制定了 RS-485标准,增加了多点、双向通信能力,即允许多个发送器连接到同一条总线上,同时增加了发送器的驱动能力和冲突保护特性,扩展了总线共模范围,后命名为 TIA/EIA-485-A 标准。由于 EIA 提出的建议标准都是以“RS”作为前缀,所以在通讯工业领域,仍然习惯将上述标准以 RS 作前缀称谓。

        RS-232、RS-422 与RS-485 标准只对接口的电气特性做出规定,而不涉及接插件、电缆或应用层通信协议,在此基础上用户可以建立自己的高层通信协议。因此在视频界的应用,许多厂家都建立了一套高层通信协议,或公开或厂家独家使用。如录像机厂家中的Sony 与松下对录像机的 RS-422 控制协议是有差异的,视频服务器上的控制协议则更多了,如 Louth、Odetis协议是公开的,而ProLINK 则是基于 Profile 上的。

二、RS-232 串行接口标准
        目前 RS-232 是 PC 机与通信工业中应用最广泛的一种串行接口。RS-232 被定义为一种在低速率串行通讯中增加通讯距离的单端标准。RS-232 采取不平衡传输方式,即所谓单端通讯。
        收、发端的数据信号是相对于信号地,如从 DTE 设备发出的数据在使用 DB25 连接器时是 2 脚相对 7 脚(信号地)的电平。典型的 RS-232 信号在正负电平之间摆动,在发送数据时,发送端驱动器输出正电平在+5~+15V,负电平在-5~-15V 电平。当无数据传输时,线上为 TTL,从开始传送数据到结束,线上电平从 TTL 电平到 RS-232 电平再返回 TTL 电平。接收器典型的工作电平在+3~+12V 与-3~-12V。由于发送电平与接收电平的差仅为 2V至 3V 左右,所以其共模抑制能力差,再加上双绞线上的分布电容,其传送距离最大为约 15米,最高速率为 20kb/s。RS-232 是为点对点(即只用一对收、发设备)通讯而设计的,其驱动器负载为 3~7kΩ。所以RS-232 适合本地设备之间的通信。其有关电气参数参见下表。

三、RS-422 与 RS-485 串行接口标准

1. 平衡传输
       RS-422、RS-485 与 RS-232 不一样,数据信号采用差分传输方式,也称作平衡传输,使用一它对双绞线,将其中一线定义为 A,另一线定义为 B。通常情况下,发送驱动器A、B 之间的正电平在+2~+6V,是一个逻辑状态,负电平在-2~6V,是另一个逻辑状态。另有一个信号地C,在RS-485 中还有一“使能”端,而在RS-422中这是可用可不用的。“使能”端是用于控制发送驱动器与传输线的切断与连接。当“使能”端起作用时,发送驱动器处于高阻状态,称作“第三态”,即它是有别于逻辑“1”与“0”的第三态。
       接收器也作与发送端相对的规定,收、发端通过平衡双绞线将A-A 与B-B 对应相连,当在收端AB 之间有大于+200mV 的电平时,输出正逻辑电平,小于-200mV 时,输出负逻辑电平。接收器接收平衡线上的电平范围通常在200mV 至6V 之间。

2.RS-422 电气规定
        RS-422 标准全称是“平衡电压数字接口电路的电气特性”,它定义了接口电路的特性。实际上还有一根信号地线,共5 根线。由于接收器采用高输入阻抗和发送驱动器比RS232更强的驱动能力,故允许在相同传输线上连接多个接收节点,最多可接10 个节点。即一个主设备(Master),其余为从设备(Salve),从设备之间不能通信,所以RS-422 支持点对多的双向通信。接收器输入阻抗为4k,故发端最大负载能力是10×4k+100Ω(终接电阻)。RS-422 四线接口由于采用单独的发送和接收通道,因此不必控制数据方向,各装置之间任何必须的信号交换均可以按软件方式(XON/XOFF 握手)或硬件方式(一对单独的双绞线)实现。
        RS-422 的最大传输距离为4000 英尺(约1219 米),最大传输速率为10Mb/s。其平衡双绞线的长度与传输速率成反比,在100kb/s 速率以下,才可能达到最大传输距离。只有在很短的距离下才能获得最高速率传输。一般100 米长的双绞线上所能获得的最大传输速率仅为1Mb/s。
        RS-422 需要一终接电阻,要求其阻值约等于传输电缆的特性阻抗。在矩距离传输时可不需终接电阻,即一般在300 米以下不需终接电阻。终接电阻接在传输电缆的最远端。
RS-422 有关电气参数见表 1

3.RS-485 电气规定
       由于RS-485 是从RS-422 基础上发展而来的,所以RS-485 许多电气规定与RS-422 相仿。如都采用平衡传输方式、都需要在传输线上接终接电阻等。RS-485 可以采用二线与四线方式,二线制可实现真正的多点双向通信。而采用四线连接时,与RS-422 一样只能实现点对多的通信,即只能有一个主(Master)设备,其余为从设备,但它比RS-422 有改进,无论四线还是二线连接方式总线上可多接到32 个设备。
        RS-485 与RS-422 的不同还在于其共模输出电压是不同的,RS-485 是-7V 至+12V 之间,而RS-422 在-7V 至+7V 之间,RS-485 接收器最小输入阻抗为12k,RS-422 是4k;RS-485满足所有RS-422 的规范,所以RS-485 的驱动器可以用在RS-422 网络中应用。
RS-485 有关电气规定参见表1。
        RS-485 与RS-422 一样,其最大传输距离约为1219 米,最大传输速率为10Mb/s。平衡双绞线的长度与传输速率成反比,在100kb/s 速率以下,才可能使用规定最长的电缆长度。只有在很短的距离下才能获得最高速率传输。一般100 米长双绞线最大传输速率仅为1Mb/s。

        RS-485 需要2 个终接电阻,其阻值要求等于传输电缆的特性阻抗。在矩距离传输时可不需终接电阻,即一般在300 米以下不需终接电阻。终接电阻接在传输总线的两端。

 

RS-485 通讯协议(自定义应用层协议)

        RS-485 标准只对接口的电气特性做出规定,而不涉及接插件、电缆或协议;因此,用户需要在RS-485 应用网络的基础上建立自己的应用层通信协议。由于RS-485 标准是基于PC 的UART 芯片上的处理方式,因此,其通讯协议也规定了串行数据单元的格式(8-N-1 格式):1 位逻辑0 的起始位,6/7/8 位数据位,1 位可选择的奇ODD)/偶(EVEN)校验位,1/2 位逻辑1 的停止位。

        下面将分别对ModBus 协议(RTU 模式)、多功能电能表通讯规约(DL/T645-1997)进行简单介绍,便于大家对应用层通信协议有一个基本的概念与理解
1.4.1 ModBus 协议(RTU 模式)
        以下资料摘录于Modbus 协议(RTU 模式)的一部分,介绍了Modbus RTU 协议的基本构成、主要特点、参数规定;便于我们理解一个通讯协议的基本模式与要求。关于详细的ModBus 协议,用户可以从ModBus-IDA 协会 (www.modbus.org) 网站下载具体的内容。

1. 查询—响应周期
ModBus 协议遵循“查询—响应”模式,如图 1-23 所示。
􀂾 查询:
        查询消息中的功能代码告之被选中的从设备要执行何种功能。数据段包含了从设备要执行功能的任何附加信息。例如功能代码03 是要求从设备读保持寄存器并返回它们的内容。数据段必须包含要告之从设备的信息:从何寄存器开始读及要读的寄存器数量。错误检测域为从设备提供了一种验证消息内容是否正确的方法。
􀂾 响应
        如果从设备产生一正常的响应,在响应消息中的功能代码是在查询消息中的功能代码的响应。数据段包括了从设备收集的资料:象寄存器值或状态。如果有错误发生,功能代码将被修改以用于指出响应消息是错误的,同时数据段包含了描述此错误信息的代码。错误检测域允许主设备确认消息内容是否可用。

2. RTU 模式

        当控制器设为在Modbus 网络上以RTU(远程终端单元)模式通信,在消息中的每个8Bit 字节包含两个4Bit 的十六进制字符。这种方式的主要优点是:在同样的波特率下,可比ASCII 方式传送更多的数据。
        代码系统:
􀁺 8 位二进制,十六进制数0...9,A...F
􀁺 消息中的每个8 位域都是一个两个十六进制字符组成
       每个字节的位:
􀁺 1 个起始位
􀁺 8 个数据位,最小的有效位先发送
􀁺 1 个奇偶校验位,无校验则无
􀁺 1 个停止位(有校验时),2 个Bit(无校验时)
        错误检测域:
􀁺 CRC(循环冗长检测)

3. RTU 帧
        使用RTU 模式,消息发送至少要以3.5 个字符时间的停顿间隔开始。在网络波特率下多样的字符时间,这是最容易实现的(如图 1-24 的T1-T2-T3-T4 所示)。传输的第一个域是设备地址。可以使用的传输字符是十六进制的0...9,A...F。网络设备不断侦测网络总线,包括停顿间隔时间。当第一个域(地址域)接收到,每个设备都进行译码以判断是否发往自己的。在最后一个传输字符之后,一个至少3.5 个字符时间的停顿标定了消息的结束。一个新的消息可在此停顿后开始。
         整个消息帧必须作为一连续的流转输。如果在帧完成之前有超过1.5 个字符时间的停顿,接收设备将刷新不完整的消息并假定下一字节是一个新消息的地址域。同样地,如果一个新消息在小于3.5 个字符时间内开始,接收的设备将认为它是前一消息的延续。这将导致一个错误,因为在最后的CRC 域的值不可能是正确的。一典型的消息帧如下图 1-24 所示:

4. 地址
      地址0 是用作广播地址,以使所有的从设备都能认识。当Modbus 协议用于更高水平的网络,广播可能不允许或以其它方式代替。

5. 响应
       当从设备响应时,它使用功能代码域来指示是正常响应(无误)还是有某种错误发生(称作异议响应)。对正常响应,从设备仅响应相应的功能代码。对异议响应,从设备返回一等同于正常代码的代码,但最重要的位置为逻辑1。
例如:从一个主设备发往从设备的消息要求读一组保持寄存器,将产生如下功能代码:
0 0 0 0 0 0 1 1 (十六进制03H)
对正常响应,从设备仅响应同样的功能代码。对异议响应,它返回:
1 0 0 0 0 0 1 1 (十六进制83H)
        除功能代码因异议错误作了修改外,从设备将一独特的代码放到响应消息的数据域中,这能告诉主设备发生了什么错误。主设备应用程序得到异议响应后,典型的处理过程是重发消息,或者诊断发自从设备的消息并报告给操作员。
        从主设备发给从设备消息的数据域包含附加的信息:从设备必须用于进行执行由功能代码所定义的行为。这包括了象不连续的寄存器地址,要处理项的数目,域中实际数据字节数。
        例如,如果主设备需要从设备读取一组保持寄存器(功能代码03),数据域指定了起始寄存器以及要读的寄存器数量。如果主设备写一组从设备的寄存器(功能代码10 十六进制),数据域则指明了要写的起始寄存器以及要写的寄存器数量,数据域的数据字节数,要写入寄存器的数据。
        关于详细的ModBus 协议,用户可以从ModBus-IDA 协会 (www.modbus.org) 网站下载具体的协议内容。

自定义协议可参考通讯帧格式:

RS-485参考电路:

RE引脚:  接收器输出使能(低电平有效)。DE引脚: 发送器输出使能(高电平有效)。可以直接通过MCU的IO端口控制。

 

【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总线电路连接示意图

 

物理层

(1) 它只使用两条总线线路,一条双向串行数据线(SDA) ,一条串行时钟线 (SCL)。
(2) 每个连接到总线的设备都有一个独立的地址,主机可以利用这个地址进行不同设备之间的访问
(3) 多主机同时使用总线时,为了防止数据冲突,会利用仲裁方式决定由哪个设备占用总线。
(4) 具有三种传输模式:标准模式传输速率为100kbit/s ,快速模式为400kbit/s ,高速模式下可达 3.4Mbit/s,但目前大多I2C设备尚不支持高速模式。
(5) 片上的滤波器可以滤去总线数据线上的毛刺波 保证数据完整 。
(6) 连接到相同总线的 IC 数量受到总线的最大电容 400pF 限制 。

协议层
       I2C的协议包括起始和停止条件、数据有效性、响应、仲裁、时钟同步和地址广播等环节,由于我们使用的是STM32集成的硬件I2C接口,并不需要用软件去模拟SDA和SCL线的时序,所以野火直接以I2C通讯的流程为大家讲解。见图 12-2 主机写数据到从机。


                                                              图 12 -2 主机 写数据到从机 

                                                                     图 12 -3 主机由从中读数据 


图例:

  数据由主机传输至从机:                    S : 传输开始信号        SLAVE_ADDRESS: 从机地址  
      数据由从机传输至主机  :                 R/W ——: 传输方向选择位,1为读,0为写

                                                                                A/A —— : 应答或非应答信号                P : 停止传输信号
        这两幅图表示的是主机和从机通讯时,SDA线的数据包序列。其中S表示由主机的I2C接口产生的传输起始信号(S),这时连接到I2C总线上的所有从机都会接收到这个信号。
       起始信号产生后,所有从机就开始等待主机紧接下来广播 的从机地址信号 (SLAVE_ADDRESS),在I2C总线上,每个设备的地址都是唯一的。当主机广播的地址与某个设备地址相同时,这个设备就被选中了,没被选中的设备将会忽略之后的数据信号。根据I2C协议,这个从机地址可以是7位或10位。
        在地址位之后,是传输方向的选择位,该位为0时,表示后面的数据传输方向是由主机传输至从机。该位为1时,则相反。
从机接收到匹配的地址后,主机或从机会返回一个应答(A)或非应答(A——)信号,只有接收到应答信号后,主机才能继续发送或接收数据。
        若配置的方向传输位为写数据,广播完地址,接收到应答信号后,主机开始正式向从机传输数据(DATA),数据包的大小为8位,主机每发送完一个数据,都要等待从机的应答信号(A),重复这个过程,可以向从机传输N个数据,这个N没有大小限制。当数据传输结束时,主机向从机发送一个停止传输信号(P),表示不再传输数据。
        若配置的方向传输位为读数据,广播完地址,接收到应答信号后,从机开始向主机返回数据(DATA),数据包大小也为8位,从机每发送完一个数据,都会等待主机的应答信号(A),重复这个过程,可以返回N个数据,这个N也没有大小限制。当主机希望停止接收数据时,就向从机返回一个非应答信号(A——),则从机自动停止数据传输。

 

 

【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总线电路连接示意图

 

 

 

        SPI协议(Serial Peripheral Interface),即串行外围设备接口,是一种高速全双工的通信总线,它由摩托罗拉公司提出,当前最新的为V04.01-2004版。它被广泛地使用在ADC、LCD等设备与MCU间通讯的场合。

        SPI总线包含4条总线,分别为S——S——、SCK、MOSI、MISO。它们的作用介绍如下:
(1) S——S—— ( Slave Select):片选信号线,当有多个SPI设备与MCU相连时,每个设备的这个片选信号线是与MCU单独的引脚相连的,而其它的SCK、MOSI、MISO线则为多个设备并联到相同的SPI总线上,见图 13-1。当S——S——信号线为低电平时,片选有效,开始SPI通讯。

(2) SCK (Serial Clock):时钟信号线,由主通讯设备产生,不同的设备支持的时钟频率不一样,如STM32的SPI时钟频率最大为fpclk/2。

(3) MOSI (Master Output, Slave Input):主设备输出/从设备输入引脚。主机的数据从这条信号线输出,从机由这条信号线读入数据,即这条线上数据的方向为主机到从机。
(4) MISO(Master Input, Slave Output):主设备输入/从设备输出引脚。主机从这条信号线读入数据,从机的数据则由这条信号线输出,即在这条线上数据的方向为从机到主机。

 


 

SPI模式
根据SPI时钟极性(CPOL)和时钟相位(CPHA) 配置的不同,分为四种SPI模式。


        时钟极性是指SPI通讯设备处于空闲状态时(也可以认为这是SPI通讯开始时,即S——S——线为低电平时),SCK信号线的电平信号。CPOL=0时, SCK在空闲状态时为低电平,CPOL=1时,则相反,即SCK在空闲状态时为高电平。
        时钟相位是指数据的采样的时刻,当CPHA=0时,MOSI或MISO数据线上的信号将会在SCK时钟线的奇数边沿被采样。当CPHA=1时,数据线在SCK的偶数边沿采样。见图 13-2

 

我们来分析这个CPHA=0的时序图。
首先,由主机把片选信号线S——S——拉低,即为图中的S——S——(O)时序,意为主机输出,S——S——(I)时序实际上也是S——S——线信号,S——S——(I)时序表示从机接收到S——S——片选被拉低的信号。
在S——S——被拉低的时刻,SCK分为两种情况,若我们设置为CPOL=0,则SCK时序在这个时刻为低电平,若设置为CPOL=1,则SCK在这个时刻为高电平。
无论CPOL=0还是=1,因为我们配置的时钟相位CPHA=0,在采样时刻的时序中我们可以看到,采样时刻都是在SCK的奇数边沿(注意奇数边沿有时为下降沿,有时为上升沿)。
因此,MOSI和MISO数据线的有效信号在SCK的奇数边沿保持不变,这个信号将在SCK奇数边沿时被采集,在非采样时刻,MOSI和MISO的有效信号才发生切换。
对于CPHA=1的情况也很类似,但数据信号的采样时刻为偶数边沿,其时序图见图 13-3。

使用SPI协议通讯时,主机和从机的时序要保持一致,即两者都选择相同的SPI模式。

根据FLASH的存储原理,在写入数据前,要先对存储区域进行擦除。

 

【CAN总线】

        CAN总线是一种工业控制、汽车电子上常用的高级总线,之所以说它高级是因为CAN总线的功能复杂且智能。【图5】所示是CAN总线的电路连接示意图,CAN总线只需要两条导线,理论上可以连接无限多的设备,每一个设备即可做主设备也可做从设备。CAN总线的通信距离可达10千米(速率低于5Kbps),速度可达1MbpS(通信距离小于40M)。听上去好像速度照SPI的18MB/S差很远,但CAN是远程通信,1MB/S已经很优秀了。另外,CAN总线的功能也很强大,当总线上的某个设备损坏时,总线可以把这个设备从总线上断开。在我看来,CAN总线算是RS485总线的升级版,RS485是开放的、原始的底层协议,虽然简单但功能太少。CAN总线在加入了区分总线上设备的标识附概念,也加入了更复杂的协议规范。这让用户在使用CAN时更方便了,不用自己设计总线地址之类的事情。所以CAN总线的工作很稳定,在汽车行业中被用于车内各电子设备的通信。

        STM32F103单片机有1个CAN总线接口,但必须外加一片CAN收发器芯片(用于电平转换)才能正常使用。由于CAN总线的知识太多也太复杂,所以这里不能讲解太多,有兴趣的朋友可以自己研究,未来讲到CAN总线通信编程开发的时候还会细讲。

   【图5】CAN总线电路连接示意图

 

       CAN是控制器局域网络(Controller Area Network, CAN)的简称,是由研发和生产汽车电子产品著称的德国BOSCH公司开发的,并最终成为国际标准(ISO11519)。是国际上应用最广泛的现场总线之一。

18.1.1. 物理层
与I2C、SPI等具有时钟信号的通讯方式不同,CAN通讯并不是以时钟信号来进行同步的。它只具有CAN_High和CAN_Low两条信号线,共同构成一组差分信号线,所以CAN是以差分信号的形式进行通讯的。见图 18-1。


                                               图18 1 CAN 闭环总线通讯网络
        图中的CAN通讯网络是遵循ISO11898标准的高速、短距离闭环网络,它的总线最大长度为40m,通信速度最高为1Mbps。还有一种是遵循ISO11519-2标准的低速远距离开环网络,它最大传输距离为1km,最高通讯速率为125kbps。
        从CAN的通讯网络图可以了解到, 它的通讯节点由一个CAN控制器,CAN收发器组成。如STM32的CAN接口即为CAN控制器,为了构成完整的节点,还要给它外接一个CAN收发器。
        在发送数据时, CAN控制器把要发送的二进制编码通过CAN_Tx线发送到CAN收发器,然后由收发器把这个普通的逻辑电平信号转化成差分信号,通过差分线CAN_High和CAN_Low线输出到CAN总线网络。在接收数据时,这个过程相反。

        差分信号是什么意思呢?即信号的逻辑0和逻辑1由两根差分信号线的电压差来表示。ISO 11898规定CAN协议中的逻辑1 (隐性电平)时,CAN_High和CAN_Low线上的电压均为2.5v,即它们的电压差Vh-Vl=0V。而在逻辑0(显性电平)中,CAN_High的电平为3.5V,CAN_Low线的电平为1.5V,即它们的电压差为Vh-VI=2V。
        如当CAN收发器从CAN_Tx线接收到来自CAN控制器的低电平信号时,它会将该信号转化,使CAN_High输出3.5V,同时CAN_Low输出1.5V,即显性电平。如同串口中的MAX3232,用作电平转换。CAN收发器的作用则是用作差分信号的转换。
         在CAN总线中,必须处于隐性电平(逻辑1)或显性电平(逻辑0)中的一个状态。假如有两个CAN通讯节点,在同一时间,一个输出隐性电平,另一个输出显性电平,总线的“线与”特性将使它处于显性电平状态,即可以认为显性具有优先的意味。

CAN参考电路图(120R为终端匹配电阻,首末节点加上即可)

 

【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】加入注释的功能关系框图

 

 

 

RS232、RS485、RS422UART、SCI、SPI、IIC、USB、TCPIP、CAN、LIN
weixin_33893473的博客
09-05 1552
串行通信和并行通信详解:https://wenku.baidu.com/view/89cdd0c5c0c708a1284ac850ad02de80d4d806ec.html UART:(UniversalAsynchronousReceiverTransmitter:通用异步收发器/异步串行通信口),是一种通用的串行数据总线,用于异步通信,支持全双工。它包括了RS232、RS499、RS4...
RS232与RS485时序分析
weixin_33696822的博客
09-11 2849
转载于:RS232,RS485波形分析   经常遇到初学者,对单片机串行通讯出了问题不知道如何办的情况。其实最有效的调试方法是用示波器观察收发数据的波形。通过观察波形可以确定以下情况:  是否有数据接收或发送 数据是否正确  波特率是否正确  一、串行数据的格式  异步串行数据的一般格式是:起始位+数据位+停止位,其中起始位1 位,数据位可以是5、6、7、8位,停...
RS232与RS485时序分析.docx
03-18
 经常遇到初学者,对单片机串行通讯出了问题不知道如何办的情况。其实最有效的调试方法是用示波器观察收发数据的波形。通过观察波形可以确定发送正确与否;
串口、COM口、UART口, TTL、RS-232、RS-485区别详解
热门推荐
qq_38842795的博客
05-25 2万+
串口、COM口、UART口是一种物理层面、机械层面的一个接口形式,串口:串口是一个泛称,UART、TTL、RS232、RS485都遵循类似的通信时序协议,因此都被通称为串口。 UART接口:通用异步收发器(Universal Asynchronous Receiver/Transmitter),UART是串口收发的逻辑电路,这部分可以独立成芯片,也可以作为模块嵌入到其他芯片里,单片机、SOC、PC里都会有UART模块。 COM口:特指台式计算机或一些电子设备上的D-SUB外形(一种连接器结构,VGA接口
RS422串口通信协议介绍和基础代码实现
最新发布
lj19990824的博客
06-25 1766
传输距离延长到4000英尺(约1219米),但需要注意的是,平衡双绞线的长度与传输速率成反比,因此在100kb/s速率以下,才可能达到最大传输距离。它使用两根数据线进行数据传输,一根线传输正向数据,另一根线传输负向数据,这种差分信号传输可以有效地抑制干扰信号,使数据传输更加稳定可靠。RS-485是在RS-422基础上发展而来的,增加了多点、双向通信能力,允许多个发送器连接到同一条总线上。RS-485与RS-422在电气特性上相似,但RS-485是半双工的,而RS-422是全双工的。
RS-232,USART的区别与STM32F407ZGT6 USART学习
qq_52785624的博客
03-30 2271
RS-232,USART的区别与STM32F407ZGT6 USART学习
YDOOK:STM32:STM中文参考手册 USART 通用同步异步收发器 原理框图详解
YDOOK
01-26 408
YDOOK:STM32:STM中文参考手册 USART 通用同步异步收发器 原理框图详解 1. 整体图: 2. IrDA SDR 编解码模块: 3. 读写操作:发送与接收数据寄存器: 4. CR1 2 3 与 SCLK: 5. 硬件数据流控制器: nRTS 与 nCTS: 6. 发送器 接收器 与中断控制器: 7. 传统波特率产生器与中断控制: 8. 框图上半部: 9. 框图下半部: ...
STM32成长记之USART--232串口通信
wenke8619的博客
08-13 8010
usart之232串口
RS-232C,I2C,USB,时序图 饺子皮
u011511146的专栏
08-13 3672
在嵌入式中,有多种接口,协议,下面我列出几种常用到的协议或者接口的相关信息,掌握它们,对嵌入式开发是非常非常重要的。 1.RS232C---串口数据标准--一般有25连引脚线,但其实用不到那么多,常用到9根,最简单只用到3根线 常用的9根线是  RTS/CTS----请求发送/清除发送流控制 RXD/TXD---接收数据/发送数据 DST/DTR-----数据终端就绪/数据设置就绪流控制
CAN总线 时序分析
weixin_45560089的博客
04-24 2940
can总线通信,在嵌入式设计中使用非常广泛,下面是本人在开发过程中对于can总线通信的一些理解,不到之处还望批评指正。 CAN总线原理图如下: 下面是在调试过程中示波器波形: 上面的是clk,下面的rxd,下面的数据解析为: 1 10111100111 11011110000110100101010101100000000 can总线数据分为 显性电平:0 隐性电平:1 从上面可以看出采...
MSP430通信方式,UARTSPII2C
05-18
### MSP430通信方式详解:UARTSPII2C #### 一、引言 MSP430是一款由德州仪器(TI)推出的超低功耗混合信号微控制器,以其高性能、低功耗的特点在众多应用领域受到青睐。在多处理器系统中,有效的通信机制对于...
MAX232与单片机典型连接电路图
12-10
串口的电平转换芯片MAX232与单片机的典型连接电路,经验证,可行
can总线的一个帧波形图
05-10
can总线的一个帧波形图
SPI总线协议及SPI时序图详解【转】
05-15
SPI总线是Motorola公司推出的三线同步接口,同步串行3线方式进行通信:一条时钟线SCK,一条数据输入线MOSI,一条数据输出线MISO;用于 CPU与各种外围器件进行全双工、同步串行通讯。SPI主要特点有:可以同时发出和接收串行数据;可以当作主机或从机工作;提供频率可编程时钟;发送结束中断标志;写冲突保护;总线竞争保护等。
什么是RS232接口
11-18
RS232接口是1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。   它的全名是“数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准”该标准规定采用一个25个脚的DB25连接器,对连接器的每个引脚的信号内容加以规定,还对各种信号的电平加以规定。DB25的串口一般只用到的管脚只有2(RXD)、3(TXD)、7(GND)这三个,随着设备的不断改进,现在DB25针很少看到了,代替他的是DB9的接口,DB9所用到的管脚比DB25有所变化,是2(RXD)、3(TXD)、5(GND)这三个。因此现在都把RS
CAN总线通信之详解数据帧
01-03
CAN总线通信的详解数据帧,详细介绍了Can 通信数据帧的格式和内容定义
小型化和低成本主导串行接口的选择
10-23
SPI总线通常比I2C具有更高的速度,但需要更多的I/O引脚。I2C则由于只需使用两个引脚(一根数据线和一根时钟线),因此适用于需要较少引脚的场合。 此外,还有更小型化的异步总线,如1-Wire®和UNI/O®总线,它们能...
STM32单片机FPGA毕设电路原理论文报告基于单片机的CAN与RS232转换器设计
03-16
STM32单片机内部集成了多种通信接口,如USARTSPII2C等,能够满足不同的通信需求。在本项目中,主要利用了STM32的USART接口来实现RS232通信功能。 #### CAN总线概述 CAN(Controller Area Network,控制器局域...
通用串行总线-串口与PC固定长度数据通信-任务实施.pptx
06-16
在深入讨论中,我们可以思考串行总线如何优化其性能,例如通过提高波特率来增加传输速率,或者探讨不同类型的串行总线协议(如SPII2C)在特定应用场景下的优劣。同时,也可以研究USB转串口模块的工作原理,以及...
usartuarti2cspi、can特点
10-25
USARTUARTI2CSPI、CAN都是常用的通信接口,它们各自有不同的特点和应用场景。 1. USART是一种串行通信接口,可以实现全双工通信,支持同步和异步传输,速度较快,适用于长距离通信,但需要使用专用的通信线路。 2. UART是一种串行通信接口,与USART类似,但只支持异步传输,速度较慢,适用于短距离通信,常用于单片机和计算机之间的通信。 3. I2C是一种双线制串行通信接口,适用于短距离通信,支持多主控和多从设备,具有较高的可靠性和灵活性,常用于连接各种集成电路和功能模块。 4. SPI是一种四线制串行通信接口,适用于短距离通信,具有高速传输和简单的硬件结构,常用于连接芯片和芯片之间的通信。 5. CAN是一种多线制串行通信接口,适用于长距离通信和高可靠性的数据传输,常用于汽车电子、工业控制等领域。
写文章

热门文章

  • (转载)0201 0402 0603 0805 1206焊盘封装尺寸 52339
  • STM32程序的烧录方式 与 ISP一键下载 26765
  • C语言中常用的几个头文件及库函数 (stdio.h ,string.h ,math.h ,stdlib.h) 23009
  • (转载)Altium Designer差分对设置方法 16210
  • 防反接保护电路 14557

分类专栏

  • Java 1篇
  • Azure 1篇
  • Git_GitHub 3篇
  • Informatica Power Center
  • 语言----C 14篇
  • 语言----Python 13篇
  • STM32单片机 8篇
  • PCB硬件 5篇
  • Linux_Shell 12篇
  • 数据库----SQL Server 2篇
  • 数据库----Oracle 2篇
  • 数据库----MySQL 2篇
  • 数据仓库 1篇
  • 数据分析 1篇
  • AD画图 7篇
  • Notepad++ 1篇
  • Keil 1篇
  • 电子技术知识 9篇
  • 生活 1篇

最新评论

  • 防反接保护电路

    两瓶酒: 试过Nmos管那个,接12V的话LED直接击穿,这个电路有问题,这篇文章有些内容解释不清,缝合怪。

  • [手机Linux PostmarketOS]一,1加6T真正的手机Linux系统

    普通网友: 干货满满,实用性强,博主的写作风格简洁明了,让人一目了然。文章涵盖了很多实用的知识点。【我也写了一些相关领域的文章,希望能够得到博主的指导,共同进步!】

  • [手机Linux] 二,安卓手机安装linux系统, 部署完全属于自己的服务器(Linux Deploy)

    虾稿: 可参考下篇文章: https://blog.csdn.net/tyler880/article/details/139610132

  • [手机Linux] 四,Linux修改yum源为阿里源,寻找systemctl的替代品

    Lunra612: 后面软链完后还是一样的报错,中间过程一样的

  • (转载)Altium Designer差分对设置方法

    哆啦A梦l: 必须是_N_P么

最新文章

  • [手机Linux PostmarketOS]五, docker安装和使用
  • [手机Linux PostmarketOS]四,多台Linux互相免密ssh登录
  • [手机Linux PostmarketOS]三, Alpine Linux命令使用
2024年6篇
2023年1篇
2022年9篇
2021年14篇
2020年28篇
2019年14篇
2018年12篇

目录

目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

虾稿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

PHP网站源码罗湖网站推广工具坪地建网站惠州模板推广西乡百搜标王光明SEO按天扣费福永网络广告推广光明网站推广方案坂田seo网站优化爱联网站优化按天收费永湖建网站坂田百度爱采购龙华标王惠州网站制作设计南山外贸网站设计南澳品牌网站设计木棉湾企业网站建设西乡百搜词包塘坑英文网站建设坑梓网站推广工具同乐百姓网标王推广南山网站搭建南澳网站制作永湖建网站盐田网络广告推广广州建网站西乡SEO按天收费龙岗网站推广方案东莞阿里店铺托管塘坑网站开发布吉企业网站建设歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

PHP网站源码 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化