侧边栏壁纸
    • 累计撰写 302 篇文章
    • 累计收到 527 条评论
    UART串行接口设计及通信实现
    我的学记|刘航宇的博客

    UART串行接口设计及通信实现

    刘航宇
    2022-10-16 / 0 评论 / 367 阅读 / 正在检测是否收录...

    通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART,是一种异步收发传输器。

    异步串行、接口原理分析

    串行通信电气特性
    通常,UART串行接口采用RS-232-C电气标准进行通信。RS-232-C是美国电子工业协会EIA(Electronic Industry Association)制定的一种串行物理接口标准。对于一般的通信,不需要掌握RS-232-C的所有信号的定义,只需要使用其中的2个信号TXD(数据发送)和RXD(数据接收),另外,参加通信的设备要将GND(地)要连到一起(共地)。
    数据线TxD和RxD的电平标准为: 逻辑1=-3V~-15V;逻辑0=+3~+15V
    RS-232-C标准规定的数据传输速率为9600、19200、115200等波特率。波特率是衡量资料传送速率的指标,表示每秒钟传送的符号数。如果波特率为9600,那么发送和接收数据都应该为9600bits/s。本节采用9600bit/s进行通信。

    UART串行数据格式

    起始位(逻辑0 )+数据位(本节为8位数据位)+奇偶校验位(本节为偶校验)+停止位(本节使用1位停止位)+空闲位(逻辑1)

    通信的安全性问题

    串行异步通信,发送方和接收方使用各自的时钟。例如从FPGA电路板和计算机之间的通信,因此,不能保证两者的时钟完全相同。
    为保证接收数据的准确性,因此需要用较高的采样率进行采样,本节采用16倍的采样率进行采样,简单的选取中间采样点的值作为接收的数据。如图采用16倍波特率的采样率执行采样,一个比特可采集16个点,选取中间点即从第一个采样点开始的第8或第9个采样点(笑脸附近上升沿)采集该位数据,在接收双方始终频率相差不大的情况下,能够正确的完成通信。

    功能设计和演示

    预计实现的功能(演示):
    将拨码开关代表的数据发送到串口(8位);
    从串口接收电脑发来的数据,以数码管显示(8位)。

    主模块设计

    ⚫ 调用分频模块
    ⚫ 调用数码管显示IP
    ⚫ 调用按键消抖动IP
    ⚫ 调用串口发送模块
    ⚫ 调用串口接收模块

    module v1(
    input clk,
    input [11:0] sw,
    input [3:0] btn,//行列键盘的输入
    output [3:0] row,//行列键盘的行输出
    output [7:0] seg,
    output [5:0] an,
    output [11:0] led,
    output txd,
    input rxd
    );
    wire clk_ms,clk_20ms,clk_16x,clk_x;
    wire [3:0] btnout;
    wire [23:0] data_disp;
    wire data_ready;
    wire data_error;
    assign row[3:0]=1;//输出全部为高电平,
    本例程只用4个
    divclk my_divclk(.clk(clk),.clk_ms(clk_ms),.btnclk(clk_20ms),.clk_16x(clk_16x),.clk_x(clk_x)); 
    //调用分频模块
    ip_disp_0 uut_disp(//调用显示IP
    .clk(clk),
    .rst(0),
    .dispdata({data_disp[11:0],sw[11:0]}),
    .seg(seg),
    .an(an)
    ); 
    ip_ajxd_0 uut_ajxd(//调用按键消抖动IP
    .btn_clk(clk_20ms),
    .btn_in(btn),
    .btn_out(btnout)
    ); 
    uart_tx (.clk_x(clk_x),.data_in(sw[7:0]),.btn(btnout),.txd(txd),.led(led)); //调用串口发送模
    块
    uart_rx(.clk_16x(clk_16x),.rst(btnout[0]),.rxd(rxd),.data_disp(data_disp),.data_ready(data_rea
    dy),.data_error(data_error));//调用串口发送模块
    endmodule

    串口发送程序设计

    串口接收程序设计


    0
    集成电路中I/O PAD及其版图
    « 上一篇 2022-11-06
    关于射频芯片马上懂!
    下一篇 » 2022-10-14

    评论 (0)

    取消