Je travaille sur un projet depuis deux semaines maintenant et le débogage de ce problème a pris toute la semaine. Vous vous demandez si quelqu'un peut m'aider, je vais essayer d'être aussi explicite et clair que possible.
J'essaie d'implémenter un port de communication virtuel USB sur un MicroController basé sur le STM32F302K8 (Cortex M4). J'ai utilisé STM32CubMX pour générer le code nécessaire à la configuration d'un périphérique USB pleine vitesse implémentant une classe CDC. Mon appareil apparaît à la fois sous Windows (Gestionnaire de périphériques) et Linux. Je suis en mesure d'implémenter une fonction d'écho simple basée sur l'exemple de code mais lorsque j'essaie maintenant d'utiliser la fonction USBD_CDC_SetTxBuffer pour envoyer des données au PC, cela déclenche un gestionnaire de pannes matérielles. J'ai réduit cela au fait que le champ UsbDeviceFS.pClass (qui est requis par USBD_CDC_SetTxBuffer) n'est jamais initialisé car USBD_CDC_Init () n'est jamais appelé dans l'initialisation du périphérique USB.
J'ai implémenté des correctifs pour plusieurs bogues (y compris la modification de la taille du segment de mémoire , la correction de l'indicateur de transmission dans USBD_CDC_TransmitPacket et la modification de la taille de CDC_DATA_HS_MAX_PACKET_SIZE à 256 contre 512) dans l'exemple de code tel que documenté sur le forum ST mais toujours avec la même erreur.
Le code de configuration de mon appareil est
* 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);
}