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是这样“开环”的吗?
|