UART通信,接收与发送(详细版,附代码)

UART通信——字节的发送与接受

串行接口是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数据流转换为并行的数据字符供给CPU的器件。

在FPGA入门阶段,UART通讯协议是必学的知识,因为很多模块都是使用UART协议进行传输的,详细的这里我就不再多做介绍了,先贴上我的代码模板再慢慢做解释。
协议发送原理:
在这里插入图片描述

在串口通信中波特率表示每秒能传输的数据位,9600就是每秒能传输9600位,1word=2byte、1byte=8bit,这里的9600位指的是9600bit。
每个开发板上都有它的系统时钟,初级阶段本人用的是basys2开发板,对于入门的种子选手是个不错的开端,此款开发板的系统时钟是50MHZ,我们假定波特率是9600bit/s传输,那么传输1bit就需要50M/9600个时钟周期。
依次推理,每传输1bit需要 **“系统时钟/波特率”**个时钟周期。

先来关于字节的发送,代码如下:

//-------1字节数据的发送-------
module uart_tx(
    input clk,
    input rst_n,
    input cnt_start,                                        //发送使能
	input [7:0]tx_data,
    output reg tx,
    output reg tx_done                                      //传输一个字节完成标志
    );
    
    reg [12:0]cnt_bps; 
    parameter bps_t = 13'd5207;                             //传输1bit所需计数值 
    always @(posedge clk or negedge rst_n)
    begin
       if(!rst_n) 
          cnt_bps <= 13'd0;
       else if(cnt_bps == bps_t) 
          cnt_bps <= 13'd0;
       else if(cnt_start) 
          cnt_bps <= cnt_bps + 1'b1;
       else 
          cnt_bps &
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值