串口通信

本文介绍了UART、SPI和IIC三种常见的串行通信接口,包括它们的信号线、时序、电气规范和配置选项。UART提供了通用异步收发功能,SPI是一种高速全双工同步接口,而IIC是简单的二线制同步串行总线,适合多设备通信。各接口在不同应用场景中有各自的优缺点和适用范围。
摘要由CSDN通过智能技术生成
本文为作者学习笔记
欢迎交流讨论,喜欢的话点个赞吧

欢迎去看我的主页: NicholasYe’s Hompage.

串口


UART

UART,全称UniversalAsynchrONous Receiver/Transmitter,译为通用异步收发器。

  1. UART,“串口”时序协议的名称,定义了各个信号时序协议;
  2. USART,相比UART增加了同步信号,可实现ISO-7816智能卡接口;
  3. COM口,在PC等操作系统上,区别于USB、SATA接口的串行接口,定义了在操作系统中的规范;
  4. TTL/CMOS,嵌入式硬件系统的信号电平;
  5. RS-232,在UART基础上再定义了信号的电气特性
  6. RS-422,在RS-232基础上定义了差分信号传输的电气特性
  7. RS-485,在RS-422基础上定义了半双工模式

UART信号线

UART常用的信号线有:

  1. RxD,当前终端设备的接收管脚
  2. TxD,当前终端设备的发送管脚
  3. GND,当前终端设备的地

一般的,设计者在设计PCB时,对外连接做的一些预留接口,标记接口管脚时,都会添加丝印标记,这时标记的都是当前终端设备的管脚信息。

例如标记着RxD的引脚,应该与外部的UART接口TxD连接
PCB板的标记

UART信号时序

信号线空闲时,处于高电平,当有数据发送时,信号线以1个bit时长的低电平标志开始通信,通信过程中,单个字节在信号线上的帧结构如下图:
image
信号管脚传输每个数据时,在管脚上呈现的是电气信号为高低电平的变化,对应数据每个bit的逻辑“1”和“0”。


UART在不同电气规范下的接口

对于不同平台或者使用环境,信号管脚的电气特性依次可以分为:

TTL/CMOS、RS232、RS422、RS485

TTL/CMOS

TTL电平,逻辑“0”等于0V电压,逻辑“1”等于+5V电压

CMOS电平,逻辑“0”接近0V电压,逻辑“1”接近电源电压(3.3V或其他)

    TTL电路与CMOS电路比较:
    1)TTL电路是电流控制器件,而CMOS电路是电压控制器件。
    2)TTL电路的速度快,传输延迟时间短(5-10ns),但是功耗大。
    CMOS电路的速度慢,传输延迟时间长(25-50ns),但功耗低。
    CMOS电路本身的功耗与输入信号的脉冲频率有关,频率越高,芯片即越热,这是正常现象。

常见的,在嵌入式开发时,UART的电平信号由MCU芯片决定。

日常的开发过程中,MCU管脚上的UART通信电平就是TTL/CMOS电平信号。

RS-232

RS232对电气特性、逻辑电平和各种信号线功能都作了规定。

在TxD和RxD信号管脚上:

逻辑“1”电压范围-3V~-15V

逻辑“0”电压范围+3~+15V

在RTS、CTS、DSR、DTR和DCD等控制线上:

信号有效(接通,ON状态,正电压)电压范围+3V~+15V

信号无效(断开,OFF状态,负电压)电压范围-3V~-15V

可见RS232的信号管脚特性为负逻辑电平的信号。

UART快速使用串口及应用

调试-输出
C库函数printf格式输出重定向到串口输出

输出串口数据过程中,需要向寄存器逐字节传入数据的,而在传送之前必不可少的,就是将要发送的数据、字符放到同一个Buffer后,执行轮询的方式传送直到buffer内容全部被传送。

而这个“放”的过程也是需要做些计算、判断,尤其是增加必要的字符来描述输出信息,保证信息的可识读。

在C标准库printf函数就有格式输出的功能,利用这个接口更便于调试输出这个过程。

这就需要将printf函数重定向到串口输出上!

实现重定向只需3步:

  1. Options for target选项卡内勾选UseMicroLIB

image

  1. 在串口实现的*.c文件内,将stdio.h文件和stdarg.h文件包含进来
  2. 重新定义int fputc函数的内部实现

image

完成以上3步,即可利用printf函数来格式化输出,并且能够在串口上接收到。


SPI

SPI是串行外设接口(SerialPeripheral Interface)的缩写。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便。

SPI信号线

SPI被称为四线串行总线,其信号线分别有:

  1. SCLK:串行时钟(主机输出)
  2. MOSI:主输出从机输入或主机输出从机输入(主机输出的数据)
  3. MISO:主输入从输出或主输入从输出(从输出的数据输出)
  4. SS:从机选择(通常为低电平有效,主机输出)
信号线命名也是五花八门,以下的命名也是会遇见的:
    串口时钟:
    SCLK:SCK
    主输出--->从输入(MOSI):
    SIMO,MTSR - 对应主设备和从设备上的MOSI,相互连接
    SDI,DI,DIN,SI - 在从设备上; 连接到主设备上的MOSI,或连接到下面的连接
    SDO,DO,DOUT,SO - 在主设备上; 连接到从站上的MOSI,或连接到上面的连接
    主输入<---从输出(MISO):
    SOMI,MRST - 对应主设备和从设备上的MISO,相互连接
    SDO,DO,DOUT,SO - 在从设备上; 连接到主设备上的MISO,或连接到下面的连接
    SDI,DI,DIN,SI - 主设备; 连接到奴隶上的MISO或上面的连接
    从机选择:
    SS:S̅S̅,SSEL,CS,C̅S̅,CE,nSS,/ SS,SS#

