[应用相关] STM32 虚拟串口发不出数据

[复制链接]
 楼主| tpgf 发表于 2024-8-12 15:28 | 显示全部楼层 |阅读模式
在某个项目上,使用到了USB虚拟串口功能,芯片是STM32F105,在芯片刚复位时功能是正常,但是多发几次数据后,就发不出去了,一直返回USBD_BUSY,在下图中的344行返回USBD_BUSY

2772366b9b991a3ad6.png

解决办法是在这个函数内增加一些代码,等待数据发送完成之后再退出,或者超时退出,超时时间可以自己调整,根据自己的使用的波特率和发送的数据长度去算需要多久才能发完

uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len)
{
  uint8_t result = USBD_OK;
  /* USER CODE BEGIN 7 */
  uint32_t timeout = HAL_GetTick();
  USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*)hUsbDeviceFS.pClassData;
  if (hcdc->TxState != 0){
    return USBD_BUSY;
  }
  USBD_CDC_SetTxBuffer(&hUsbDeviceFS, Buf, Len);
  result = USBD_CDC_TransmitPacket(&hUsbDeviceFS);
       
  //等待发送完成
  while(hcdc->TxState)
  {
    if(HAL_GetTick() - timeout > 4)
    {
      result = USBD_BUSY;
      break;
    }
  }
  /* USER CODE END 7 */
  return result;
}
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/weixin_48607260/article/details/141085724

而服务器人 发表于 2024-8-14 14:00 | 显示全部楼层
函数中的hcdc->TxState是什么含义?
狄克爱老虎油 发表于 2024-8-17 23:50 来自手机 | 显示全部楼层
虚拟串口不需要调节波特率
grfqq325 发表于 2024-8-28 12:02 | 显示全部楼层
当你调用 CDC_Transmit_FS 发送数据时,如果设备处于忙状态(hcdc->TxState != 0),函数会返回 USBD_BUSY。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2350

主题

17466

帖子

21

粉丝
快速回复 在线客服 返回列表 返回顶部

2350

主题

17466

帖子

21

粉丝
快速回复 在线客服 返回列表 返回顶部