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

STM32 Nucleo F446RE虚拟串口传MPU6050数据时USBD_BUSY问题求助

STM32 Nucleo F446RE虚拟串口USBD_BUSY错误排查方案

问题描述

使用STM32 Nucleo F446RE开发板通过虚拟串口传输MPU6050传感器数据,调试模式下传感器读数正常,但USB传输始终返回USBD_BUSY错误,无法完成数据传输。参考教程可正常传输,目前无法定位问题。

传输代码截图

传输代码截图

排查步骤

  • 传输状态判断逻辑检查
    每次调用CDC_Transmit_FS前必须确认上一次传输已完成,可通过USBD_CDC_IsReady(&hUsbDeviceFS)函数判断设备状态,禁止连续发起传输请求。同时避免在中断服务函数内直接调用传输函数,建议在中断中标记传输需求,移至主循环处理。

  • USB CDC配置校验
    确保CubeMX生成的USB CDC参数(波特率、数据位、停止位、奇偶校验)与串口调试工具完全一致;检查USBD_CDC_HandleTypeDef初始化是否正确,重点确认TxState初始状态为USBD_OK。

  • 代码逻辑修正(结合截图)
    截图中误用了HAL_UART_Transmit(硬件串口函数),虚拟串口应使用CDC_Transmit_FS;若存在连续调用传输函数的情况,需增加状态判断:

    if(USBD_CDC_IsReady(&hUsbDeviceFS) == USBD_OK)
    {
        CDC_Transmit_FS((uint8_t*)send_buf, strlen(send_buf));
    }
    

    同时检查send_buf长度是否超过USB CDC最大传输包大小(通常为64字节),超出需分包传输。

  • 硬件与驱动排查
    更换USB接口或数据线排除接触不良问题;确认电脑端STM32虚拟串口驱动安装正常,设备管理器中无异常标记;调试时查看hUsbDeviceFS->dev_state和hUsbDeviceFS.pClassData->TxState的实际值,验证是否真处于忙碌状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 17:15:08