SPI作为同步串行接口,可以认为有两个同步信号,第一个是从机选择SS信号,告知被选中的从机,准备开始进行SPI通信,第二个是同步时钟信号SCLK,收发双方进行数据的交互时,都是基于SCLK的跳变进行逐BIT输出和采样的。

四根信号线并非全部都需要,根据工作模式,可以配置成两线、三线。

在STM32CubeMX工具的配置页面,可以很清楚看到,配置不同的工作模式时,对应被使能的芯片管脚有何不同:
image
image
image

对比发现,全双工的四线和三线的区别是从机选择信号NSS。这种情况一般是因为SPI总线上只有一主一从的通信架构,从机的NSS信号一直接低电平,不需要做从机选择。

SPI信号时序

四线SPI接口的时序一般的总是先拉低从机选择信号线SS,然后输出SCLK,带着数据MOSI,此时MISO为高阻态。大致如下如:
image

SPI接口配置项

一般在开发时,接口的可选配置有:接口模式(实际配置的是单、双工模式选择)、设备主从模式、数据宽度、时钟极性(CPOL:)、时钟相位(CPHA)、时钟速率、数据bit位大小端选择。

接口模式
  1. 标准的四线SPI接口,使用的场景是主从机进行数据交互的通信,两方都有数据的收发过程。
  2. 在LCD/OLED这样的SPI接口作为从设备的器件中,就不需要数据返回给主机,只需要接收来自主机的控制信息和显示的数据。基于这样的使用场景,就可以配置成三线的单工通信,即仅需要从机选择SS、时钟SCLK、数据输出MOSI即可。
设备主从模式

这个配置一般需要看芯片是否支持,可将芯片配置成SPI主机或者从机,能更好地集成在项目的系统中。

数据宽度

顾名思义,就是发送数据可以配置成8bit、16bit等,这也是根据芯片而定。

时钟极性、时钟相位

这两者分别是CPOL(Clock Polarity)、CPHA(Clock Phase),极性就是指高低电平,这个定义了SPI总线在空闲状态下,时钟保持高电平还是低电平,因为这个关系到了SPI通信时第一个时钟跳变沿是上升还是下降沿;相位指的是时钟的跳变沿,指定了数据信号的输出和采样如何与时钟对齐

时钟速率

速率选择定义了时钟信号线在数据传输是的翻转速率,这体现到每个芯片定义的接口时序图中,即可承受的速率范围,如果主机设的速率太快,而从机响应过慢会导致通信失败

数据bit位大小端选择

数据的发送优先bit可配置,SPI是可配置优先发送bit的,可设置最低位或者最高位。


IIC

IIC 即Inter-IntegratedCircuit(集成电路总线),这种总线类型是一种简单、双向、二线制、同步串行总线,主要是用来连接整体电路(ICS) ,IIC是一种多向控制总线,也就是说多个芯片可以连接到同一总线结构下,同时每个芯片都可以作为实时数据传输的控制源。这种方式简化了信号传输总线接口。

IIC信号线

IIC作为两线串行总线,信号线分别是:

  1. SCL(Serial ClockLine):串行时钟,主机输出
  2. SDA(Serial DataLine):串行数据,双向传输

总线信号的电平在电路连接上,一般加上拉电阻Rp,使得总线在空闲时,信号管脚处于高电平状态。

IIC信号时序

IIC作为同步串行总线,可以认为有两个同步信号,第一个是通信起始、结束标志,告知挂在IIC总线上的从机设备,何时开始通信并且何时结束;第二个是同步时钟信号SCL,收发双方进行数据的交互时,都是基于SCL的跳变进行逐bit输出和采样的。
image

  • 起始标志
    处于空闲状态下时,SCL和SDA都是高电平,某一时刻,SDA拉低,则此刻认为开始IIC传输。
  • 结束标志
    即将完成数据传输时,在SCL处于高电平时,将SDA强制拉高,则此刻认为结束IIC传输。
  • 数据输出
    在SCL为低电平时,发送方根据传输的数据内容逐bit改变SDA的电平。
  • 数据采样
    在SCL为高电平时,接收方读取SDA的电平逐bit接收,并逐8个bit组成1个Byte。
  • 应答ACK
    ACK表示在8bit数据后的第9个时钟的高电平期间,SDA保持低电平。
  • 应答NACK
    NACK表示在8bit数据后的第9个时钟的高电平期间,SDA保持高电平。

IIC要实现主机与指定从机的通信,需要每次开始通信时,主机会先把指定从机设备的地址通过接口发出,这样一来,对应的从机设备即可被选中,才能进行后续的通信操作。

IIC接口配置项

相比于SPI接口丰富的配置项,然而IIC仅有2根数据线,可配置的也就是时钟SCL的翻转速率,因为这个时钟的速率直接影响到数据的传输速率。

这里所配置的推荐值,应该确认IIC总线上各个从机设备的速率极限,这样在设计IIC接口时,能够兼容总线上的所有设备通信速率。


参考资料:

  1. 《嵌入式硬件通信接口协议-UART(一)协议基础》
  2. 《嵌入式硬件通信接口协议-UART(二)不同电气规范下的标准》
  3. 《嵌入式硬件通信接口协议-UART(三)快速使用串口及应用》
  4. 《嵌入式硬件通信接口协议-SPI(一)协议基础》
  5. 《嵌入式硬件通信接口协议-IIC(一)协议基础》

请在转载文章过程中明确标注文章出处!尊重原创,尊重知识产权,谢谢!

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值