1. 首页
  2. 综合百科
  3. 比特率和波特率的关系和区别(详解波特率计算公式及含义)

比特率和波特率的关系和区别(详解波特率计算公式及含义)

简介:关于比特率和波特率的关系和区别(详解波特率计算公式及含义)的相关疑问,相信很多朋友对此并不是非常清楚,为了帮助大家了解相关知识要点,小编为大家整理出如下讲解内容,希望下面的内容对大家有帮助!
如果有更好的建议或者想看更多关于综合百科技术大全及相关资讯,可以多多关注茶馆百科网。

通常用串口打印乱码,多半是因为串口的波特率不对。那么我们应该如何测量实际的波特率呢?在此之前,我们先来回顾一下波特率的概念。

什么是波特率和比特率?

比特率的英文单词是Bitrate,意思是每秒传输的二进制比特数,单位是bit/s。

Baudrate,即每秒传输的符号数,是衡量数据传输速率的指标。

符号是通信信号调制的概念。通信中通常用具有相同时间间隔的符号来表示二进制数。这种信号被称为符号。

在普通的通信传输中,0V代表数字0,5V代表数字1,所以一个符号可以代表0和1两种状态,所以一个符号等于一个二进制位,波特率和比特率是一致的。

如果0V、2V、4V、6V在通信传输中分别代表二进制数字00、01、10、11,那么每个符号可以代表四种状态,即两个二进制数字,那么符号的个数就是二进制数字个数的一半,波特率就是比特率的一半。

因为在很多常见的通信中,比如串行通信,一个符号代表两种状态,所以我们通常直接用波特率来表示比特率。

串口通讯协议

在串行通信的协议层,它规定了数据包的内容,由起始位、主数据、校验位和停止位组成。为了正常发送和接收数据,双方的数据包格式应该一致。数据帧由以下内容组成:

我们来实际验证一下数据帧是不是真的这样,写下面的代码:

代码很简单,就是利用串口连续发送数据0xAA(当然也可以发送其他数据)。我们的串口配置如下:

我们可以用示波器或逻辑分析仪抓取实际信号,看看数据是否符合上述格式。这里,我们使用逻辑分析仪捕捉usart1的传输信号线(TX ):

从实际结果来看,确实是按照帧格式发送的。有些人可能对此有疑问。上述数据帧的图片中有一个空闲状态。这是什么?空闲,空闲,当然不是在发送数据的状态,我们把代码改成:

初始化完成后,仅发送一个0XAA,逻辑分析仪捕获的数据为:

可见空闲状态高。在前面的例子中,我们在while循环中发送了数据0XAA,所以没有空闲状态。

在这个实验中,我们需要知道两件事:

串口发送的数据是低位优先。我们的微控制器发送0XAA(10101010B),逻辑分析仪采集的有效数据是01010101b。

单片机的串口使用TTL电平,是正逻辑电平信号。逻辑分析仪采集的数据0对应实际电压0~0.5V,数据1对应实际电压2.4v~5V。

RS-232电平标准经常与TTL电平标准相比较。举个例子,

TTL电平标准常用于普通电子电路中。在理想状态下,5V代表二进制逻辑1,0V代表逻辑0。为了提高串行通信的远距离传输和抗干扰能力,RS-232电平标准对逻辑1采用-15V,对逻辑0采用15V。

在老式台式计算机中,通常有一个RS-232标准的COM端口(也称为DB9接口):

在这个示例程序中,我们将串行端口的波特率设置为115200bps。在串行通信中,符号只由一个二进制数表示(即只有0和1两种状态),所以波特率和比特率是相等的。

比特率代表每秒传输的二进制位数,因此我们知道传输一位数据所需的时间。我们能推导出波特率吗?从逻辑分析仪中,我们可以知道发送一位数据的时间如下:

发送一位数据大约需要8.667us,因此您可以计算一秒钟发送多少位数据:

计算出的波特率为115380bps,非常接近115200bps。最后,肯定有错误。这个错误的原因包括逻辑分析仪的质量和我们的测量环境。但这个误差也在允许范围内。您可以查看串行助理接收的数据是否正确:

可以看出,接收的数据是正确的,也就是波特率是正确的。

串口波特率对不上怎么解决?

在实践中。我们可能会遇到这样的情况,代码中配置的波特率与串行助手上设置的波特率相同,但还是有例外。

例如,如果我们向串行助手发送一个字符串,那么应该在串行助手上显示的字符串将会是乱码。或者我们发送一个数据给串口助手,发现数据被移动了。

在这种情况下,大多数波特率不对应,所以我们必须检查底层文件。如果代码中的波特率计算相关值(时钟)与实际情况不符,就会出现这种现象。比如我的一个同事以前就遇到过这种情况,就是这个原因。

使用STM32时,通常使用外部晶振,如STM32F103系列。外部晶振的输入范围为4~16mhz:

oscript>

经验值一般为8MHz,而且一般的demo工程底层代码里默认的也是设置为8MHz,比如:

但是如果实际晶体振荡器没有粘贴8m,就会出现问题(例如串口波特率不正确)。追溯到源代码,串口波特率被分配到USART_Init函数中的,打开这个函数:

计算串口波特率需要一个apbclock变量,而这个值得来源从RCC_GetClocksFreq函数来,再打开这个函数:

所以要注意的是,HSE_VALUE这个值要与实际做对应。

遇到这种问题找谁说理去。经验就是不断采坑不断积累的一个过程,早点遇到坑可能也是一件好事。像类似底层的问题很少遇到,但是一旦遇到那就得比较棘手的问题了,需要很有耐心地去查找。

能用稳定的芯片是一件很幸福的事情,用不稳定、不成熟的芯片的时候,那个才是真的难啊,遇到问题真是让人怀疑人生啊,软件、硬件、芯片都可能有问题。

本文主要介绍了关于比特率和波特率的关系和区别(详解波特率计算公式及含义)的相关养殖或种植技术,综合百科栏目还介绍了该行业生产经营方式及经营管理,关注综合百科发展动向,注重系统性、科学性、实用性和先进性,内容全面新颖、重点突出、通俗易懂,全面给您讲解综合百科技术怎么管理的要点,是您综合百科致富的点金石。
以上文章来自互联网,不代表本人立场,如需删除,请注明该网址:http://seotea.com/article/724997.html