我正在尝试使用一些基本的USB CDC来处理stm32f103蓝色药丸。
在示例中,有这些代码片段
#define APP_RX_DATA_SIZE 8
uint8_t UserRxBufferFS[APP_RX_DATA_SIZE];
static int8_t CDC_Init_FS(void)
{
/* USER CODE BEGIN 3 */
/* Set Application Buffers */
USBD_CDC_SetTxBuffer(&hUsbDeviceFS, UserTxBufferFS, 0);
USBD_CDC_SetRxBuffer(&hUsbDeviceFS, UserRxBufferFS);
return (USBD_OK);
/* USER CODE END 3 */
}
所以......函数USBD_CDC_SetRxBuffer不会将长度作为参数。 怎么可能?
当我从一个终端发送一个由144个字符组成的愚蠢字符串时,我得到64个数据块。
长度为8表示缓冲区溢出。我读到某个地方,USB的东西发生在64个大小的数据包中。好的。
那么我应该在什么基础上设置APP_RX_DATA_SIZE?如何防止溢出?
为什么USBD_CDC_SetRxBuffer不将缓冲区大小作为参数?
答案 0 :(得分:0)
当你得到它时,数据以64块为单位。
因此,如果您有一个大于64字节的缓冲区,它将不会被单个数据包溢出。
然后,在您调用USBD_CDC_ReceivePacket()之前,下一个数据包将不会到来。
在调用USBD_CDC_ReceivePacket()之前,您将有足够的时间来播放数据。