FPGA—串口RS232(附实现代码)

该文详细介绍了UART串口通信的基本原理,包括串口的异步特性、RS232信号线以及通信协议。接着,文章通过FPGA实现串口通信的硬件资源、顶层模块、数据接收和发送模块的RTL代码设计,并进行了仿真验证。最后,讨论了上板测试与总结,强调了并行、串行数据转换的关键点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1. 理论

1.1 串口简介

1.2 RS232信号线

1.3 RS232通信协议简介

2. 实操

2.1 硬件资源

2.2  顶层模块

2.2.1 模块说明

2.2.2 RTL 代码

2.2.3  仿真验证

2.3 串口数据接收模块

2.3.1 模块说明

2.3.2 波形设计

2.3.3 RTL代码

2.3.4 仿真验证

2.4 串口数据发送模块

2.4.1 模块说明

 2.4.2 波形设计

​编辑2.4.3 RTL代码

2.4.4 仿真部分

2.5 上板测试

3. 总结


1. 理论

       通用异步收发传输器( Universal Asynchronous Receiver/Transmitter) ,简称UART。 UART 是一种通用的数据通信协议,也是异步串行通信口(串口)的总称,它在发送数据时将并行数据转换成串行数据来传输,在接收数据时将接收到的串行数据转换成并行数据。 它包括了RS232、 RS499、 RS423、 RS422 和 RS485 等接口标准规范和总线标准规范。

1.1 串口简介

       串口作为常用的三大低速总线(UART、 SPI、 IIC)之一,在通信接口和调试时占有重要地位。但 UART 和 SPI、 IIC 不同的是,它是异步通信接口,异步通信中的接收方并不知道数据什么时候会到达,双方收发端有各自的时钟。注意在数据传输过程中是不需要时钟的,发送方发送的时间间隔可以不均匀,接受方是在数据的起始位和停止位的帮助下实现信息同步的。而 SPI、 IIC 是同步通信接口,同步通信中双方使用频率一致的时钟,在数据传输过程中时钟伴随着数据一起传输,发送方和接收方使用的时钟都是由主机提供的。
         UART 通信只有两根信号线,一根是发送数据端口线叫 tx(Transmitter),一根是接收数据端口线叫 rx(Receiver),如下图所示。对于 PC 来说它的 tx 要和对于 FPGA 来说的 rx 连接,同样 PC 的 rx 要和 FPGA 的 tx 连接。UART 可以实现全双工(可以同时进行发送数据和接收数据)。

串口的优点:

1.很多传感器芯片或 CPU 都带有串口功能,进行串口调试方便。

2.串口数据线两根使用简单。

3.在较为复杂的高速数据接口和数据链路集合的系统中往往联合调试比较困难,可以先使用串口将数据链路部分验证后,再把串口换成高速数据接口。

缺点:只能短距离传输,传输速率相对较慢。

1.2 RS232信号线

信号线的连接方式: 有以下两种   

       (1) 接口为 DB9 接口的串口线

       准备一根串口线连接在旧式的台式计算机中一般会有 RS-232 标准的 COM 口(也称 DB9 接口)和FPGA的公头接口上,如下图。

       由上图可知 COM 口有许多信号线,但一般只使用RXD、 TXD 以及 GND 三条信号线传输数据信号。

      (2) USB接口的串口线,连接FPGA与PC的两端。

1.3 RS232通信协议简介

        RS232 是 UART 的一种,没有时钟线,只有两根数据线, rx 和 tx,这两根线都为1bit 位宽(一位二进制数)。由于FPGA内部接收模块与发送模块是并行传输的,所以要模块要分别经行串转并,并转串的处理。

       串口数据的发送与接收是基于帧结构的,即一帧一帧的发送与接收数据。一帧数据的组成为起始位(固定为 0)+  有效数据( 8bit )+ 停止位(固定为 1),即最基本的帧结构有10bit(不包括校验等)。在不发送或者不接收数据的情况下, rx 和 tx 处于空闲状态,此时 rx 和 tx 线都保持高电平。下面是一个最基本的 RS232 帧结构示意图

       波特率:在信息传输通道中,携带数据信息的信号单元叫码元(串口是 1bit 进行传的,所以其码元就代表一个二进制数),每秒时间内传送二进制数据的位数简称波特率, 常用符号“Baud”表示,其单位为“波特每秒(Bps)”。串口常见的波特率有 4800、 9600、 115200 等,这里选用 9600 的波特率。
         比特率:比特率表示有效数据的传输速率每秒钟通信信道传输的信息量称为位传输速率,简称比特率,其单位为“每秒比特数(bps)”。比特率可由波特率计算得出,公式为:比特率=波特率 * 单个调制状态对应的二进制位数。 9600 的波特率,其串口的比特率为: 9600Bps *1bit= 9600bps。       

       假设数据以一帧10bit进行传输,那么码元为10个二进制数(有效位8位)。每秒传输65帧数据,故Baud = 65 x 10 = 650 Bps, 波特率 = 650 x (4/5)= 520bps。注意区别传输是一帧还是1bit(串行或并行)

         在9600Bps下,计算传输1bit数据需要花多少个时钟周期?每秒传输9600个码元数,即传1位数据需要1/9600秒 。在50Mhz的系统时钟下,一个时钟脉冲为20ns,需要花  (1s * 10^9)ns /
9600) / 20ns ≈ 5208 个系统时钟周期

2. 实操

       实验目标:PC 机的串口调试助手发送一串数据,经过 FPGA 后再传回到 PC 机的串口调试助手中显示。

2.1 硬件资源

       由于RS-232电平标准的信号不能直接被控制器直接识别,所以信号会经过一个"电平转换芯片" (MA3232 芯片)转换成控制器能识别的"TTL校准"的电平信号才能实现通讯。

 结构示意图:

RS232 收发器电路:

        为了方便使用,开发板中还搭载了 USB 转串口的芯片 CH340,供 USB 线进行串口调试。

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小源8

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值