Последние две недели я работаю над проектом, и отладка этого вопроса заняла всю эту неделю. Хотите знать, если кто-нибудь может помочь, я постараюсь быть максимально четким и ясным.
Я пытаюсь реализовать виртуальный порт USB на микроконтроллере на базе STM32F302K8 (Cortex M4). Я использовал STM32CubMX для генерации кода, необходимого для настройки устройства USB Full Speed, реализующего класс 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);
}