1. HSE_VALUE配置错误(最根本的问题)

问题: 串口发出来全是乱码,换各种波特率都不对。

根本原因: stm32f4xx.hHSE_VALUE 被设置成了 25000000(25MHz),但实际板子上的晶振是 8MHz。这导致STM32所有跟时钟有关的计算全部偏差,包括串口波特率、PWM频率、定时器周期、delay时间,全部是错的,我也是服了才发现。

解决:HSE_VALUE 改成 8000000。

教训: 移植别人的工程或者用模板工程时,第一件事要确认时钟配置是否和自己的硬件匹配。


2. CH340没接VCC导致乱码

问题: 用CH340接STM32的PA2,(因为PA2是接的我的esp32RX端,我想看看是否单片机的数据传到了esp32),串口助手收到的是乱码。

原因: CH340的VCC没有接,模块没有基准电压,接收到的电平信号无法正确识别。

解决: 给CH340的VCC接STM32的3.3V。

教训: 串口模块必须供电且和目标设备共地,缺一不可。


3. 串口不共地导致通信异常

问题: STM32和ESP32串口通信收到乱码。

原因: 两个设备没有共地,电平基准不同,接收方无法正确判断高低电平。

解决: 用一根杜邦线把STM32的GND和ESP32的GND连在一起。

教训: 任何两个设备之间做串口通信,GND必须连通,这是最基础也最容易忘的一步。


4. ESP32网页不显示数据

问题: 网页一直显示"等待巡检数据",没有变化。

排查过程:

  1. 先用串口监视器手动发假数据测试ESP32解析逻辑
  2. 再用CH340直接接STM32验证STM32有没有在发数据
  3. 发现STM32发出来是乱码,定位到HSE_VALUE问题
  4. 改完HSE_VALUE后数据正常,ESP32成功收到并显示

解决: 修复HSE_VALUE,确保波特率一致,共地。对于我来说这个思想是很重要的


5. OpenMV串口引脚冲突(PA9被编码器和串口同时占用)

问题: 编码器初始化用了PA9,OpenMV串口也用了PA9,后初始化的把前面的覆盖掉,导致编码器左后轮失效。

解决: 把OpenMV通信改到USART3(PC10/PC11),彻底避开编码器引脚。


调试思路总结

今天整个调试过程体现的核心思路是分段隔离验证

  1. 先验证最小单元:不跑整车(其实主要是方便),先单独让STM32发一条固定字符串,验证串口本身能不能工作
  2. 逐段排查:STM32→CH340→串口助手,一段一段确认,不要一上来就接全套硬件
  3. 区分硬件问题和软件问题:乱码是硬件/配置问题,没数据是逻辑问题,两类问题排查方向完全不同
  4. 改一个验一个:我每次只改一个变量(波特率、GND、VCC),不要同时改多个,否则不知道是哪个起了作用
Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