基于FPGA的RS232串口通信协议

RS232原理

注意:以下仅为学习笔记,借鉴网络各个知识点汇聚而成,如有错误请留言。

原理:RS232协议是UART的一种,只有两根数据线,分别是rx和tx,分别用来接收数据和发送数据,数据收发基于帧结构,每次按照8bit的大小来接收和发送数据。数据线空闲状态下为高电平,开始发送数据后将电平拉低一帧作为起始位,随后8帧的数据为数据内容,发送完毕后将数据线电平拉高一帧作为停止位,然后一直拉高回到空闲状态。          
                 

RS232缺点:1.传输数据的距离进; 2.传输数据慢。

           优点:1.很多传感器CPU都带有串口功能,方便调试;

                      2.只有两条数据线,减少IO口。

串口RS232协议:位宽都是1bit。通过串口调试助手发送一个8bit的数据(一位一位的发送和接收);RS232串口在发送数据时将并行数据转换成串行数据来传输;在接收数据时将接收到的串行数据转换成并行数据。

串口发送接收1bit数据时间称一个波特,如:波特率9600,波特是1/9600s,系统时钟50Mhz,时钟周期是20ns,在9600波特率下,一个波特等于5208个系统时钟周期((1s * 10^9ns)ns/9600)/20ns,也就是说每个bit数据在50Mhz时钟下保持5208个时钟周期,起始位和停止位都是一个波特时间,本次实例采用9600波特率。

串口数据RX发送模块

    该模块的功能是将并行数据转化为串行数据。

RX接收模块框图:

                         

理想波形设计: 

 

RX接收模块编程代码:


module    uart_rx
#(
    parameter     UART_BPS = 'd9600,       //波特率9600
	              CLK_FREQ = 'd50_000_000    //时钟频率50MHZ
)
(  
    input    wire        sys_clk      ,
	  input    wire        sys_rst_n    ,
	  input    wire        rx           ,
	                           
    output   reg  [7:0]  po_data      ,  
    output   reg         po_flag      
);
 
localparam  BAUD_CNT_MAX    =   CLK_FREQ/UART_BPS   ;  //接受1bit数据所需多少个脉冲周期
reg             rx_reg1       ; //打一拍,同步时钟
reg             rx_reg2       ; //打两拍,减小亚状态
reg             rx_reg3       ; //打三拍,在次减小亚状态
reg             start_flag    ; //开始标志信号
reg             work_en       ; //计数使能信号
reg    [15:0]   baud_cnt      ; //波特率计数器
reg             bit_flag      ; //bit计数信号
reg    [3:0]    bit_cnt       ; //bit计数
reg    [7:0]    rx_data       ; //传输移位bit
reg             rx_flag       ; //传输1帧完成信号
 
//rx_reg: 进行打拍操作,消除亚稳态					   
always @(posedge sys_clk or negedge sys_rst_n)
     if( !sys_rst_n ) 
       begin
	       rx_reg1 <= 1'b1;
		     rx_reg2 <= 1'b1;
		     rx_reg3 <= 1'b1;
		   end
     else   
       begin
         rx_reg1 <= rx      ;	
         rx_reg2 <= rx_reg1 ;
         rx_reg3 <= rx_reg2 ;	
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值