在Arduino上实现软件串口时,波特率误差主要源于定时器/延时函数的粒度(如micros()或delayMicroseconds()的抖动)和CPU时钟漂移。精确计算:先测实际时钟频率(用millis()对比外部基准),再按公式误差=(目标波特率-实际波特率)/目标波特率×100%。优化位采样窗口的关键是在每个位周期的中点采样,而非起始沿。建议用定时器中断(如Timer1)而非delayMicroseconds(),因为后者受中断嵌套影响。实操:将每位时间拆为4-8个微步,用硬件定时器计数,在25%、50%、75%处采样取多数表决(majority voting),可容忍±5%误差。若误差超限,可动态调整定时器重载值(如每帧校准一次)。最终用示波器验证眼图,确保采样点落在眼图中央。
mcuku 阿沐 · 2026-08-27