先确认丢包根因:1) 空闲中断里只置标志、主循环处理太慢,下一帧覆盖缓冲区;2) DMA NDTR重装前未及时重启,导致后续数据丢失;3) 中断优先级配置不当,串口空闲中断被高优先级任务长时间阻塞;4) 半双工/RS485方向切换延迟。排查建议:在空闲中断中只做最小动作——读取NDTR计算长度、拷贝到环形缓冲区、重启DMA,绝不在中断里做解析或打印。环形缓冲区设计:使用单生产者(DMA中断)单消费者(主循环)无锁环形队列,头尾指针用原子读写,容量取2的幂便于掩码取模;写入时判断剩余空间,不足则丢弃整帧并置溢出标志,避免半帧污染。DMA采用Normal模式配合空闲中断重启,或Circular模式配合双缓冲(half/full回调)降低中断频率。注意HAL_UARTEx_ReceiveToIdle_DMA的Size参数要覆盖最大帧长,且每次重启前调用HAL_UART_AbortReceive确保状态干净。