打印
[技术问答]

UART 波特率计算方式以及误差大怎样改善

[复制链接]
794|45
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
AdaMaYun|  楼主 | 2024-5-23 13:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

由于一般情况下波特率和芯片系统主频都不是整数关系,所以计算得到的波特率发生器的
数值都不是整数,但是寄存器的值只能赋整数值,所以大多数情况下波特率都是有偏差的,
在 UART 协议中通信双方允许的最大波特率偏差为 5%,当应用中必须选择某个固定的波
特率,但是计算偏差又比较大时,建议用户使用如下几种方式进行改善:
1) 建议用户在使用中选择计算偏差较小的波特率,另外在计算波特率时注意一下,采
用四舍五入的方法给波特率发生器赋值;
2) 将通信双方的波特率尽量往同一个方向偏,以减小通信双方的波特率偏差;
3) 赛元全系列芯片的 HRC 都是可调的,可以通过调节 HRC 得到精准的波特率,但
是要注意 HRC 的调节不能超过芯片最高主频的 10%,同时 HRC 调节之后,定时
器,PWM 等功能会受到影响,建议在 UART 发送前调节 HRC,发送完成后再将
HRC 调回默认值。

使用特权

评论回复
沙发
szt1993| | 2024-5-23 13:37 | 只看该作者
大多数情况下波特率都是有偏差的,现在又有小数波特率的技术出现

使用特权

评论回复
板凳
primojones| | 2024-6-4 16:30 | 只看该作者
使用更精确的时钟源,如晶体振荡器,以减少时钟频率的波动。

使用特权

评论回复
地板
mickit| | 2024-6-4 17:17 | 只看该作者
尝试调整BAUD的值以获得更接近期望波特率的结果。如果MCU允许,可以使用浮点数或更精细的分频设置来微调。

使用特权

评论回复
5
chenjun89| | 2024-6-5 07:33 | 只看该作者
波特率误差主要还是因为时钟频率误差

使用特权

评论回复
6
mmbs| | 2024-6-5 11:27 | 只看该作者
一般情况下,波特率的计算公式涉及到MCU的主频、过采样选择以及USARTDIV的值。例如,在STM32中,如果OVER8=0(即16倍过采样),则波特率的计算公式为 BAUD_Rate = f_clk / (16 * USARTDIV),其中f_clk为UART外设的运行频率。

使用特权

评论回复
7
mollylawrence| | 2024-6-5 14:51 | 只看该作者
在软件层面上,可以通过计时循环或其他算法微调发送和接收数据的时机,但这通常只适用于对时间容忍度较高的应用。

使用特权

评论回复
8
bartonalfred| | 2024-6-5 19:56 | 只看该作者
对于需要长时间运行的UART通信,可以定期校准波特率,以消除由于系统时钟漂移或其他因素引起的误差。

使用特权

评论回复
9
pentruman| | 2024-6-6 08:05 | 只看该作者
在某些情况下,可以选择一些特殊的波特率,这些波特率与MCU或硬件设备的系统时钟频率有特定的关系,可以减少误差。例如,选择可以被系统时钟频率整除的波特率。

使用特权

评论回复
10
weifeng90| | 2024-6-6 18:59 | 只看该作者
关键是时钟源要误差小,分频系数设置尽量让误差小。

使用特权

评论回复
11
mikewalpole| | 2024-6-7 09:12 | 只看该作者
大多数微控制器(MCU)都有一个UART波特率寄存器,可以通过编程来设置分频系数。这个寄存器通常是一个无符号整数,它的值决定了实际的波特率。

使用特权

评论回复
12
vivilyly| | 2024-6-7 12:51 | 只看该作者
时钟精度的提高有助于减小波特率的误差。

使用特权

评论回复
13
chenci2013| | 2024-6-7 16:39 | 只看该作者
设置的波特率可能与实际的波特率存在偏差。可以通过在开发环境中使用波特率发生器来校准设置的波特率

使用特权

评论回复
14
loutin| | 2024-6-7 20:27 | 只看该作者
在软件中实现一个补偿机制,根据实际测量到的波特率误差来调整分频系数。

使用特权

评论回复
15
mikewalpole| | 2024-6-8 10:01 | 只看该作者
选择与特定波特率匹配的外部振荡器,可以实现更精确的波特率输出。这种方法对于需要高精度波特率的应用特别有用。

使用特权

评论回复
16
zerorobert| | 2024-6-8 13:39 | 只看该作者
如果内部时钟源的精度无法满足要求,可以考虑使用外部波特率发生器来提供更准确的波特率。

使用特权

评论回复
17
rosemoore| | 2024-6-8 17:23 | 只看该作者
可以尝试降低波特率,因为较低的波特率对时钟精度的依赖性较小。

使用特权

评论回复
18
loutin| | 2024-6-8 21:15 | 只看该作者
选择高稳定性、低温漂的晶振,可以减少由温度变化引起的频率漂移,提高通信的可靠性。

使用特权

评论回复
19
pmp| | 2024-6-9 10:00 | 只看该作者
根据波特率调整示波器的时间基准,以便清晰地查看每个比特的传输。

使用特权

评论回复
20
gygp| | 2024-6-9 13:38 | 只看该作者
可以通过调整系统时钟频率来改变分频系数,使得分频后的结果尽可能接近所需的波特率,从而减少误差。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

190

主题

1470

帖子

3

粉丝