串口通信USART设置波特率程序

本文详细讲解了STM32微控制器中USART串口通信的波特率设置过程,涵盖了如何通过寄存器配置实现不同速率的数据传输,以及在实际应用中的注意事项。
摘要由CSDN通过智能技术生成
使用Verilog代码编写的生成波特率程序:
程序目前支持9600、19200、38400、57600、115200,如需要其他波特率请根据计算方法加入代码中,输入的时钟信号为50MHz
module SpeedSet(clk,reset,cnt);
input clk,reset;
output cnt;
///波特率对应的脉冲的个数。计算方法如下:
//以9600bps为例:1s/9600/20ns=5208.33333,即有5208个周期。
parameter bps9600     = 5208,
bps19200    = 2604,
bps38400    = 1302,
bps57600    = 868, 
bps115200   = 434; 
//个数的一半,即在周期的中间位置。进行采样。  
parameter bps9600_2   = 2604,  
bps19200_2  = 1302, 
bps38400_2  = 652, 
bps57600_2  = 434,        
bps115200_2 = 217;     

reg cnt;
reg [12:0]sample;
always@(posedge clk or negedge reset)
begin
if(!reset) begin
sample<=0;
本文介绍一种在 80C51 串行通讯应用中自动检测波特率的方法。按照经验,程序起动后 所接收到的第 1 个字符用于测量波特率。 这种方法可以不用设定难于记忆的开关,还可以免去在有关应用中使用多种不同波特率的 烦恼。人们可以设想:一种可靠地实现自动波特检测的方法是可能的,它无须严格限制可被确 认的字符。问题是:在各种的条件下,如何可以在大量允许出现的字符中找出波特率的定时间 隔。 显然,最快捷的方法是检测一个单独位时间(single bit time),以确定接收波特率应该是 多少。可是,在 RS-232 模式下,许多 ASCII 字符并不能测量出一个单独位时间。对于大多数 字符来说,只要波特率存在合理波动(这里的波特率是指标准波特率),从起始位到最后一位“可 见”位的数据传输周期就会在一定范围内发生变化。此外,许多系统采用 8 位数据、无奇偶校 验的格式传输 ASCII 字符。在这种格式里,普通 ASCII 字节不会有 MSB 设定,并且,UART 总是先发送数据低位(LSB),后发送数据高位(MSB),我们总会看见数据的停止位。 在下面的波特率检测程序中,先等待串行通讯输入管脚的起始信号(下降沿),然后起动 定时器 T0。在其后的串行数据的每一个上升沿,将定时器 T0 的数值捕获并保存。当定时器 T0 溢出时,其最后一次捕获的数值即为从串行数据起始位到最后一个上升沿(我们假设是停止位) 过程所持续的时间。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值