波特率误差计算器

UART 分频系数与实际波特率误差判定、全波特率扫描与零误差时钟反查

在线 UART 波特率误差计算器:按时钟频率 = 分频值 × 过采样倍数 × 波特率的反推口径, 计算理论分频值(含小数)、取整后的实际波特率与波特率误差百分比,按单端 ±2% / 总预算 ±4.5% 红黄绿判定; 附当前时钟下 8 档标准波特率的逐行误差扫描表,以及"给定波特率反查哪些常用时钟零误差"—— 解释 11.0592MHz 为什么被称为串口神石。全部计算在浏览器本地完成,不上传任何数据。

计算口径:分频值 = fosc ÷(过采样倍数 × 目标波特率),四舍五入取整后实际波特率 = fosc ÷(过采样倍数 × 取整分频)。 16x 过采样是 16550 系 UART 的经典口径(每位 16 个采样点),8x 为低分频余量不足时的常见替代。 误差判定:单端 ≤±2% 绿(安全)、±2%~±4.5% 黄(临界,需实测)、>±4.5% 红(大概率乱码)—— 总容差约 ±4.5% = 收发两端各 ±2% + 中点采样窗口余量。

分频与误差计算

当前换算为 11059200 Hz;预设之外可直接输入,晶振/内部 RC 均可

常见 MCU/UART IP 为 16x;部分低功耗型号或高波特率场景用 8x,分频粒度更细、误差减半量级

理论分频值(含小数)

6.0000

实际取整分频

6

实际波特率

115200

波特率误差

+0.00%

实际波特率 = 11059200 ÷(16 × 6), 理论分频 6.0000 取整为 6

安全

判定口径:单端误差 ≤±2% 为安全区;收发两端各留 ±2%,加上起始位检测与中点采样的位时序余量, 整条链路总预算约 ±4.5%——超过总预算的误差会在一帧内累积出半位偏移,采到最后一位时错位成乱码。

说明:取整按四舍五入(误差最小化);个别 UART 外设为"向下取整再减 1"的寄存器口径(如 AVR 的 UBRR), 误差会略大于本表,寄存器写值时请按手册换算。理论分频恰为整数时误差为 0,即"零误差"组合。

全波特率扫描表(11.0592 MHz · 16x 口径)

目标波特率理论分频取整分频实际波特率误差判定
9600 零误差72.0000729600+0.00%安全
19200 零误差36.00003619200+0.00%安全
38400 零误差18.00001838400+0.00%安全
57600 零误差12.00001257600+0.00%安全
115200 零误差6.00006115200+0.00%安全
230400 零误差3.00003230400+0.00%安全
460800 1.50002345600-25.00%红警
921600 0.75001691200-25.00%红警

绿色行为甜点档(单端误差 ≤±2%),可直接放心使用;黄色为临界档,建议实测两端通信;红色档大概率乱码。 表中数值与上方计算器由同一组函数生成。同一时钟下波特率越低、分频越大,取整带来的相对误差越小—— 这也是"降波特率救乱码"的数学原因。

反向查零误差时钟

目标波特率 115200 bps(16x 口径)下, 常用时钟按 |误差| 从小到大排列:

时钟分频误差
1.8432 MHz 零误差1.0000+0.00%
3.6864 MHz 零误差2.0000+0.00%
7.3728 MHz 零误差4.0000+0.00%
11.0592 MHz 零误差6.0000+0.00%
14.7456 MHz 零误差8.0000+0.00%
18.432 MHz 零误差10.0000+0.00%
22.1184 MHz 零误差12.0000+0.00%
24 MHz 13.0208+0.16%
48 MHz 26.0417+0.16%
72 MHz 39.0625+0.16%
20 MHz 10.8507-1.36%
32 MHz 17.3611+2.12%
27 MHz 14.6484-2.34%
16 MHz 8.6806-3.55%
12 MHz 6.5104-6.99%
4 MHz 2.1701+8.51%
6 MHz 3.2552+8.51%
8 MHz 4.3403+8.51%

7 款常用时钟在该波特率下零误差,优先选用。

