串口通讯到底有没有累积误差及对时钟精度的要求

  • 1. 问题背景:

  • 2. 问题分析:

  • 3. 总结:

1. 问题背景:

对于嵌入式开发者来说,串口应该是应用最广泛的模块,在日常客户支持过程中经常会有客户问到一些关于串口通讯稳定性的问题,比较典型的几个问题如下:

  • 在9600波特率能工作,但切换到115200就无法正常通讯,是不是和时钟精度有关系?

  • 串口稳定通讯对时钟精度的要求是多少,是否波特率配置越高对时钟精度要求就越高?内部RC能否满足?

  • 串口正常通讯了一段时间后通讯出错,是不是因为累计误差太大了?

尽管网上铺天盖地的串口配置的资料,但对这些具体问题的描述确实不多,于是好好研究了一番。

2. 问题分析:

4333c477ba9207b6d17331f791753e17.png

想回答这些问题还要从串口通讯的采样时序说起,如上图所示,根据串口的采样特点不难看出,对于发送端来说,数据是在上升沿被drive到总线上,接收端在每个bit的中间位置采样,这就意味着在最后一个Bit位采样时,允许极限偏移为50%,假如用1个起始位+9个数据位+1个奇偶校验位+1个停止位来计算,那么每位偏差最高为:

±50% / 12 = ±4.16%

Note: 对于有些支持过采样的串口来说,采样点可能不是50%中间位置,一般会更靠后,此处不展开讨论;

假如用1个起始位+8个数据位+1个停止位来计算,那么每位偏差最高为:±50% / 10 = ±5%

而串口通信,要涉及到发送和接收两端,当一端为0误差,另一端最大误差可到4.16%,如果两端误差相同,那每端的最大误差就只能是2.08%,这也就是为什么很多硬件老法师建议串口的波特率误差控制在2%以内。

±4.16% / 2 = ±2.08%

因此,对于串口通信来说,可以粗略认为,当时钟误差小于±2%时,通信是比较可靠的。对于客户实际的应用系统,考虑到UART是一个异步通讯,通讯的稳定性取决于双方的时钟精度,不是说只有一方的精度满足要求,系统就能正常工作,所以需要系统去考虑。

3. 总结:

基于以上的分析,可以得出结论如下:

  • 串口稳定通讯和双方的时钟精度和有关,总误差不能超过±4.16%,对于大部分全温度范围±1%的MCU来说,都能满足基本的通讯需求。

  • 串口通讯的累计误差发生在每次数据(也可以简单理解成每个字节,只是字节不严谨,因为有时数据可能是9 bits)发送内部,连续的多次发送之间没有累计误差,因为连续的多个字节发送都会被Start起始信号进行重新同步,也就是说传输1个字节的误差和传输1000个字节的误差基本差不多;

  • 串口是否稳定通讯和波特率大小无关,并非波特率配置越高对时钟精度要求就越高,只和每次发送的串口数据长度(包含起始位/数据位/奇偶校验位/停止位长度)有关, 位长越长,对时钟精度要求越高;

  • 对于使用串口实现的LIN通讯,以上结论也基本适用;

  • 以上结论仅从采样时序的角度分析,不考虑外界电磁干扰的影响,因为通常波特率越高,每位数据的时间长度越短,就越容易受到电磁干扰从而导致通信不可靠。

2bf520ff79973111775a0dd9abbafe8c.jpeg

c258667b7e62b5b2cc38793929f7e281.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/463898.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微软中国职位[北京工作]

