串口通讯波特率出现误差的因素

串口通讯(uart)是一种异步通讯,收发双方需要按照约定的波特率进行通讯。当波特率出现误差时,会导致通讯出错。那导致波特率出现误差的因素都有哪些呢,今天就来分析一下。
1.分频误差
首先,波特率是根据系统时钟分频产生的,而系统时钟和波特率可能不是整数倍的关系,所以分频时也会产生误差。但是目前大部分mcu的系统时钟比较高,一般都在几十mhz,远远大于串口通讯波特率,所以这个误差影响很小。假设mcu时钟为48mhz,波特率为115200,48mhz/115200=416.67,按照417分频,实际波特率为48m/417=115108,误差为(115200-115108)/115200,约为0.08%,这个误差很小,对串口通讯没什么影响。 但是,当系统时钟较低,或者波特率较高时,也就是两者相差倍率较小时,这个误差就不可忽视。 对于一些较早的51内核的mcu,由于运行频率低,采用非整数的晶振(比如11.0592m等)就是为了使用常见波特率时(比如9600、115200),分频的误差尽量小。  
2.时钟误差
其次,波特率的主要误差还是取决于系统时钟的误差。那串口通讯对时钟误差的要求有多高呢? 先看串口通讯时序图:
串口通讯由起始位、数据位、校验位、停止位组成。以常见的8n1为例,即1位起始位,8位数据位,无校验,1位停止位。也就是说传输一个字节需要10bits。每一个字节都有一个起始位做同步,所以误差只会在一个字节内累计。 不难看出,在最后一个位采样时,误差最大,允许极限误差为0.5位。按照每个字节10位计算,最大允许误差为±0.5/10=±0.05,即±5%。考虑到串口通讯涉及收发两端,两端都可能存在误差,所以,每端的误差最好控制在±2.5%以内。 当数据位、校验位等较多时,要求的时钟误差就更高一些。考虑到上面所说的分频误差,一般来说,当时钟误差小于±2%时,串口通信是比较可靠的。
原文标题:uart波特率对时钟精度的要求有多高?
文章出处:【微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。


SysTick时钟
安防监控ffc排线的选择和排布,是确保画面成像质量的关键所在
SolidWorks如何在圆柱零件上打孔?异型开孔教程!
LG G6 跑分数据曝光:骁龙820+4GB内存+Android 7.0
开发一款支持主机模式的FreeModbus协议栈
串口通讯波特率出现误差的因素
区块链如何才能解决广告技术的透明度问题
PT2044单通道触摸检测芯片概述、特性及应用电路
基于单片机的LED显示监控板系统的设计
解读《企业典型场景高品质WLAN网络建设白皮书》!
聚焦CES 2013:超高清电视无法一炮打响的三大原因
关于智能化欧玛执行器与一般电动执行机构的对比
采用分立元件的视频发射电路
高通骁龙 888 进军中国大陆 5G 市场,联发科压力山大
恩智浦推出全新的射频功率器件顶部冷却封装技术,进一步缩小5G无线产品尺寸
低成本又优质PCB制造怎样找
鸿蒙能竞争过安卓吗?鸿蒙存在巨大机会
中兴通讯与GE Digital签署了战略合作协议将共同探索5G领域
步进电机驱动器细分解析
Eth-Trunk链路聚合技术的原理与配置