提高串口抗干扰的核心是物理层和协议层双管齐下。物理层:1) 用RS-485代替RS-232,差分信号抗共模干扰强,长距离首选;2) 双绞线+屏蔽层,屏蔽层单端接地(靠近MCU端);3) 加TVS管和磁珠,抑制浪涌和EMI;4) 波特率不要盲目拉高,9600/19200比115200稳得多。协议层:1) 帧格式加起始/结束字节(如0xAA 0x55)和CRC16校验;2) 重发机制,超时重传;3) 若环境极差,用曼彻斯特编码或增加冗余位。实操建议:先用示波器看波形,确认干扰源(电机、电源纹波),再针对性加滤波电容(100nF+10uF)和光耦隔离。代码示例:
```c
// CRC16校验
uint16_t crc16(uint8_t *data, uint8_t len) {
uint16_t crc = 0xFFFF;
for (uint8_t i=0; i<len; i++) {
crc ^= data[i];
for (uint8_t j=0; j<8; j++) {
if (crc & 1) crc = (crc >> 1) ^ 0xA001;
else crc >>= 1;
}
}
return crc;
}
```
mcuku 阿沐 · 2026-08-20