前两天HR给的最新职位需求,园子里有兴趣的朋友可以Mail给我。 E: v-petezmicrosoft.com Position Overview: Are you ready to deliver world class IT solutions for the best legal department in the world? Microsoft Legal & Corporate Affairs IT (L…

oracle中的merge into用法解析

oracle中的merge into用法解析merge into的形式MERGE INTO [target-table] A USING [source-table sql] B ON([conditional expression] and [...]...)WHEN MATCHED THEN[UPDATE sql]WHEN NOT MATCHED THEN[INSERT sql]作用:判断B表和A表是否满足on条件,…

《统一沟通-微软-实战》-3-部署-Exchange 2010-1-先决条件

参照: http://technet.microsoft.com/zh-CN/library/bb691354.aspx 先决条件 加域请确保林的功能级别至少为 Windows Server 2003,并确保架构主机运行 Windows Server 2003 Service Pack 1 或更高版本。有关 Windows 功能级别的详细信息,请参阅管理域和林…

写给打工人的职业发展观

转发火哥的一篇文章为什么要去一线城市打工现在网上很多这样的话题:深圳的高房价会导致人才流失吗?年轻人是不是在逃离北上广?一线城市工资是老家省会的一倍,消费,房租也比老家省会贵一倍,赚多少花多少&…

C++中string.find()的误用

下面的结果是什么&#xff1f; #include <iostream> #include <string> using namespace std; int main() { string s "abc"; if(s.find("x")) { cout << "yes" << endl; …

在线MSN代码(如同QQ在线咨询那种的)

在你需要显示MSN咨询的地方添加如下代码&#xff1a; <!--Msn网页在线代码开始--><a href"msnim:chat?contactabcdwxc21com.com"><img height"40"alt"msn:abcdwxc21com.com"src"msn.GIF"width"26"align&quo…

学习批处理之安装一键装机必备软件

经常装机需要装一些常备软件&#xff0c;麻烦而又无聊&#xff0c;就写个批处理&#xff0c;权当练练手。环境是批处理和常备软件包在一个文件内&#xff0c;直接copy文件夹到客户机&#xff0c;点击批处理执行即可。缺陷是常备软件非绿化版&#xff0c;启动安装时还得点“下一…

结构化操作语义

结构化操作语义 50年代是计算机语言兴起的年代&#xff0c;这一阶段的早期&#xff0c;计算机语言的设计往往要强调其"方便"的一面&#xff0c;而比较忽略其"严格"的一面&#xff0c;因而对语言的语义&#xff0c;甚至语法&#xff0c;未下严格的定义&…

RISC-V Linux 启动流程分析

“Author: 通天塔 985400330qq.comDate: 2022/05/15Revisor: lzufalcon falcontinylab.orgProject: RISC-V Linux 内核剖析”说明&#xff1a;RISC-V Linux 内核兴趣小组旨在围绕 RISC-V 处理器架构系统地研究 Linux 内核以及上下栈中的技术&#xff0c;为国内 RISC-V 生态…

两个栈来实现一个队列的C++代码

转载&#xff1a;http://blog.csdn.net/stpeace/article/details/46765343 利用两个栈来实现一个队列&#xff0c; 这个问题很常见。 最关键的是要有好的思路&#xff0c; 至于实现&#xff0c; 那是很简单的事情了。 在本文中&#xff0c; 也想说说自己的思路&#xff0c; 但…

解读设计模式----单例模式(Singleton Pattern)

单例模式可以保证一个类有且只有一个实例,并提供一个访问它的全局访问点.在程序设计中,有很多情况需要确保一个类只能有一个实例.从这句话可以看出,Singleton模式的核心&#xff1a;如何控制用户使用new对一个类的实例构造器的任意调用。如何绕过常规的构造器&#xff0c;提供一…

网站开发的小知识参考(慢慢收集备用)

inetinfo.exe占用80端口的解决方法 我在本机配置PHP环境时&#xff0c;安装的时候遇到80端口被占用&#xff0c;经过查询才知道&#xff0c;原来是Inetinfo.exe占用了80端口&#xff0c;于是把Inetinfo.exe服务关掉就可以正常安装PHP环境了。解决方法在windows服务管理里&#…

Linux下如何搭建Java环境

软件环境 虚拟机&#xff1a;VMware Workstation系统&#xff1a;Linux&#xff1a;CentOS-7-x86_64工具&#xff1a; 安装工具&#xff1a;SSH客户端搭建步骤 1&#xff1a;查询当前系统版本 cat /proc/version2&#xff1a;首先确认当前系统是否已经存在java环境 java -vers…

程序中提升几毫秒、节省几 kB 的内存有必要吗?

我记得我上小学的时候有一篇课文&#xff0c;说是有一个人很节省&#xff0c;不仅他自己家里节省&#xff0c;如果别人家吃饭乱扔的剩饭&#xff0c;他都会去收拾起来晒干存起来。然后刚好有一年饥荒&#xff0c;大家都没有米吃了&#xff0c;他就把他那些年存起来的米给大家吃…

pthread_join()函数理解

pthread_t tid; 使用方式&#xff1a;pthread_join(tid,NULL); 为什么要使用pthread_join()&#xff1f; 在很多情况下&#xff0c;主线程生成并起动了子线程&#xff0c;如果子线程里要进行大量的耗时的运算&#xff0c;主线程往往将于子线程之前结束&#xff0c; 但是如果主…

SmartTemplate学习入门一

php最简单的模板 Array的变量是由SmartTemplate内建函数assign&#xff08;&#xff09;来赋值的 具体语法如下 assign ( 模版中的变量, 要替换的内容 ) 或 assign ( Array内容 ) 和其他程序的变量一样&#xff0c;smartTemplate的变量是由特殊的{}所包含的。里面的内容可以是S…

人生感言

马云说的一些话&#xff0c;还是值得思考的&#xff1a; (1)、细节好的人格局一般比较差 (2)、态度比能力重要&#xff0c;选择同样也比能力重要 (3)、领导比员工多什么&#xff1f; 领导永远不要跟下属比技能&#xff0c;下属肯定比你强&#xff1b;如果不比你强&#x…

当MCU死机了,先把硬件抓过来~

关于软件开发中的偶发性问题&#xff0c;有些处理办法看似不是很难&#xff0c;但其实最重要的还是对问题的敏感度&#xff0c;而这份敏感度就来源于你对整个系统的理解和把握。当你能够尽快缩小问题代码的范围&#xff0c;在一定程度上就已经加快了解决问题的进度。之前我曾提…

青蛙学Linux—NFS

NFS&#xff0c;Network File Syttem&#xff0c;网络文件系统。它允许网络上运行不同操作系统的主机通过网络连接到运行NFS服务的主机上&#xff0c;以实现数据共享。NFS的配置非常简单&#xff0c;经过简单的设置既能快速使用NFS。 使用NFS&#xff0c;首先在服务端运行NFS服…

extjs 学习中

首先找了个js得开发工具&#xff1a;Komodo Edit 但是安装了好多次都没有出现提示&#xff0c;均告失败&#xff01;今天再次鼓起勇气安装试试&#xff1a;首先安装Komodo-Edit-4.3.2-1263; 成功&#xff01;然后&#xff1a; 下载extjs_api_catalogs-2.0.2-ko.xpi &#xff…