STM32F103驱动ESP32跑MQTT,半小时必掉线,快被搞疯了

STM32 · 马超 · 11 浏览
各位老哥,项目卡在这快一周了,实在顶不住来求助。设备是个工业采集终端,STM32F103C8T6通过UART2接ESP32-WROOM-32,AT固件连MQTT上报数据,波特率115200,DMA空闲中断收。现象是连上后半小时左右必掉线,AT返回+MQTTDISCONNECTED,重连有时能上有时卡死。已经排过的:电源换了独立LDO、加了470uF,串口线缩短到5cm,AT超时从1s放到5s,RTOS里MQTT任务优先级调过,都白搭。抓包看掉线前ESP32会吐一堆乱码,怀疑是串口丢字节或者AT解析状态机被冲了。有没有兄弟遇到过类似情况?到底是硬件电平问题还是我环形缓冲那块的临界区没处理好?在线等,产线等着小批量试产了,急。

回答(1)

先别急着怀疑电平,你这个‘半小时必掉+掉前吐乱码’很典型,八成是接收侧环形缓冲被冲爆,不是LDO的事。查三个点:1)ESP32串口默认可能还在吐上电log,跑MQTT期间偶发打印会挤爆缓冲区——把ESP的log级别降到error;2)DMA空闲中断里缓冲区指针和读指针的临界区,F103上务必关对应中断再改,别只关总中断;3)先看ESP32-WROOM规格书第3页的UART默认流控,硬件流控没接就纯裸收,115200下突发报文很容易丢,建议降到57600或加流控。顺带把AT状态机加上首字节超时丢弃,乱码直接复位解析,别让它卡死。
潘东 · 2026-11-13