百科生活 投稿
关于【串口波特率有哪些】:串口波特率(常用的串口波特率有哪些),今天小编给您分享一下,如果对您有所帮助别忘了关注本站哦。
- 内容导航:
- 1、为了搞清楚串口通信为啥设置波特率,我查了3天资料,总算搞懂了
- 2、串口波特率(常用的串口波特率有哪些)
1、为了搞清楚串口通信为啥设置波特率,我查了3天资料,总算搞懂了
串口通信为什么要设置波特率?想要知道这个答案,首先我们先了解一下什么是波特率:
什么是波特率?
波特率(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))
32*12*(256-TH1)=(2SMOD*OSC_FREQ(Hz))/BAUD_RATE
256-TH1=(2SMOD*OSC_FREQ(Hz))/(BAUD_RATE*32*12)
TH1=256-(2SMOD*OSC_FREQ(Hz))/(BAUD_RATE*32*12)
假设晶振频率为11.0592MHz,波特率为9600,SMOD=0,TH1初值应该为多少呢?根据上面公式可以计算得TH1=256-11059200/(9600*32*12)=0xFD。
波特率和字节的关系
1GB=1024MB
1MB=1024KB
1KB=1024B(字节)
我们需要串口接收的数据数每秒512字节,串口的波特率是115200位/秒
波特率115200=115200(位/秒)
如果没有校验位,就应该除以10,得到的是每秒字节数:波特率115200=115200(位/秒)=11520(字节/秒)
再除以1024,就是每秒KB数:波特率115200=115200(位/秒)=11.25(KB/秒)也就是满足每秒可以接收512字节。
(来源:网络)
2、串口波特率(常用的串口波特率有哪些)
串口波特率(常用的串口波特率有哪些)
1.波特率是多少?
无论是什么单片机,在使用串行通信时,都有一个非常重要的参数:波特率。什么是波特率:波特率是每秒传输的字节数。在数据传输过程中,波特率是一样的,这是通信成功的基本保证。以STM32单片机为例,说明串口波特率的计算方法。
2.与STM 32波特率相关的寄存器
STM32单片机设置波特率只有一个寄存器:USART_BRR寄存器,如下图所示。
波特率寄存器
该寄存器有16个有效位,前4位用于存储小数部分,后12位用于存储整数部分。波特率计算出来后,只需填写波特率即可。下面是如何计算的。
3.波特率计算方法
STM32的数据手册给出了计算方法,并有公式,如下图所示:
计算公式
在这个公式中,有三个变量,其中两个我们知道,Fck和Tx/Rx波特率已知,USARTDIV未知。根据这个公式的描述,如果使用USART1,那么Fck为PCLK2=72MHz,否则为PCLK1=36MHz,参数Tx/Rx波特率已知。只需计算USARTDIV的值,并将其分配给USART_BRR寄存器。以115200为例,公式变形后得到usart div = 72×1000000/(16×115200)= 39.0625。只需将39.0625写入USART_BRR即可。
如前所述,USART_BRR的前4位存储小数部分,后12位存储整数部分。
小数部分DIV _ Fraction = 0.0625× 16 = 1 = 0x01;
那个整数部分DIV _尾数= 39 = 0x27;
那么USART _ BRR = 0X271;
数据手册为我们提供了一份数据手册:
形式
在该数据手册上,已经计算出常用的波特率值,我们可以直接使用它们。但是如果我们想让波特率计算成为一个传递函数,
比如:USART_INIT(uint_t 16波特率),调用时只需要写USART_INIT(9600)和USART_INIT(115200)。程序怎么写?
4.方案的实施
以下是程序的注册版本。
代码部分
程序第一步包括两行:首先计算USART_DIV,这是之前公式的变形;
程序第二步第三行:获取USART_DIV的整数部分;
第三步,程序第四行:获取USART_DIV的小数部分;
程序的第四步是5行:将整数部分左移4位,即存入BRR寄存器的最后12位;
第五步,第六行:合并整数和小数部分,即重组前4位和后12位;
第6步,第7行:将计算值分配给BRR寄存器。
完成了以波特率为参数的功能。从以上来看,波特率的计算似乎并不是很难。
欢迎关注头条“玩嵌入式”,获取更多电子设计知识!
本文关键词:串口波特率,串口波特率有哪些值,串口波特率计算公式,串口波特率设置,stm32串口波特率。这就是关于《串口波特率有哪些,常用的串口波特率有哪些(为了搞清楚串口通信为啥设置波特率)》的所有内容,希望对您能有所帮助!
- 最近发表