在断开USB线并重新连接后,使用CubeMX HAL的USB CDC(虚拟串口)功能出现异常。
我遇到了一个USB无法正常工作的问题——使用CubeMX HAL库的USB CDC(虚拟串口)在断开USB线并重新连接后无法恢复。程序在上传到STM32后,会在while(1)主循环中持续向USB端口写入数据。 while (1){ /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ CDC_Transmit_FS(buffer, sizeof(buffer)); HAL_Delay(1000);}数据可以正常写出,在Windows 7系统(使用Tera Term和Docklight工具)中可见。但当我断开USB线缆(OTG FS端口)并重新连接时,Windows会显示"无法识别的USB设备"错误提示。此时无法接收数据。必须对STM32F407进行复位操作,才能恢复数据传输和线缆识别功能。我的问题是如何使USB设备始终正常工作(在断开并重新连接线缆后),确保能被Windows正确识别并维持数据传输?USB设备枚举失败引起的? 中断处理不当可能导致设备状态异常。 HAL库版本不兼容或配置参数如堆栈大小、中断优先级等未正确设置。 检查USBD_CDC_DeInit和USBD_CDC_Init函数 检查USB CDC的软件配置 检查USB接口和相关硬件的连接 USB线缆质量差或接触不良可能导致重新连接时电压不稳,触发芯片复位或USB模块异常。 USB设备在插入时需要经历一个枚举过程,如果这个过程出现问题,可能会导致设备无法正常工作。 USB CDC通常依赖于环形缓冲区来存储发送和接收的数据。 通过拉低USB-PD引脚模拟拔插过程,再重新初始化USB。 可能是由于USB设备的枚举过程或驱动程序的问题导致的 在USBD_CDC_If.c文件中实现USB连接和断开的回调函数,以便于进行必要的资源释放和重新分配 通过串口助手发送数据,断开USB线后重新连接,观察数据是否恢复传输 安装STM32 USB CDC驱动,或驱动版本不匹配。 USB上拉电阻缺失 热插拔后未更新,导致数据传输失败。 USB设备未正确重新初始化 中断或任务调度冲突
页:
[1]