嵌入式1 分钟

STM32 串口通信踩坑:波特率不是罪魁(示例)

乱码查了一圈波特率,最后发现是时钟树没配对,以及接收长度写错了一位。

一句话结论:串口乱码先看两处——时钟树和接收长度。

排查过程

  1. 波特率 115200 两边一致,仍然乱码。
  2. 发现 HSE 晶振没起振,APB1 实际频率差了 8 倍。
  3. 换内部时钟后正常;随后又发现接收缓冲写成 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”,比一直盯乱码快得多。