[STM32F4] 有没有办法判断主机是否已读取下位机发送给它的数据

[复制链接]
106|3
咚了个咚 发表于 2025-10-16 09:30 | 显示全部楼层 |阅读模式
32F4 USB CDC   Cube IDE的代码流程是
CDC_Transmit_FS
USBD_CDC_TransmitPacket
USBD_LL_Transmit
HAL_PCD_EP_Transmit
USB_WritePacket
最后一个函数会向USB FIFO执行16次32位字传输。
HAL_StatusTypeDef USB_WritePacket(USB_OTG_GlobalTypeDef *USBx, uint8_t *src, uint8_t ch_ep_num, uint16_t len, uint8_t dma)
{
  uint32_t USBx_BASE = (uint32_t)USBx;
  uint32_t *pSrc = (uint32_t *)src;
  uint32_t count32b, i;
  if (dma == 0U)
  {
    count32b = ((uint32_t)len + 3U) / 4U;
    for (i = 0U; i < count32b; i++)
    {
      USBx_DFIFO((uint32_t)ch_ep_num) = *((__packed uint32_t *)pSrc);
      pSrc++;
    }
  }
  return HAL_OK;
}
我的问题是,有没有办法判断这些数据何时被读取。
我进行了一些测试,发现
调用CDC_Transmit_FS的速率限制约为10kHz
CDC_Transmit_FS的最大数据包大小为800字节
我确人这两个限制都与系统相关,因此我将速率限制在1kHz,大小限制在256字节。
各个函数有不同的返回代码,但似乎没有一个与是否可以继续发送更多数据相关。
USB是这样“开环”的吗?

onlycook 发表于 2025-10-16 15:47 | 显示全部楼层
查询端点状态
onlycook 发表于 2025-10-16 15:48 | 显示全部楼层
还可以用用中断通知
classroom 发表于 2025-10-16 16:49 | 显示全部楼层
推荐用传输完成中断来判断主机是否读取数据,避免FIFO溢出。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

62

主题

71

帖子

0

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