打印
[应用相关]

STM32 虚拟串口发不出数据

[复制链接]
395|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tpgf|  楼主 | 2024-8-12 15:28 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
在某个项目上,使用到了USB虚拟串口功能,芯片是STM32F105,在芯片刚复位时功能是正常,但是多发几次数据后,就发不出去了,一直返回USBD_BUSY,在下图中的344行返回USBD_BUSY



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

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。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1931

主题

15611

帖子

11

粉丝