一,学习初衷
原来自己也学过UART协议,知道原理,没有实际细致的去研究过,现在工作中通信都是UART,今天看底层代码的时候,有点晕,不知道设置的那些都是什么,重新再来过一遍,顺便做一下笔记,加深一下理解
二,通信基础
1,并行和串行
下图所示为并行,通俗讲就是有多条数据线,发送数据的时候,可以一次性发送字节中的多个bit
下图所示为串行,通俗讲就是只有一条数据线,发送数据的时候,只能一个bit一个bit发送
并行总线多条线会有干扰,所以实际应用中多是串行总线
2,单工和双工
单工只能单方向通信,一方只能发,一方只能收,如下图示
双工在同一时刻既能收又能发
半双工在同一时刻,只能一个方向发送,但是不同时间还可以接收
3,波特率
用于描述UART通信时的通信速度,其单位为bps(bit per second),即每秒钟传送的bit的数量
4,同步和异步
同步:收发双方时钟同步
异步:收发双方各有各的时钟,时钟不同步
二,UART协议
1,是什么?
UART通用异步收发器,是一种通用的串行,异步通信总线,该总线有两条数据线,可以实现全双工的发送和接收,在嵌入式系统中常用于主机与辅助设备之间的通信
UART帧格式如下所示:
空闲位必须是高电平
起始位是低电平,表示一次通信的开始
数据位要先发低位再发高位,比如0X55,二进制是01010101,发送的时候,要发成10101010
校验位是前面数据位1的总数是奇数还是偶数,奇数的话就为0,偶数就是1,可有可无,非必须,只能校验不能修正,通信速度变慢。
停止位位数是1/1.5/2位
串口区分是发了几个1或者几个0,通过波特率来判断,比如波特率是1,那就是1S发一个BIT
连续的高电平看有多少个波特率,就是发了多少个1.
串口通信因为两个设备的时钟不同步,所以不允许连续发送,防止累计误差出现,最多发一个字节,然后高电平空闲,再重新开始。