在STM32 MCU挂起时接收USB消息

时间:2018-09-11 14:13:23

标签: c embedded usb stm32 cubemx

我正在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 */
}

0 个答案:

没有答案