You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

STM32F405串口DMA转发460800波特率下丢包问题求助

STM32F405RGT6 460800波特率串口转发丢包问题分析

问题概述

  • 硬件平台:STM32F405RGT6
  • 功能需求:UART2以460800波特率通过DMA循环接收数据存入环形缓冲区,再通过UART3以相同波特率DMA转发
  • 异常现象:发送434724字节,PC仅收到358834字节;代码内统计变量rcv_T3、crx[1].stream_cnt与发送量完全匹配
  • 特殊场景:UART2用115200波特率、UART3用460800波特率时无丢包

核心代码逻辑

接收流程

  • 触发源:DMA半完成中断、DMA完成中断、UART空闲中断
  • 操作:中断回调中将DMA缓冲区数据转存至接收环形缓冲区,再写入转发用环形缓冲区

发送流程

  • 检测机制:独立线程轮询转发环形缓冲区(txRingbuf)数据量
  • 发送控制:缓冲区有数据时启动DMA发送,通过发送完成中断设置标志,避免重复触发发送

排查方向

  • 转发线程调度瓶颈
    同波特率下,接收数据速度与发送理论速度一致,但线程轮询存在固有延迟,若线程优先级过低,无法及时响应环形缓冲区的数据写入,会导致数据堆积,后续DMA发送无法完全覆盖堆积数据。可尝试提升转发线程优先级,或改用中断触发发送(而非线程轮询),减少调度延迟。

  • UART3 DMA发送配置缺陷
    检查UART3的DMA发送模式:若误用循环模式,发送完成后未正确更新待发送数据长度,会导致部分数据被跳过;确认发送完成中断标志是否被及时清除,若中断被屏蔽或标志未清除,会阻塞下一次发送触发,造成数据滞留。

  • 硬件信号完整性问题
    460800波特率对信号时序要求更高,排查UART3的硬件链路:线路过长、电磁干扰、电平不匹配都可能导致PC端接收丢包(MCU侧DMA已发送数据,但物理链路丢失)。可单独测试UART3直接发送相同字节数,验证PC端接收完整性,排除硬件问题。

  • 环形缓冲区同步问题
    接收中断回调与转发线程同时操作环形缓冲区时,若未做互斥保护,高波特率下可能出现读写冲突,导致读取的数据不完整,但接收统计变量仅统计写入量,因此显示正常。需添加临界区保护或使用原子操作确保缓冲区读写安全。

内容的提问来源于stack exchange,提问作者Wiston

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 20:05:18