点击上方名片关注了解更多
UART
是一种异步全双工串行通信
协议,由 Tx 和 Rx 两根数据线组成,因为没有参考时钟信号,所以通信的双方必须约定串口波特率
、数据位宽
、奇偶校验位
、停止位
等配置参数,从而按照相同的速率进行通信。
数据通信时序图:
起始位
:先发出一个逻辑”0”信号,表示传输字符的开始;数据位
:可以是5~8位逻辑”0”或”1”;如ASCII码(7位),扩展BCD码(8位);小端传输,即LSB先发,MSB后发;校验位
:数据位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验);停止位
:它是一个字符数据的结束标志。可以是1位、1.5位、2位的高电平(用于双方同步,停止位时间间隔越长,容错能力越强);空闲位
:处于逻辑“1”状态,表示当前线路上没有数据传送;注:异步通信是按字符传输的,接收设备在收到起始信号之后只要在一个字符的传输时间内能和发送设备保持同步就能正确接收。下一个字符起始位的到来又使同步重新校准(依靠检测起始位来实现发送与接收方的时钟自同步的)。
↑图-1 起始位和停止位
↑图-2 数据位
↑传输“A”
波特率:
此参数容易和比特率混淆,其实他们是有区别的。但是我认为 uart 中的波特率就可以认为是比特率,即每秒传输的位数(bit)。一般选波特率都会有9600、19200、115200 等选项。其实意思就是每秒传输这么多个比特位数(bit)。 起始位:
先发出一个逻辑”0”的信号,表示传输数据的开始。 数据位:
可以选择的值有 5,6,7,8 这四个值,可以传输这么多个值为 0 或者 1 的bit位。这个参数最好为8,因为如果此值为其他的值时当你传输的是 ASCII 值时一般解析肯定会出问题。理由很简单,一个ASCII字符值为8位,如果一帧的数据位为7,那么还有一位就是不确定的值,这样就会出错。 校验位
:数据位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以此来校验数据传送的正确性。就比如传输 “A”(01000001) 为例。 停止位
:它是一帧数据的结束标志。可以是 1bit、1.5bit、2bit 的空闲电平。可能大家会觉得很奇怪,怎么会有1.5位~没错,确实有的。所以我在生成此 uart 信号时用两个波形点来表示一个bit。这个可以不必深究。。。 空闲位
:没有数据传输时线路上的电平状态。为逻辑 1。 传输方向
:即数据是从高位(MSB)开始传输还是从低位(LSB)开始传输。比如传输 “A” 如果是 MSB 那么就是 01000001(如图-2),如果是 LSB 那么就是10000010(如下图的图-4) 帧间隔
:即传送数据的帧与帧之间的间隔大小,可以以位为计量也可以用时间(知道波特率那么位数和时间可以换算)。比如传送”A”完后,这为一帧数据,再传”B”,那么A与B之间的间隔即为帧间隔。 上两图和下两图传送的数据和波特率都是一样的,但是有几个参数是故意设置反了从而形成对比。有助于更深入的理解UART。
硬件工程师及从业者都在关注我们
声明:
推荐阅读▼
电路设计-电路分析
EMC相关文章
电子元器件
后台回复“加群”,管理员拉你加入同行技术交流群。