首页 » 通讯 » 怎么测量实际的波特率、比特率?串口通讯协议用代码怎么验证?_波特率_串口

怎么测量实际的波特率、比特率?串口通讯协议用代码怎么验证?_波特率_串口

南宫静远 2024-11-27 19:18:28 0

扫一扫用手机浏览

文章目录 [+]

什么是波特率和比特率?

比特率的英文是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电平标准用-15V表示逻辑1,+15V表示逻辑0。

在旧的台式打算机中,常日有一个RS-232标准的COM端口(也称 DB9 接口):

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

比特率代表每秒传输的二进制位数,以是我们知道传输一比特数据的韶光,我们能推导出波特率吗?从逻辑剖析仪上我们可以知道,发送一位数据的韶光如下:

发送一位数据的韶光约为8.667us,因此可以打算出一秒钟发送多少位数据:

打算出的波特率为115380bps,非常靠近115200bps。
末了,肯定是有一定的缺点。
这个缺点的缘故原由包括逻辑剖析仪的质量和我们的丈量环境。
但这个偏差也在许可范围内。
您可以看到串口助手吸收到的数据是否精确:

可以看到吸收到的数据是精确的,即波特率是精确的。

串口波特率对不上怎么办理?

在实践中。
我们可能会碰着这样情形,即代码中配置的波特率与串口助手上设置的波特率相同,但仍旧存在一个非常。

例如,如果我们向串口助手发送一个字符串,那么该当显示在串口助手上的字符串就被乱码了。
或者我们发送一个数据到串口助手,创造数据被移动了。

在这种情形下,大多数波特率都不对应,因此我们必须检讨底层文件。
如果代码中波特率打算干系值(时钟)与实际情形不符,就会涌现这样的征象。
例如,我的一位同事以前碰着过这种情形,这便是缘故原由。

在利用STM32时,常日利用外部晶体振荡器,如STM32F103系列。
外置晶体振荡器的输入范围为4~16mhz:

履历值一样平常为8MHz,而且一样平常的demo工程底层代码里默认的也是设置为8MHz,比如:

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

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

以是要把稳的是,HSE_VALUE这个值要与实际做对应。

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

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

(注:本篇图文源于网络整理,如有侵权请联系删除,感激!

相关文章

单线SPI的在线编程筹划_串口_单线

随着半导体行业的飞速发展,芯片集成度越来越高,随之研发设计出来的PCBA大小已经能和硬币比肩,功能却一点都没有受到影响,是如何做到...

通讯 2025-01-22 阅读0 评论0