我的固件通过 UART 中断回调搭配三段状态机处理串口数据:
状态 1:循环单次接收 1 字节,等待帧头标记;收到标记后,调用UART_Receive_IT读取下一字节(消息长度),切换到状态 2;
状态 2:用上一步读到的长度作为总字节数,调用UART_Receive_IT一次性接收整条报文;
状态 3:全部数据接收完成后解析报文。
短报文完全正常;当发送总长 147 字节长报文时,状态 3 ***不会触发。调试观察huart2->RxXferCount从 147 递减到 98 后不再变化,UART 接收中断服务函数UART_RxISR_8BIT不再进入,状态机卡住,直到软件超时触发接收终止。
发送工具使用 RealTerm;
卡死时硬件流控 RTS/CTS 引脚均为低电平;
接收超时从 20ms 拉长至 1s,无改善;
UART 溢出标志 ORE 未置 1,无硬件溢出;
接收缓冲区尺寸远大于 147 字节,不存在越界;
改为分批次 32 字节分段调用UART_Receive_IT:第一批正常接收,累计收到 49 字节后第二批直接卡死;
多次调用UART_Receive_IT之间不需要手动复位 UART,是否理解有误?
请问什么原因会导致 UART 接收中途停止触发中断?还有哪些调试手段可以排查?
|
|