▲ 更多精彩内容 请点击上方蓝字关注我们吧!
比特率(Bitrate)
表示每秒钟传输的二进制
位数,单位为比特每秒(bit/s)。波特率(Baudrate)
表示每秒钟传送的码元
符号的个数,是衡量数据传送速率的指标。码元
是通讯信号调制的概念,通讯中常用时间间隔相同的符号来表示一个二进制数字,这样的信号称为码元。比如串口通讯
)中一个码元都是表示两种状态,所以大家常常直接以波特率来表示比特率 。0xAA
(当然发送其它数据也是可以的) 。我们的串口配置如下:发送信号线(TX)
:0xAA
,逻辑分析仪抓到的数据为:while
循环中发送数据0xAA
,所以就没有空闲状态。0xAA(10101010B)
,所以逻辑分析仪抓到的有效数据是01010101B
。TTL电平
,为正逻辑电平信号。逻辑分析仪抓到的数据0对应着实际电压0~0.5V
,数据1对应着实际电压2.4V-5V
,TTL电平标准
做对比的是RS-232电平标准
,如:COM 口
(也称 DB9 接口
) :115200bps
。在串口通讯中,码元只用1个二进制数来表示(即只有0 和 1两种状态),所以波特率与比特率在数值上是相等的。二进制
位数,那我们知道传一位数据的时间岂不是就可以反推出波特率是多少了吗?从逻辑分析仪中,我们可以知道发送一位数据的时间如下:8.667us
,所以1秒钟发送多少位数据是可以算出来的:115380bps
,与115200bps
很相近。最终肯定是有一定的误差,这个误差产生的原因包括逻辑分析仪的质量及我们的测量环境等等因素。但是这个误差也是在允许的范围内的,可以看看串口助手接收到的数据是不是正确的:波特率对应不上
,我们就得自己检查我们的底层文件了,代码中的某个与波特率计算相关的值(时钟)与实际不匹配了,就会出现这样的现象,比如之前我的一位同事就遇到这样的情况就是这个原因导致的。STM32F103
系列,可输入的外部晶振的范围是4~16MHz
:8M
的话,就出问题了(比如串口波特率就不正确了)。追根溯源,串口波特率是配进USART_Init
函数中的,打开这个函数:apbclock
变量,而这个值得来源从RCC_GetClocksFreq
函数来,再打开这个函数:HSE_VALUE
这个值要与实际做对应。免责声明:本文系网络转载,版权归原作者所有。如本文所用视频、图片、文字如涉及作品版权问题,请在文末留言告知,我们将在第一时间处理!本文内容为原作者观点,并不代表本公众号赞同其观点和对其真实性负责。
推荐阅读
干货|开关电源中的光耦经典电路设计分析
干货 | 盘点开关电源中的缓冲吸收电路
干货 | 实用解析: 电源损耗的评估与计算
干货|资深工程师分析运放电路PCB设计技巧
在公众号内回复您想搜索的任意内容,如问题关键字、技术名词、bug代码等,就能轻松获得与之相关的专业技术内容反馈。快去试试吧!
由于微信公众号近期改变了推送规则,如果您想经常看到我们的文章,可以在每次阅读后,在页面下方点一个「赞」或「在看」,这样每次推送的文章才会第一时间出现在您的订阅列表里。
或将我们的公众号设为星标。进入公众号主页后点击右上角「三个小点」,点击「设为星标」,我们公众号名称旁边就会出现一个黄色的五角星(Android 和 iOS 用户操作相同)。