UART 波特率选择的认识与理解
笔者前几天碰到了串口波特率的问题,想要1M以上的波特率,发现波特率总是乱码,常用标准的几种波特率也不是很好用。
1、UART时钟情况说明
ch340G模块,时钟为12MHZ。
某PMC开发板,ARM Coretex A53内核,主频为1.6G,串口时钟为6.25MHZ,理论最大支持2Mbit/s。
该开发板的串口波特率是通过分频而来。
Baud Rate = 625000/(UDLH <<8+UDLL)
2、理论计算
当选择常用的波特率时,开发板分出的波特率时钟的偏差。
波特率 | 总时钟 | 分频系数 | 误差计算 |
---|---|---|---|
115200 | 6250000 | 54 | 0.47% |
128000 | 6250000 | 48 | 1.7% |
230400 | 6250000 | 27 | 0.47% |
256000 | 6250000 | 24 | 1.7% |
468000 | 6250000 | 13 | 4.3% |
512000 | 6250000 | 12 | 1.7% |
921600 | 6250000 | 7 | 3.1% |
1000000 | 6250000 | 6 | 4.1% |
1024000 | 6250000 | 6 | 1.7% |
2000000 | 6250000 | 3 | 4.1% |
波特率误差计算说明:由于波特率是由总时钟分频而来,所以分频系数必须是整数。(由上面寄存器可知,总不能向寄存器写入小数吧)
误差率 = (总时钟/分频系数 – 波特率)/波特率。
分频系数 = int(总时钟/波特率)。最好取4舍5入,可以减少误差。
选择上述的波特率范围原因是:串口转USB的模块支持上述波特率,
正常波特率的接收误差范围要小于2%,为了稳定通信要小于1%,(因为)且当前串口线较长,超过15cm。
3、实际测试
双方通信测试(乱码测试),基于CH340测试。
921600 测试乱码
1000000 测试乱码
1024000 测试乱码 (256000*4)
2000000 测试乱码
示波器采用KeySight(是德MSO X3054T),带宽为500MHZ,采样率5GSa/s,
对于板子的时钟,是否与实际的符合也做了测试。
发送和接收均是针对Host端来说的。
频率的抓取位置均是通过示波器自动完成的。
(1)115200波特率的测试抓取。(发送)
115200波特率的测试抓取。(接收)
6250000/54 = 115740HZ,和抓到的波形频率一致。
(2)1562500波特率测试(6250000/4 = 1562500 恰好整除)(接收,即开发板生成)
串口工具设置的频率若为1562500,(发送),选择那种可以自己设置波特率的串口工具。
比如Mobaxterm以及SecureCRT。
抓取的发送频率为:1.4966MHZ,误差率为:4.2%.
两个波特率的测试,基本可以确定开发板的波特率总时钟是OK的。
但是无法支持1M以上的波特率。
4、最大波特率问题
不太好确定双方都支持的最大波特率。即双方的波特率目前512000(误差率低于2%,可能误码率交高)是找到最大的且符合误差范围的波特率值。
串口工具上常见的波特率,512000之上的开发板都不支持,即计算出来的误差率较高。
1024000波特率是因为串口模块支持能力有限,虽然说得支持2MHz,但是实际测试下来误差较大。
(CH340G与PL2302 在相同波特率下(1M以上)测试,无法正常通信)。其实我们经常看到51单片机或者串口模块的晶振选择11.05625MHZ,其实原因是特定晶振分出的串口波特率时钟偏差小。
由下表可以看到11.0592MHZ的时钟偏差比12MHZ要小。
时钟 | 波特率 | 分频系数 | 误差 |
---|---|---|---|
11.0592MHZ/12MHZ | 9600 | 1152/1250 | 0%/0% |
11.0592MHZ/12MHZ | 115200 | 96/104 | 0%/0.16% |
11.0592MHZ/12MHZ | 230400 | 48/52 | 0%/0.16% |
11.0592MHZ/12MHZ | 256000 | 43/47 | 0.47%/0.26% |
11.0592MHZ/12MHZ | 460800 | 24/26 | 0%/0.16% |
11.0592MHZ/12MHZ | 921600 | 12/13 | 0%/0.16% |
假如我们不选择这种串口模块,其实可以配置成任意的波特率,只要符合一定范围内的误差就行。
5、波特率提高
再选择另外一种串口模块之后(CMSIS DAPLink 支持虚拟串口),波特率在1.5625Mhz可以成功通信。因为开发板4分频正好为1.5625Mhz。
发送时钟频率(串口模块)
接收时钟频率(开发板发送时钟频率,相对概念)
误差计算为:0.064%,符合范围,可以正常通信。
6、总结
0、发送乱码原因:模块支持M级别波特率的问题。
1、选择常用固定的波特率是因为:ch340或者其他模块的时钟可以对这些常见波特率进行整分频。
2、发现PL2302和CH340G在1M以上的波特率无法通信。
3、如果需要较高的波特率(比如1M以上),需要看看模块是否满足,可以通过示波器来看,计算一下误差
4、选择用一些可以自己设置波特率的串口工具,比如SecureCRT、Mobaxterm等。
5、下次测试一下STM32的波特率支持情况
6、波特率以及比特率的理解增加
UART 波特率选择的认识与理解相关推荐
- NXP JN5169 UART 波特率设置
NXP JN5169 UART 波特率设置 一.系统时钟介绍 1.高速(32MHz)系统时钟 1.32MHz 晶体振荡器 2.高速RC振荡器 2.低速(32kHz)系统时钟 1.32 kHz RC 振 ...
- 关于linux UART驱动和tty架构的理解
关于linux UART驱动和tty架构的理解 最近要开发一个驱动程序,需要用到串口和SPI接口.平台的串口驱动程序本身在开发板中已经被实现了,也可以就这样直接使用,但是这样分开使用的结果就是在串口和 ...
- (100)Verilog HDL:UART波特率设计
(100)Verilog HDL:UART波特率设计 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)Verilog HDL:UART波特率设计 5)结语 1.2 FPG ...
- C51单片机 波特率选择 和 串口的工作方式
串口的工作方式 MCS-51串行口有0.1.2.3四种工作方式. 方式0:8位同步移位寄存器方式 方式1:10位通用异步通信 方式2:11位异步通信 方式3:可变波特率11位异步通信. 方式0:同步移 ...
- 嵌入式 - 晶振频率的来源和UART波特率的选择
电路板上经常要用到32.768KHz的晶振,表示晶振经过32768K个周期就是1s,16进制就是0x8000,是2的n次方形式,2^15. 这颗料已经出现了20年,非常普遍,也非常便宜,在各种电路中使 ...
- 关于个人对UART+DMA +串口空闲中断的理解与疑惑
以下只是个人根据自己实际项目的使用在论坛里看到的一些交流的理解,欢迎大家指出其中理解错误的地方. 1. 我为什么选择了 串口+DMA+空闲中断模式 在网上去搜索会看到很多的资料与简介,甚至还有许多实例 ...
- DSP:TMS320C6657 之 UART波特率问题
6657 设置串口波特率 以614400为例 (1)根据公式计算分频系数 (2)1GHz主频下 UART输入频率166666666Hz.(1/6) (3)16倍采样率下分频系数是16.95取整16,实 ...
- 【00】伪类选择符-魔芋的理解
[00]魔芋的理解 nth-child(n)这样的带n的,n从1开始. n可以是表达式:n*3,n+3 可以是特殊字符串"odd","even" [02]emp ...
- 码元,码元速率,波特率,比特率(个人理解总结)
参考:https://baike.baidu.com/item/%E7%A0%81%E5%85%83%E4%BC%A0%E8%BE%93%E9%80%9F%E7%8E%87/6305673 https ...
最新文章
- HTML保存节点,{HTML5}DOM节点操作-第一节
- atlsoap.h”: No such file or directory
- java 管道设计_使用管道流实现Java 8阶段构建器
- 数据结构与算法——二叉平衡树(AVL树)详解
- 5G的7大用途,你知道几个?
- 从 linux内核来看进程与线程的异同
- 用了这么久的数据库连接池,你知道原理吗?
- linux 添加网关 多张,linux – 更改默认网关,多个NIC
- vivo z5和z5x有什么区别
- 关于IE6,7下面的一些兼容性问题
- C# 压缩PDF图片
- Linux应用开发自学之路
- 线性代数常用知识点总结
- ApacheCN 翻译活动进度公告 2019.5.17
- 【3D激光SLAM(二)】Velodyne激光SLAM学习之Velodyne-16线激光雷达在Jetson Nano上的配置使用
- 渗透测试不同阶段的开源/商业工具
- 论单片机IO引脚驱动能力的提高
- 微信小程序 - video组件poster无效 / 视频播放列表
- Duplicate Net Names Wire AVCC
- Nginx正向代理和反向代理配置
热门文章
- oracle pivot使用方法,Oracle Pivot简单用法
- 4、<VBA>学习用刘永富老师插件解析JSON格式数据
- 生产者和消费者问题详解
- 面向对象的三个基本特征和五种设计原则
- 曹则贤:量子力学从来不是什么革命,而是经典物理学的自然延续
- 计算机网络实验——路由器基本配置
- 英语语法第四节(主宾表从句)
- 用莫比乌斯带巧解内接矩形问题:拓扑学的用处
- 神经网络加深和加宽的影响
- 狂神说,mybatis-01 java.lang.ExceptionInInitializerError at com.kuang.dao.UserDaoTest.selectUser(UserD