我是靠谱客的博主 忐忑黄蜂,最近开发中收集的这篇文章主要介绍uart,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1、关于UART的基本特性:

(1) 异步串行通信,可为全双工、半双工、单发送TX或单接收RX模式;

(2) 支持5~8位数据位的配置,波特率几百bps至几百K bps;

(3) 可配置奇校验、偶校验或无校验位;可配置1、1.5或2位停止位;

(4)将并行数据写入内存缓冲区,再通过FIFO逐位发送,接收时同理;

(5)输出传输时,从低位到高位传输。

2、 关于UART的主要信号说明:

在常见的UART接口包含VCC,GND,TX,RX这四条线,一些应用场景中,有时候会使用到RTS/CTS,DTR/DSR这些信号,这两对信号主要用于半双工模式下的数据流控制。在UART通信中,他们的连接方式如图(1)所示(注意,如果是与Modem连接,则RTS与CTS不一定是如图的交叉连接方式,这个要视通信过程而定,比较少见,不作讨论)。

UART的基础知识与数据传输过程

图(1) UART接口收发端连接方式

(1)TX与RX

数据发送和数据接收

(2)CTS与RTS

当A要通过UART发送数据到B时,将A端的RTS信号拉低,此时,在B端检测到了CTS被拉低,于是B准备好接收数据,然后拉低B端的RTS。此时,在A端,检测到了CTS被拉低,于是A通过TX开始向B发送数据,B通过RX接收A传过来的数据。并且,A没发送一个字节数据之前都会检测CTS是否有效,一旦无效,则马上停止数据传输。

需要注意的是,上述通过检测CTS和RTS引脚信号电平来决定收发状态的方式称为硬件流控(其实也是通过软件检测实现的),但实际上,很多应用场合并没有连接这两根信号线,而是通过软件(如串口收发中断)来改变收发模式配置。我们用串口调试终端的时候也可以设置是否启用这两根流控信号。软件流控的缺点很明显,就是有时候会因为发送某些数据,被误判为是终止通信的流控信号,而通过CTS/RTS实现的硬件流控则不存在这一问题。

3、关于UART的数据传输过程:

以下关于UART数据传输格式的说明适用于TX和RX,两者的区别只在于发送方跟接收方的不同,数据帧格式一样。

(1) 数据传输的格式为:

起始位(1位)+数据位(5~8位)+校验位(1或0位)+停止位(1、1.5或2位)

比较常用的8N1格式为:起始位(1位)+数据位(8位)+停止位(1位)

(2) 从数据线的角度解释8N1数据格式:

没有数据传输时,数据线的状态为1,当有数据传输时,第一位为起始位0,紧接着8位为数据,最后一位为停止位1;停止位后接着下一帧的起始位,以此类推,直到数据传输停止后,数据线回复空闲状态1。

(3) 从收发双方的角度解释8N1数据格式:

数据线从1跳变为0之后开始发送数据,接收方检测到起始位0的下降沿之后开始采样,采样周期根据设定的波特率决定,八个位周期后,数据线回到空闲状态1,此时一桢收发结束。

由上述易知,每一桢的起始位为0,停止位为1,中间8位为数据位,每一位持续的时间可根据波特率算出。

4、从波形上看UART数据传输:

我们知道,UART采用的是异步通信方式,通信双方要有一致的波特率,才能通过采样得到正确的数据。定义好了数据发送的波特率,就知道了数据帧每一个bit所占用的时间周期。实验中通过示波器捕捉到的部分波形(TX或者RX)如图(2)所示。此时,数据格式为8N1,波特率为115200bps。

UART的基础知识与数据传输过程

图(2) UART数据波形
因为此时的波特率为115200bps,因此每一bit的时间为 1/115200 = 8.7 us。如图(2)所示,每一帧的起始位为0,停止位为1,中间则为8位数据位,每一位为8.7微秒(注意,低位在前,高位在后)。因此可以读出二进制数据的内容为:

00100000 00100000 01111100 00100000 00110100 00111000 00110000… …

通过查找ASCⅡ码表译码得: | 480… …

总结:为了保证数据传输正确,首先必须确认波特率和数据帧格式一致。

转载自泽特斯拉博客:http://blog.sina.com.cn/u/6352758766

最后

以上就是忐忑黄蜂为你收集整理的uart的全部内容,希望文章能够帮你解决uart所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部