Uart串口通信的理解

本文详细介绍了UART串口通信,包括RS232电平转换、波特率计算以及数据传输协议。通过MAX3232进行电平转换,9600波特率下,每bit约104166ns。提供了接收和发送数据的Verilog代码实现,并展示了如何在上升沿检测数据。此外,还提到了同步释放和异步复位电路以避免亚稳态,以及顶层模块的例化和分层设计,便于维护和修改。
摘要由CSDN通过智能技术生成

      串口通信广义的概念有很多,我们这里主要讲RS232这一类型,首先RS232使用的电平是负逻辑电平,所以首先必须采取电平转换芯片,一般采用MAX3232这种芯片,具体的硬件连接图如图所示

再来看串口传输的协议格式:


另外讲解一些串口传输的基础知识:

1.波特率:每秒传输码元符号的个数,假设每秒传输1200个码元,然后每个码元由8bit组成,那么波特率就是1200*8=9600bps,所以我们一般定义的波特率有9600波特,19200波特之类的。本文中我们采用9600波特率,它代表每秒传输9600bit,所以每bit大概传输时间为1000000000/9600=104166ns,按照我们的频率50M来计算,那么传输一个bit的时间大概需要5208这么多个时钟周期,这里我们利用上升沿接收数据,即(当计数记到2603的时候,我们接收数据),这里可用计数器实现。具体代码如下:

module posedge_bps(
                                       clk,
      rst_n,
     bps_start,
     clk_bps_posedge_data
                                  );
input           clk;
input           rst_n;
input          bps_start;
   
       output  reg    clk_bps_posedge_data;

reg [12:0] bps_posedge_cnt;
always@(posedge clk or negedge rst_n)
   if(!rst_n)
        begin
        bps_posedge_cnt<=13'd0;
        clk_bps_posedge_data<=0;
        end
   else
///当检测到bps_start为低电平或者bps_podedge_cnt==5207(即还没有开始传输初始状态,或者计数计满了的时候清零),bps_start由串口数据帧格式控制,当检测到数据位由1变为0的时候表示,bps_start启动了。   当计数记到2603,即一半的时候,正好在数据位的中间,那么就将这几个数据采下来。
 begin
        if((!bps_start)||(bps_posedge_cnt==13'd5207))  
       begin
       bps_posedge_cnt<=13'd0;
       clk_bps_posedge_data<=0;
       end
        else
 begin
 bps_posedge_cnt<=bps_posedge_cnt+1;
   if(bps_posedge_cnt==13'd2603)
    clk_bps_posedge_data<=1;
   else
    clk_bps_posedge_data<=0;
 end
  end

endmodule 


2.接收数据代码如下:

  从串口传输数据帧格式中我们可以看到,当检测到数据位由1变为0的时候(脉冲边沿检测可以搞定),这就是数据开始传输的标志,第一位是起始位,在数据中间采样点的时候(2603),我们不用采下来,后面紧接着8位数据位,我们可以采,然后结束位,不管。在采数据的过程中,我们可以设置一个标志位(receiver_data_flag),再采数据过程中一直保持高点平,当数据接收完毕的时候,将它拉低,所以在发送数据的时候,一旦检测到这个标志位由高变低,则表示接收数据结束,可以发送数据了。

module uart_receiver(
                     //global input interface
clk,
rst_n,

/Uart input interface
clk_bps_posedge,
uart_data_in,

Uart output inte

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值