过去两周我一直在做一个项目,调试这个问题已经占用了整整一周。想知道是否有人可以提供帮助,我将尝试尽可能明确和清晰。
我正在尝试在基于 STM32F302K8 (Cortex M4) 的微控制器上实现 USB 虚拟通信端口。我使用 STM32CubMX 生成了设置实现 CDC 类的 USB 全速设备所需的代码。我的设备同时显示在 Windows(设备管理器)和 Linux 中。我可以根据示例代码实现一个简单的回显函数,但是当我现在尝试使用函数USBD_CDC_SetTxBuffer向 PC 发送数据时,这会触发硬故障处理程序。我已将范围缩小到 UsbDeviceFS.pClass(USBD_CDC_SetTxBuffer 需要)字段从未初始化的事实,因为USBD_CDC_Init () 在 USB 设备的初始化中从未被调用。
我已经在 ST 论坛上记录的示例代码中修复了几个错误(包括更改堆大小、修复USBD_CDC_TransmitPacket中的传输标志以及将 CDC_DATA_HS_MAX_PACKET_SIZE 的大小从 512 更改为 256),但仍然出现相同的错误。
我的设备设置代码是
* USB Device Core handle declaration */
USBD_HandleTypeDef hUsbDeviceFS;
/* init function */
void MX_USB_DEVICE_Init(void)
{
/* 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);
}