UART(universal asychronous receiver transmitter) 通用异步收发器,准确说应该叫做 通用串行异步收发器。
1.串行:是说两个uart设备之间用一个数据线就可以进行通信了,所以数据是一个bit一个bit传输的,也可以用两个信号线组成全双工通信,如rs232.
2.异步:是说两个uart设备之间通信的时候不需要时钟线,这时候就需要在两个uart设备上指定相同的传输速率,以及空闲位、起始位、校验位、结束位,也就是遵循相同的协议。
3.收发器就是指的发送接收数据的硬件了,也就是CPU和外设。
下面介绍一下uart接口的硬件层协议:
包含5个名次:空闲位、起始位、数据位、校验位、停止位、波特率。
空闲位:uart设备之间不进行数据传输,高电平
起始位:电平由高变低,一个bit,表示数据开始传输了
数据位:由低bit开始传输,一个bit一个bit地传输,一般是8bit(可以选择 5,6,7bit),也就是一个byte
校验位:奇偶校验,或者无校验,一个bit。例如:奇校验,如果数据位中1的个数如果是奇数,那么校验位是0,如果数据位中1的个数是偶数,那么校验位是1.
停止位:高电平有效,一个bit。传输结束。
波特率:两个uart设备之间传输的速率,单位是bps(每秒多少个bit),一般是9600、19200、38400、57600、115200等
编程的时候,uart数据的收一般用中断方式,发可以用中断也可以用轮询的方式。如果用轮询的方式发数据,如果数据比较多 ,最好不要在哪里一直发,等发完了再去执行别的程序,这样不好。可以程序跑一圈检查一下发送寄存器中的flag,如果前一个字节已经发送完成了,那么就可以发下一个数据了。串口通讯是最简单的一种通讯方式了,结合datasheet,很好编程,不像i2c,中断部分写的不好,很容易死机。
嵌入式开发中常见的UART接口也就是RS232(DB-9)和RS485。
1.RS232:
232接口的电压是负逻辑,-3v~-15v为逻辑1,3v~15v为逻辑0. 一般都是3.3v。通过usb转串口转出来的232接口,tx电平是-5.5v,rx是0v。232的接口分公头和母头。公头的引脚:2:rx;3:tx;5:地。母头的引脚:2:tx;3:rx;5:地。一般只用到这三个引脚。232是全双工的,点对点的通信(起始也可以一对多通信,只要我们给每一个设备人为的分配一个id,然后根据uart的硬件层协议来制定我们自己的软件层协议就可以了),可是传输距离比较近,一般也就10多米。
2.RS485:
一般是两线制(也有四线制,没用过,不了解),如下图:
RS485一般采用的是主从的收发模式,可以一对多通信。虽然有tx、rx,但是他不能同时收发,因为485是采用差分传输的,它的数据的值是tx、rx两条线上的电位差来确定的,电位差为+2~+6v表示逻辑1,-2~-6v表示逻辑0。我们看到上图中还有一个引脚是CTL,这是控制485是收还是发的pin脚,一般是当CTL时高电平的时候,为tx状态,低电平的时候为rx状态。
由于RS485采用的是差分传输,所以他的传输距离可以达到上千米。传输速率也更高,可以达到10mbps。