【发布时间】:2020-12-25 00:16:57
【问题描述】:
我需要将数据从 PC 发送到我的 STM32F3,所以我决定在 uC 中使用内置 USB。 但现在我有一个问题——我想一次向 stm32 发送大量数据——我的意思是 200-500 字节。
当我从 PC 发送带有少于 64 个图表的 minicom 数据包时 - 一切都很好 - 回调 CDC_Receive_FS(uint8_t* Buf, uint32_t *Len) 发生一次 - 它启用 UsbRxFlag,只是为了通知正在运行的程序有数据可用。
static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len)
{
/* USER CODE BEGIN 6 */
USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]);
USBD_CDC_ReceivePacket(&hUsbDeviceFS);
if( (Buf[0] == 'A') & (Buf[1] == 'T') ){
GPIOB->BSRR = (uint32_t)RX_Led_Pin;
UsbRxFlag = 1;
}
return (USBD_OK);
/* USER CODE END 6 */
}
但是当我尝试向 uC 发送更多数据(只是来自 minicom 的长文本)时,会发生一些奇怪的事情 - 有时 uC 根本没有反应 - 有时它没有考虑某些数据。
如何处理通过 USB-CDC 向 STM32F3 发送超过 64 字节的数据?
【问题讨论】:
-
旁白:
(Buf[0] == 'A') & (Buf[1] == 'T')通常写成(Buf[0] == 'A') && (Buf[1] == 'T'),但在这里并没有真正的功能差异。&与&&.