串口的波特率最大偏差多少,就失效?

您所在的位置:网站首页 误差允许在多大范围内 串口的波特率最大偏差多少,就失效?

串口的波特率最大偏差多少,就失效?

2023-06-11 13:38| 来源: 网络整理| 查看: 265

“这2个商品是否能互换? “

“你们卖的IC是否是正品?”

“我的产品以前用到的这个IC一直很正常,最近这批功能失效,请帮忙分析。。 ”

立创商城的在线技术客服人员,每天就是这样,都很忙的。。

每天都可以接到来自天南地北、五湖四海的用户各色各样的咨询或投诉。

最近接触到2个类似的问题,都是由于单片机内部的RC时钟引起的误差而导致的产品失效,比如 Uart串口通信(常温不可以通信,温度高才行)、Watchdog看门狗复位失灵等等。

考虑到之前,常听到不少网友疑惑类似这样的问题 “串口波特率的最大偏差多少,对方就不能接收了或出错了?”

其实这个问题,可以简单成这样的数学逻辑,先看下最常见的10位串口的输出时序( 1个起始位 + 8个数据位  + 1个停止位 )

以上图中,绿色箭头是采样时间点。

关于这个采样点,不同的IC芯片或许有些不同,但多数是是以16倍的目标波特率,"等时”进行采样N个点,N个点一样就认为该位的电平采样值是对的,而且多数是采样位的中点。

具体来说,串口波特率的最大偏差多少,对方就不能接收了或出错了呢?

实际上,可以简单认为是这样:

如上图所示,我们要确保实际波特率对应的 t0 ~ t9 时区段,都分别落在对方波特率的采样点的范围内,

即:

第1个位的采样点应该落在这个区间: [ 0~ t0  ]

第2个位的采样点应该落在这个区间: [ t0~ t1 ]

第3个位的采样点应该落在这个区间: [ t1~ t2]

以此类推。。。。

为此,今天大概花费了一点点时间,做了一个简单的程序演示,输入正常的波特率,就可以推算出最大或最小的波特率的数值,还有偏差率。

从多个常见的波特率推送来看,最大偏差一般在5% 以内都可以正常通信。

但考虑到不同芯片的采样点的方式有所不同,以及一帧的串口位不同(数据位越长,累计的偏差会更多),这个值还得具体分析,建议大家确保波特率控制在2%以内最好。

看看这个视频演示

http://v.youku.com/v_show/id_XMzA4MDg4ODc1Ng==.html?firsttime=4&qq-pf-to=pcqq.c2c#paction

对应的代码片段:

void CTestBaudDlg::OnButton2()  { // TODO: Add your control notification handler code here float Ibit[10]; //------ 存储时间波特率的时间点 float Sbit[10]; //------ 存储标准波特率的采样点 float  sBaud=115200.0; float  iBaud=115200.0; unsigned char n,i; CString str; UpdateData(true); float k = (float)atof(m_EDIT1.GetBuffer(0)); //---- 取得标准波特率的值 iBaud = k; sBaud = k; str.Format("最初的 iBaud = %f", iBaud); m_EDIT1.Format(str); //------------------- 标准采用的时间点, 每个Bit对应的时间点 for(n=0;n



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3