RS232是一种常见的串行通讯接口,一种常见的RS232通信接口是9针的接口(DB-9),如下图所示:
在RS232的针脚上,一般使用-3V~-15V(有些文档说明中为-5V~-15V)之间的任意电平表示逻辑1,而使用+3V~+15V(有些文档说明中为5V~15V)之间的任意电平表示逻辑0。图中对管脚的标号做了标注,其中pin 2是RXD,pin 3是TxD,pin 5是GND。只需要这三个端口就能完整的实现RS232的数据传输功能。稍后我们将在Vivado环境进行一个简单实现。
RS232的其余特性包括:
- 允许采用双向全双工的通信方式(PC机可以在发射数据的同时通过该接口接收数据);
- 可以最高以10KByte/s的速度进行数据通信。
在开始之前,首先定义清楚RS232信号线上的时序。在RS232关键的三根信号线当中并没有时钟线,相邻两个字符(一个字,一般假定为1个byte,8bits)之间需要开始和终值位进行标定,所以相邻字符的间隔完全可以是任意的,因而也可以认为这是一种异步通信方式。一般认为单个字符在进行传输的时候首先传输低位,我们进行以下约定。
- 发射模块idle状态的时候TXD ='1';
- 发射模块发送开始位start bit的时候TXD = '0';
- 发射模块发送终止位stop bit的时候TXD = '1';
如果发送0x55的话发送数据线上的时序信号如下(注意发送'1'的时候信号线为低电平):
我们实现的传送速度为115200bauds,bauds(波特率)本身表示传送符号的速率,但是这里是异步通信方式,我们认为1个bit就是一个符号,包含所有数据位和起始终止符号位。传输速率为115200bauds的情况下,每个bits的持续时间为(1/115200=)8.7us。
1.波特率产生
在数字系统当中,时