我正在ARM Cortex M系列MCU(即STM32F107VCT)上构建USB驱动程序。 我的代码基于STM自己的代码生成软件CubeMX生成的USB CDC库代码。 在CubeMX中,MCU配置为支持64字节USB消息。
当USB有效负载为8个字符(即8个字节)或更小时,从主机发送消息并将其解析在MCU上可以正常工作。我在Wireshark中看到这样的消息在网络上被填充为64字节。
当发送9个字符时,MCU停止执行(不去硬件故障处理程序),并且没有碰到我插入CDC_Receive_FS函数中的任何断点,如下面的代码段所示。
我可以看到使用Wireshark从PC发出USB消息(填充为64个字节,就像将8个字符作为有效载荷时一样),并且MCU硬件确认了该消息,但是MCU停止了,没有达到任何断点。 / p>
我的主要问题:
有人知道为什么这会停止吗?也许我缺少一些简单的设置? 我可以在其中放置断点来真正尝试弄清楚到底发生了什么吗?对我来说,尚不清楚哪个函数实际调用CDC_Receive_FS
我对CDC_Receive_FS的实现:
static int8_t CDC_Receive_FS (uint8_t* Buf, uint32_t *Len)
{
/* USER CODE BEGIN 6 */
// Test breakpoint 1 set here
//My custom parser
USBDRIVER_receive(&(project.usbDriver), Buf, Len);
// Test breakpoint 2 set here
//CubeMX Generated functions
USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]);
USBD_CDC_ReceivePacket(&hUsbDeviceFS);
// Test breakpoint 3 set here
return (USBD_OK);
/* USER CODE END 6 */
}
请让我知道是否需要一些其他信息来解决该问题。
USB驱动程序由以下CubeMX自动生成的代码初始化:
void MX_USB_DEVICE_Init(void)
{
/* USER CODE BEGIN USB_DEVICE_Init_PreTreatment */
/* USER CODE END USB_DEVICE_Init_PreTreatment */
/* Init Device Library, add supported class and start the library. */
USBD_Init(&hUsbDeviceFS, &FS_Desc, DEVICE_FS);
USBD_RegisterClass(&hUsbDeviceFS, &USBD_CDC);
USBD_CDC_RegisterInterface(&hUsbDeviceFS, &USBD_Interface_fops_FS);
USBD_Start(&hUsbDeviceFS);
/* USER CODE BEGIN USB_DEVICE_Init_PostTreatment */
/* USER CODE END USB_DEVICE_Init_PostTreatment */
}