我过去两个星期一直在研究一个项目,整整一个星期都在调试这个问题。我想知道是否有人可以提供帮助,所以我会尽量保持清晰明确。
我正在尝试在基于STM32F302K8(Cortex M4)的微控制器上实现USB虚拟通信端口。我已经使用STM32CubMX生成了设置实现CDC类的USB全速设备所需的代码。我的设备同时显示在Windows(设备管理器)和Linux中。我能够基于示例代码实现一个简单的回显功能,但是当我现在尝试使用功能USBD_CDC_SetTxBuffer将数据发送到PC时,这将启动一个硬故障处理程序。我将范围缩小到以下事实:从未初始化UsbDeviceFS.pClass(USBD_CDC_SetTxBuffer所需)字段,因为从未在USB设备的初始化中调用USBD_CDC_Init()。
我已经在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);
}