嵌入式1 分钟
STM32 串口通信踩坑:波特率不是罪魁(示例)
乱码查了一圈波特率,最后发现是时钟树没配对,以及接收长度写错了一位。
一句话结论:串口乱码先看两处——时钟树和接收长度。
排查过程
- 波特率 115200 两边一致,仍然乱码。
- 发现 HSE 晶振没起振,APB1 实际频率差了 8 倍。
- 换内部时钟后正常;随后又发现接收缓冲写成 8 位,传 9 位数据高位被截断。
结论与复盘
// 时钟树:HSE 25MHz -> PLL -> 72MHz
RCC_OscInitTypeDef osc = {0};
osc.OscillatorType = RCC_OSCILLATORTYPE_HSE;
osc.HSEState = RCC_HSE_ON;
HAL_RCC_OscConfig(&osc);
调试口能打印“系统启动”,再打印“时钟 72MHz”,比一直盯乱码快得多。