Я працюю над проектом протягом останніх двох тижнів і налагодження цього питання займало цілий тиждень. Цікаво, чи може хтось допомогти, я постараюся бути максимально чітким і зрозумілим.
Я намагаюся реалізувати USB-порт Virtual Comm на MicroController на базі STM32F302K8 (Cortex M4). Я використовував STM32CubMX для створення коду, необхідного для налаштування USB-пристрою повної швидкості, що реалізує клас CDC. Мій пристрій відображається в Windows (Диспетчер пристроїв) та Linux. Я можу реалізувати просту ехо-функцію на основі прикладу коду, але коли я зараз намагаюся використовувати функцію USBD_CDC_SetTxBuffer для надсилання даних на ПК, це запускає Hard Fault Handler. Я звузив це до того, що поле UsbDeviceFS.pClass (який потрібен USBD_CDC_SetTxBuffer) поле ніколи не ініціалізується, оскільки USBD_CDC_Init () ніколи не викликається при ініціалізації USB-пристрою.
Я реалізував виправлення декількох помилок (включаючи зміну розміру купи, виправлення прапора передачі в USBD_CDC_TransmitPacket та зміну розміру CDC_DATA_HS_MAX_PACKET_SIZE до 256 з 512) у коді прикладу, як це зафіксовано на форумі ST, але все ще отримує ту саму помилку.
Код налаштування мого пристрою є
* 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);
}