STM32 usb lib:USBD_CDC_SetRxBuffer如何知道缓冲区大小?

时间:2017-08-14 10:17:28

标签: usb stm32

我正在尝试使用一些基本的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不将缓冲区大小作为参数?

1 个答案:

答案 0 :(得分:0)

当你得到它时,数据以64块为单位。

因此,如果您有一个大于64字节的缓冲区,它将不会被单个数据包溢出。

然后,在您调用USBD_CDC_ReceivePacket()之前,下一个数据包将不会到来。

在调用USBD_CDC_ReceivePacket()之前,您将有足够的时间来播放数据。