मैं पिछले दो सप्ताह से एक परियोजना पर काम कर रहा हूं और इस पूरे सप्ताह में इस एक मुद्दे पर बहस हुई है। आश्चर्य है कि अगर कोई मदद कर सकता है, तो मैं यथासंभव स्पष्ट और स्पष्ट होने की कोशिश करूंगा।
मैं STM32F302K8 (कोर्टेक्स एम 4) के आधार पर एक माइक्रोकंट्रोलर पर एक यूएसबी वर्चुअल कॉम पोर्ट को लागू करने की कोशिश कर रहा हूं। मैंने CDC क्लास को लागू करने वाले USB Full Speed Device स्थापित करने के लिए आवश्यक कोड उत्पन्न करने के लिए STM32CubMX का उपयोग किया है। मेरी डिवाइस विंडोज (डिवाइस मैनेजर) और लिनक्स दोनों में दिखाई देती है। मैं उदाहरण कोड के आधार पर एक साधारण इको फ़ंक्शन को लागू करने में सक्षम हूं, लेकिन जब मैं अब पीसी में डेटा भेजने के लिए फ़ंक्शन USBD_CDC_SetTxBuffer का उपयोग करने का प्रयास करता हूं , तो यह एक हार्ड फॉल्ट हैंडलर सेट करता है। मैंने इसे इस तथ्य से कम कर दिया है कि UsbDeviceFS.pClass (जो USBD_CDC_SetTxBuffer द्वारा आवश्यक है) फ़ील्ड को कभी भी आरंभीकृत नहीं किया जाता है क्योंकि USBD_CDC_Init () USB डिवाइस के प्रारंभ में कभी नहीं कहा जाता है।
मैंने कई फ़िक्स को लागू किया है (जिसमें ढेर का आकार बदलना , 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);
}