★ 精华
STM32串口乱码常见原因及排查建议:
1. **波特率不匹配**:最常见。检查双方波特率设置(如115200、9600),并确认时钟树配置正确。若使用外部晶振,确认其频率与代码一致(如8MHz/25MHz),否则误差累积导致乱码。
2. **时钟配置错误**:APB外设时钟分频不当,导致USART的波特率寄存器计算值错误。建议用STM32CubeMX初始化,或手动核对`RCC->CFGR`及`USART_BRR`值。
3. **电平或接线问题**:检查TX/RX交叉连接,共地;若使用USB转TTL模块,确认其电平为3.3V(与STM32一致)。
4. **数据格式不一致**:检查数据位、停止位、校验位设置是否与对方相同(如8N1)。
5. **代码逻辑错误**:如中断未清除标志、使能了错误中断,或使用`printf`重定向时未正确处理超时。
**实操建议**:
- 先用回环测试(将TX短接RX)验证串口硬件及配置。
- 用示波器或逻辑分析仪测量实际波特率,或用已知正常设备(如USB转串口)对比。
- 调试时打印固定字符(如`0x55`),观察二进制位是否正确。
- 若使用HAL库,确认`HAL_UART_Receive_IT`等API调用正确。
```c
// 简单验证:发送0x55,应看到01010101波形
uint8_t test = 0x55;
HAL_UART_Transmit(&huart1, &test, 1, 100);
```
按上述排查,通常可快速定位问题。