11.0592MHz 为什么是"串口神石"?

11.0592MHz ÷ 16 = 691.2 kHz,恰是 9600 的 72 倍、115200 的 6 倍——它等于 115200 × 96、 也是 1.8432MHz 的 6 倍(3.6864 / 7.3728 / 14.7456 / 18.432 / 22.1184M 同属这一家族)。 因此 16x 口径下 9600~230400 档档零误差;460800 要用 8x 口径(分频 1.5 非整数), 或升级 22.1184M(460800 仍零误差)。而 8 / 12 / 16 / 24MHz 这类整 MHz 时钟在任何档位都很难整除, 误差只能"挑最好的那档"。

实用提示

  • 乱码先查误差:两端波特率误差之和超过约 ±4.5% 就会乱码;一端 +8.5%、另一端 0% 也救不回来。
  • 8MHz 跑 115200:16x 口径分频 4.34→4,实际 125000(+8.5%),是内部 RC + 高波特率翻车的经典组合——换 11.0592M 或降波特率。
  • 误差可以"对冲":一端 +1.6%、一端 −1.6% 时相对误差互相抵消,比两端同号更安全;但也别指望长期稳定。
  • 寄存器口径:部分 MCU 是"分频值 − 1 后写入"(如 AVR UBRR),本页给出的是真实分频,写寄存器时按手册换算。

#什么是波特率误差

UART 没有独立的时钟线,收发双方各自用自己的时钟把每一位切成若干采样点、独立恢复出 0/1。 两边的"每秒位数"不可能完全一致,这个不一致就是波特率误差。误差小,一帧(10 位左右)采完还在位边界内; 误差大,偏差会沿着 10 个位一路累积,采到最后一位时已经偏出半位,数据就错成乱码。 本工具按 fosc ÷(过采样 × 波特率)= 分频值的标准口径,把"晶振频率和目标波特率不整除"造成的误差算出来并给出红黄绿判定。

为什么 11.0592MHz 被称为串口神石

标准波特率是 300×2ⁿ 这条 2 的幂链条(9600、19200、…、115200)。 一个时钟要"整除"出这些波特率,就必须是 16 × 波特率的整数倍。11.0592MHz = 115200 × 96 = 1.8432MHz × 6, 它的 1/16(691.2kHz)同时是 9600 的 72 倍、19200 的 36 倍、38400 的 18 倍、57600 的 12 倍、115200 的 6 倍、230400 的 3 倍—— 16x 口径下从 9600 到 230400 档档零误差。 3.6864 / 7.3728 / 14.7456 / 18.432 / 22.1184MHz 都是 1.8432MHz 的整数倍,同属"神石家族", 频率越高支持的零误差波特率越高(22.1184M 到 460800 仍零误差)。 反观 8 / 12 / 16 / 24 / 72MHz 这类整 MHz 时钟,除以 16×9600 都不是整数,只能靠取整凑近似—— 这就是老工程师串口项目默认上 11.0592M 的数学原因。USB 时代串口多由 USB-CDC 虚拟出来,时钟精度不再是瓶颈, 但两个 MCU 直连 UART、GPS 模块、蓝牙透传模块等场景依然适用这套规则。

16x 过采样是怎么来的

经典 UART(如 16550 系列)把每一位的时间切成 16 份:检测到起始位下降沿后等 8 个采样点落到位中央再采样, 后续每位也在中央采样,中间的采样点可以做多数表决滤波、检测帧错误。 过采样倍数越高,位中央定位越准、抗毛刺越强,但分频值也要除以更大的数,取整误差随之变大。 8x 口径把分频分母减半,同样的时钟下分频余量翻倍、误差约减半,代价是采样窗口变粗、抗噪能力下降。 本工具两种口径都支持,实际倍数以你用的 UART 外设手册为准(多数 ARM MCU 的 UART/USART 是 16x 或可配 8x 过采样)。

±2% 的容差是怎么算出来的

