首页 > 其他分享 >USART-CH32FV1x_2x_V3x--串口波特率误差分析及计算

USART-CH32FV1x_2x_V3x--串口波特率误差分析及计算

时间:2023-05-06 11:58:44浏览次数:38  
标签:误差 通讯 USART 16 串口 波特率 时钟

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

串口通讯是一种异步通讯,收发双方需要按照约定的波特率进行通讯。当波特率出现误差时,在一些高精度要求场所可能会导致通讯出错。

那导致波特率出现误差的因素都有哪些呢,今天就来分析一下。

1.分频误差

 

首先,波特率是根据系统时钟分频产生的,而系统时钟和波特率可能不是整数倍的关系,所以分频时也会产生误差。但是目前大部分MCU的系统时钟比较高,

一般都在几十M甚至几百M,远远大于串口通讯波特率,所以这个误差影响很小。那么这个误差具体该怎么计算呢,我们可以看下手册。

根据手册,假设我们波特率为230400,串口时钟为36M,那么我们算得USARTDIV=9.765625,我们发现小数部分0.795625*16=12.25,取最接近整数的那就

是12,后12/16=0.75,那么正常填入波特率寄存器的值为9.75而不是9.765635,后我们根据9.75反推波特率的值,36M/(9.75*16)=230769,那么我们误差这时

就算出来了,(230769-230400)/230400=0.16%。同时计算时有些特殊结果需要注意,如要求 USARTDIV = 50.99
就有:
DIV_Fraction = 16*0.99 = 15.84
最接近的整数是: 16 = 0x10 => DIV_frac[3:0]溢出 => 这时进位就必须加到小数部分了
于是: USART_BRR = 0x330, USARTDIV=51,那么我们这时就该以51来反推实际波特率是多少了!
2.时钟误差

          时钟误差也是必须考虑到的,如果采用内部时钟,温度对于内部时钟的稳定性影响肯定是大于外部时钟的,所以如果对此要求高,采用外部时钟是有必

要的。串口通讯由起始位、数据位、校验位、停止位组成。以常见的8N1为例,即1位起始位,8位数据位,无校验,1位停止位。也就是说传输一个字节需

要10bits。每一个字节都有一个起始位做同步,所以误差只会在一个字节内累计。 不难看出,在最后一个位采样时,误差最大,允许极限误差为0.5位。按照

每个字节10位计算,最大允许误差为±0.5/10=±0.05,即±5%。考虑到串口通讯涉及收发两端,两端都可能存在误差,所以,每端的误差最好控制在±2.5%以

内。 当数据位、校验位等较多时,要求的时钟误差就更高一些。考虑到上面所说的分频误差,一般来说,当时钟误差小于±2%时,串口通信是比较可靠的。

 

经验

       之前在于立讯合作的一个项目中,由于他们合作方采用了一个低速光耦,导致串口波形失真严重,从而我们芯片无法准确采样到,但逻辑分析仪确是可以准

确分析出来,当然这个不能怪芯片原因,因为毕竟两者的采样规律可能是不同的。所以最后我们采用了模拟串口的方法,这样采样点我们可以自定义,这时直接

模拟分析仪的采样点就可以准确分析出来了!

 

标签:误差,通讯,USART,16,串口,波特率,时钟
From: https://www.cnblogs.com/wchmcu/p/17376699.html

相关文章

  • python 串口读取gps
    #coding:utf-8#lastmodified:20220824importtimeimportserialimportre utctime=''lat=''ulat=''lon=''ulon=''numSv=''msl=''cogt=''cogm='&#......
  • C# 串口通信
    这里浅说一下蓝牙与串口的区别:        蓝牙:连接以mac地址为主,显示名称可以更改,低功耗蓝牙还需要配置服务与特征(服务有读,写,可读可写区别)特点:不同设备连接同一台蓝牙设备,mac地址与显示名称都是唯一的    串口:连接以端口名称为主,例如com1,com2,连接时需要配置参数......
  • 虚拟串口工具VSPD简单使用
    1、下载资源下载 [虚拟串口+串口调试工具]2、安装及破解解压vspd7.2.308.zip件如下,点击vspd.exe安装(安装没啥技巧一直下一步就好了,不过需要记住安装地址),在安装完成之后vspdctl.dll覆盖至安装文件夹覆盖掉原有文件(破解) 3、创建虚拟串口运行软件如下:点击新增,虚拟串......
  • 在 linux-4.9/drivers/usb/serial/ch341.c 上串口收发数据异常
    有天做USBhost串口驱动的时候发下FT\CP都没有问题,就CH341有问题,读写正常,但数据不正常。有一点稀奇,可能是ch中间有版本变更了吧。解法就更新到https://github.com/torvalds/linux/blob/master/drivers/usb/serial/ch341.c最新的代码就行,有一些函数有出入,但大体影响......
  • 如何在Linux检查并使用串口
    原文译至:http://www.cyberciti.biz/faq/find-out-linux-serial-ports-with-setserial/如何根据不同的需求(如modem,连接空的module或连接到一个dumb终端)在Linux下检查并配置串口呢?Linux提供了各种工具,Linux使用ttySx作为一个串口设备的名称。例如,COM1(DOS/Windows名字)是t......
  • "IWR1642单帧串口数据采集" 一些问题与解决
    公众号【调皮连续波】【正文】问题描述:最近,有粉丝在使用TIIWR1642BOOST评估板时,不采用DCA1000,利用单板的串口输出一帧数据时,出现数据显示不全的问题。以下是出现问题时输出的不完全的数据帧:(数据帧的帧头部分经过注释处理,其中的HEX内容和原始数据是一致的)可以看到上述数据帧的总字......
  • RTThread使用DMA串口接收数据不连续的问题
    RTThread使用DMA接收串口数据的问题问题/现象解决方式解决方式①解决方式②其它疑问问题/现象使用RTThread的DMA接收串口数据,数据不连续,即IDLE中断没有起到作为一个frame的判定.经过对serial和drv_uarts源码的分析,得出原因:graphLRRX_INT[USART1_IRQHandler]-......
  • LINUX C、QT上位机间串口传输数据库文件
    在串口传输文件时,我们通常希望以二进制形式将文件发送出去,因为这样可以避免文件内容被解释为ASCII码,并且可以减少数据传输的时间和数据量。在QT上位机中可以使用以下方式将文件读取并发送出去://读取本地SQLite3数据库文件QStringfilename="wifi_UAV.db";QFilefil......
  • LINUX 串口设备行规程——回车检测机制
    做项目时调用串口,遇到了只有存在回车时才能read到数据的情况,这是设置了行规程的结果。禁用行规程即可取消按行读取机制,如下:(建议大部分情况下都禁用)newtio.c_lflag&=~ICANON;......
  • J-link自带的串口发不出校验位
    买了个j-link,外观如下图: 安装驱动之后它的5号引脚和17号引脚可以当做串口的TXD和RXD,在设备管理器中显示如下图: 用起来非常的方便。但是最近参与的项目中要用到校验位,发现了问题。用逻辑分析仪测试发现即便串口调试助手中设置了校验位,但是发送出去的数据中依然不......