Son iki haftadır bir proje üzerinde çalışıyorum ve bu sorunun ayıklanması tüm hafta sürdü. Birinin yardım edip edemeyeceğini merak ederek, olabildiğince açık ve net olmaya çalışacağım.
STM32F302K8 (Cortex M4) tabanlı bir MicroController üzerinde bir USB Sanal İletişim Portu uygulamaya çalışıyorum. Bir CDC sınıfı uygulayan bir USB Tam Hızlı Aygıt kurmak için gereken kodu oluşturmak için STM32CubMX kullandım. Cihazım hem Windows'da (Cihaz Yöneticisi) hem de Linux'ta görünüyor. Örnek koda dayalı basit bir yankı işlevi uygulayabiliyorum ama şimdi PC'ye veri göndermek için USBD_CDC_SetTxBuffer işlevini kullanmaya çalıştığımda , bu bir Sabit Hata İşleyici başlatır . UsbDeviceFS.pClass (USBD_CDC_SetTxBuffer tarafından ihtiyaç duyulan) alanının asla USB aygıtının başlatılmasında USBD_CDC_Init () hiçbir zaman çağrılmadığı için daraltıldım .
ST forumunda belgelendiği gibi örnek kodda birkaç hatayı (yığın boyutunu değiştirmek, iletim bayrağını USBD_CDC_TransmitPacket'te düzeltmek ve CDC_DATA_HS_MAX_PACKET_SIZE'yi 512'den 256'ya değiştirmek) düzeltmeler uyguladım , ancak yine de aynı hata alıyorum.
Cihaz kurulum kodum
* 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);
}