一帧 10 位(1 起始 + 8 数据 + 1 停止)时,停止位在中点附近被采样,累计相位偏移 = 9.5 × 每位误差。 要让最后一位仍落在位中央附近,累计偏移必须小于半位(0.5 位),反推单端误差的理论上限约 5%; 扣除起始位检测毛刺、时钟抖动与边沿斜率的余量后,工程惯例取单端 ±2%。 收发两端各 ±2%,再加上起始位对齐的采样窗口消耗,整条链路的总预算约 ±4.5%—— 超过它,一帧还没采完相位就偏出半位,采到的"停止位"其实是数据位,帧错误和乱码随之而来。 两端误差符号相反时(如一端 +1.6%、一端 −1.6%)会互相抵消,链路比"误差绝对值相加"更宽容。

内部 RC 振荡器的温漂风险

很多 MCU 出厂校准的内部 RC 振荡器(如 HSI/IRC)在 25°C 只有 ±1~2% 的精度,跨全温范围(−40~+85°C)会漂到 ±5% 甚至更多, 电压波动再叠加 1~2%。常温下"能通"的串口,进高低温箱或上电发热后就可能开始乱码—— 尤其 8MHz 内部 RC 跑 115200 这种本就 +8.5% 的组合,是"实验室好好的、现场就翻车"的经典案例。 串口要用高波特率时优先上外部晶振或神石频率;不得不跑内部 RC 时,降低波特率(误差随分频值增大而缩小)、 或用双方都实测过的组合。逻辑电平、驱动能力等接口层问题可参考 74/4000 系列速查。

#常见问题 (FAQ)

波特率误差多少算安全?

单端 ≤±2% 是安全区(绿色);±2%~±4.5% 为临界区,建议两端实测;超过 ±4.5% 大概率乱码。 判定时要用"两端误差之和"看链路:一端 +1%、一端 +3.5% 合计 4.5%,已经贴着总预算的边。

8MHz 晶振能跑 115200 吗?

16x 口径下理论分频 4.34、取整 4,实际波特率 125000,误差 +8.5%,红色报警——单靠这一端就超出 ±4.5% 总预算,不可靠。 换 11.0592MHz(零误差)或降到 57600(8M 时 −3.55%,仍偏高)以外更低的档位(9600 只有 +0.16%)。 若双方都从 8MHz 类时钟分出来且误差同向,实测偶发可用,但不建议量产依赖。

16MHz 跑 9600 只有 +0.16%,是不是随便用 16M 就行?

低波特率确实没问题,但误差随波特率升高而恶化:16MHz 下 57600 误差 +2.12%(黄色)、 115200 为 −3.55%(黄色)、230400 达 +8.51%(红色)。16MHz 跑 115200 的 −3.5% 在实验室常温往往"能通", 但加上另一端误差后就贴着总预算了。需要 115200 及以上时,11.0592M 或 18.432M 是更稳的选择。

8x 和 16x 口径差在哪?

分频公式只差一个系数:分频值 = fosc ÷(倍数 × 波特率)。8x 的分母小一半,同样时钟下理论分频翻倍、 取整造成的相对误差约减半(如 8M 跑 115200:16x 分频 4.34 误差 +8.5%;8x 分频 8.68 取整 9,误差 −3.55%), 代价是每位只有 8 个采样点、位中央定位与抗噪能力变差。先确认你的 UART 外设支持哪种过采样,再按本工具核对误差。

相关工具推荐

单位换算器

支持长度、重量、温度、面积、体积等多种单位类型的相互转换

热门 本地

科学计算器

高级数学运算,支持三角函数、对数、指数运算等科学计算,包含内存管理和历史记录

热门 本地

统计学计算器

数据分析工具,支持描述统计、回归分析、概率分布、假设检验等统计计算

热门 本地

方程求解器

一次方程、二次方程、方程组求解,支持图像绘制、牛顿迭代法和数值方法

热门 本地

财务比率计算器

盈利能力、偿债能力、运营能力比率分析,支持图表展示、行业对比和财务健康评分

热门 本地

折扣计算器

计算折扣后价格、节省金额和折扣率,支持折扣率和折数输入

热门 本地

这张卡挂在哪些职业工具箱

相关教程