15200波特率_为了搞清楚串口通信为啥设置波特率

串口通信为什么要设置波特率?好奇然后查了一下资料,看见博主小小哈密瓜这么解释。

想要知道这个答案,首先我们先了解一下什么是波特率:

什么是波特率?

波特率(Baud Rate)单位 bps – 每秒传送的字节数 Byte Per Second。

波特率表示每秒钟传送的码元符号的个数,是衡量数据传送速率的指标,它用单位时间内载波调制状态改变的次数来表示。波特率是指数据信号对载波的调制速率,它用单位时间内载波调制状态改变的次数来表示,其单位是波特(Baud)。
在这里插入图片描述
串口通信为什么要设置波特率?
有两种比较可靠的说法:
1、根据电、传输介质等的物理特性结合串口设备使用的要求

为了保证有效通讯,根据电、传输介质等的物理特性结合串口设备使用的要求,确定RS232最大传输速率只能是115200,然后逐级二分得到57600,28800,19200……为适应这些速率,设计相应的晶振频率。
在这里插入图片描述
2、这是由电信线路特性决定的

电话线路的带通是300–3KHz,当时hayes先搞的modem,所以用的2400HZ信号,对应波特率是2400。由于基本频率确定了,以后采用的提高通讯速率的方法都是在2400基础上倍频的,所以形成了9600.19200……

不管哪种说法,都是先有波特率再有晶振频率。
在这里插入图片描述
单片机串口通信波特率计算
在模式0和模式2下,串口波特率固定,模式0为Fosc/12。模式2为Fosc/32或Fosc/64,具体由PCON寄存器的SMOD位决定。

在模式1和模式3下,波特率是一个可变值,波特率可以由定时器1产生(8052可以由定时2产生),那么波特率到底为多少呢?

波特率由定时器1的溢出率来决定:
Baud Rate = (2SMOD/32)*(Timer 1 Overflow Rate)

注意:2SMOD这里的SMOD是指数,SMOD为波特率双倍波特率位,该位在PCON寄存器中。

当使用timer 1作为波特率产生器时,通常需要将timer 1配置成8位自动重装的工作模式下,同时还要禁止timer 1中断,那么timer 1的溢出率是怎样计算的呢?溢出率即溢出的频率,假设晶振频率为12MHz,TH1值为0xFE,则只需要两个时钟脉冲就会溢出,溢出的周期为2us,那么溢出的频率就为500KHz。
在这里插入图片描述
根据定时器一节,定时时间有如下计算公式:

定时时间=(最大计数值-计数器初值)机器周期=(最大计数值-计数器初值)(12/晶振频率(Hz))(s)=(256-TH1)*(12/OSC_FREQ(Hz))(s)。
那么溢出频率自然就为:
*OSC_FREQ(Hz)/((256-TH1)12)。
所以最后推导出波特率为:
*(2SMOD/32)*(OSC_FREQ(Hz)/((256-TH1)12))。
在这里插入图片描述
波特率的计算公式有了,那自然就可以根据波特率推导出TH1的初值了:

BAUD_RATE=(2SMOD/32)(OSC_FREQ(Hz)/((256-TH1)12))

3212(256-TH1)=(2SMOD*OSC_FREQ(Hz))/BAUD_RATE

256-TH1=(2SMODOSC_FREQ(Hz))/(BAUD_RATE32*12)

TH1=256-(2SMODOSC_FREQ(Hz))/(BAUD_RATE32*12)
在这里插入图片描述
假设晶振频率为11.0592MHz,波特率为9600,SMOD=0,TH1初值应该为多少呢?根据上面公式可以计算得TH1=256-11059200/(96003212)=0xFD。

波特率和字节的关系
1GB=1024MB

1MB=1024KB

1KB=1024B(字节)

我们需要串口接收的数据数每秒512字节,串口的波特率是115200位/秒

波特率115200=115200(位/秒)

如果没有校验位,就应该除以10,得到的是每秒字节数:波特率115200=115200(位/秒)=11520(字节/秒)

再除以1024,就是每秒KB数:波特率115200=115200(位/秒)=11.25(KB/秒)也就是满足每秒可以接收512字节。

原文链接:https://blog.csdn.net/weixin_36372610/article/details/113039945

猜你喜欢

转载自blog.csdn.net/qq_28077617/article/details/127234411