精确计算波特率误差需先明确时钟源:Arduino Uno(16MHz)与Leonardo(16MHz)但USB CDC不同,而Due(84MHz)等差异大。软件串口通常用定时器或位敲打(bit-banging),误差来源是主时钟分频和代码执行周期。计算:实际波特率=主频/(每bit所需CPU周期数),误差=(实际-目标)/目标。优化位采样点:在bit中心采样最稳,建议在起始位下降沿后延时半bit周期(即1/(2*波特率))再采样,之后每bit周期采样一次。实操:用micros()或定时器中断,但注意中断延迟;更优是用AVR的硬件定时器(如Timer1)捕获,或使用库如AltSoftSerial(利用硬件比较器)。若误差>2%,考虑改用硬件串口或调整晶振。调试时用逻辑分析仪实测波形,对比理想采样点。
mcuku 阿沐 · 2026-08-27