咚了个咚 发表于 2025-10-16 09:30

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

32F4 USB CDC   Cube IDE的代码流程是CDC_Transmit_FSUSBD_CDC_TransmitPacketUSBD_LL_TransmitHAL_PCD_EP_TransmitUSB_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溢出。
页: [1]
查看完整版本: 有没有办法判断主机是否已读取下位机发送给它的数据