波特率误差计算器
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.0000 | 72 | 9600 | +0.00% | 安全 |
| 19200 零误差 | 36.0000 | 36 | 19200 | +0.00% | 安全 |
| 38400 零误差 | 18.0000 | 18 | 38400 | +0.00% | 安全 |
| 57600 零误差 | 12.0000 | 12 | 57600 | +0.00% | 安全 |
| 115200 零误差 | 6.0000 | 6 | 115200 | +0.00% | 安全 |
| 230400 零误差 | 3.0000 | 3 | 230400 | +0.00% | 安全 |
| 460800 | 1.5000 | 2 | 345600 | -25.00% | 红警 |
| 921600 | 0.7500 | 1 | 691200 | -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 外设支持哪种过采样,再按本工具核对误差。
相关工具推荐
单位换算器
支持长度、重量、温度、面积、体积等多种单位类型的相互转换
科学计算器
高级数学运算,支持三角函数、对数、指数运算等科学计算,包含内存管理和历史记录
统计学计算器
数据分析工具,支持描述统计、回归分析、概率分布、假设检验等统计计算
方程求解器
一次方程、二次方程、方程组求解,支持图像绘制、牛顿迭代法和数值方法
财务比率计算器
盈利能力、偿债能力、运营能力比率分析,支持图表展示、行业对比和财务健康评分
折扣计算器
计算折扣后价格、节省金额和折扣率,支持折扣率和折数输入