首页>>科技 >>内容

波特率是什么,波特率设计

发布时间:2023-07-13 13:33:19编辑:温柔的背包来源:

很多朋友对波特率是什么,波特率设计不是很了解,每日小编刚好整理了这方面的知识,今天就来带大家一探究竟。

波特率是什么,波特率设计

01 什么是波特率从宏观上看,波特率代表了串口的传输速度。

从微观的角度来看,波特率是指系统中单位时间传输的符号数。对于UART来说,符号是二进制的,并以高低电平传输,因此波特率和比特率的值相等。例如,当波特率为115200时,本质上是UART串口每秒传输115200位数据,传输一位的时间等于1/115200秒。常见的UART串口波特率有300、600、1200、4800、9600、19200、34800等。

串口传输一位数据的周期就是传输一位的时间,可以表示为:

在串口传输中,一帧数据由起始位(1bit)、数据位(一般为8bit)、奇偶校验位(1bit)和停止位(1bit)组成。一般来说,一帧数据有11bit。那么可以计算出传输1帧数据所需的时间为11x1/bps。

串口通信的双方需要设置相同的波特率,数据传输周期由波特率规定。确定应读取级别的频率。

02 模块接口及说明

26MHz功能时钟主要用于波特率的产生和计算,由外部输入。接收波特率使能信号由接收数据模块产生,在UART_RX线检测到起始位后使能接收波特率。发送波特率使能信号由发送数据模块产生,需要发送数据时使能。波特率分频系数由配置模块产生并由APB总线配置。接收和发送波特率时钟根据配置,用于接收和发送数据的信号由26MHz 时钟生成。 03 功能时钟和波特率设计本项目使用的功能时钟为26MHz,波特率可通过波特率分频因子BAUD_DIV 配置。波特率分频因子BAUD_DIV与波特率的关系为:

为了计算和设计方便,我们将N固定为16,并且只配置BAUD_DIV来调整波特率。波特率可配置如下:

波特率计算公式中,分母为一个数据周期所需的26MHz时钟数。知道了波特率和功能时钟频率,就可以计算出一个波特率周期所需的功能时钟数量。公式中乘以N的操作是通过左移实现的(默认波特率为9600)。

总是@(posege clk26m ornegedge rst26m_)开始if(!rst26m_)开始cnt_value=10'd169 4;结束elsebegin cnt_value=(baud_div + 1'b1) 4;接收模块根据生成的波特率时钟接收数据。如果数据采集在“每一位数据的中间”,那么采样到的数据是最稳定的。

接收数据样本

因此,在生成波特率时钟时,RX 波特率计数器应在累加到一半时生成接收波特率时钟。发送数据时不需要这样做,只需确保波特率正确即可。

波特率模块的实现如下:

`timescale 1ns/1psmodule UART_BAUD( //输入clk26m, rst26m_, tx_bps_en, rx_bps_en, baud_div, //输出rx_bpsclk, tx_bpsclk);输入clk26m; //26M函数clockinput rst26m_; //函数c lk的rst_input rx_bps_en; //波特率使能信号input tx_bps_en;input [9:0] baud_div; //波特率分频因子output rx_bpsclk; //接收bps clk输出tx_bpsclk; //发送bps clkreg [13:0] cnt_value; //bps 计数valuereg [13:0] cnt_baud_r x; //接收波特率计数器[13:0] cnt_baud_tx; //发送波特率计数器//产生接收bpsclkalways@(posege clk26m ornegedge rst26m_) begin if(!rst26m_) begin cnt_baud_rx cnt_value - 1'b1) begin cnt_baud_rx=14'd0;结束elsebegin cnt_ baud_rx=cnt_baud_rx + 1'b1 ;结束结束elsebegin cnt_baud_rx 1))? 1'b1:1'b0;//产生发送bpsclkalways@(posege clk26m ornegedge rst26m_) begin if(!rst26m_) begin cnt_baud_tx cnt_value - 1'b1) begin cnt_baud_tx=14'd0;结束else 开始cnt_baud_tx=cnt_baud_tx + 1'b1;结束结束elsebegin cnt_baud_tx 1))? 1'b1:1'b0;始终@(posege clk26m ornegedge rst26m_)开始if(!rst26m_)开始cnt_value=10'd169 4;结束否则开始cnt_value=(baud_div + 1'b1) 4; endendendmodule 波特率模块虽然理解和实现起来比较简单,但是也比较重要,是接收和发送数据的基础。

以上知识分享希望能够帮助到大家!