J'ai essayé de mettre en place une communication usb de base avec une souris USB en utilisant mon stm32f4 discvery. il n'y a pas d'exemples USB pour mon conseil d'administration alors je suis allé voir d'autres conseils.stm32cube, hôte USB, caché souris/clavier
La bibliothèque Cube de stm a été conçue pour un développement facile et j'ai donc généré un projet avec un cube comprenant USB_OTG_FS en mode hôte seulement et quatre broches IO pour les LED. Je jetais un coup d'oeil dans les fichiers et il semblait que la lecture des boutons de la souris serait assez triviale, mais je ne peux pas le faire fonctionner. si je lance
devtype = USBH_HID_GetDeviceType(&hUsbHostFS);
détecte l'appareil correctement.
USBH_HID_MouseInit(&hUsbHostFS)
retourne USBH_OK, mais peu importe ce que j'essaie
mouse=USBH_HID_GetMouseInfo(&hUsbHostFS);
est toujours NULL
"USBH_HID_MouseInit" est jamais mentionné dans la documentation (DM00105256.pdf) aussi, seule la Les exemples RTOS les utilisent. En lisant l'exemple autonome de l'hôte USB, il semblerait que communiquer avec une souris serait aussi simple que d'exécuter GetDeviceType, et interroger GetMouseInfo, mais je n'arrive pas à le faire fonctionner.
c'est tout le code que j'ajouté, il est exécuté dans la principale tandis que
if(Appli_state == APPLICATION_READY){
switch(state)
{
case 0:
devtype = USBH_HID_GetDeviceType(&hUsbHostFS);
if(devtype == HID_MOUSE){
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_14,1);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_12,0);
state=1;
}
else if(devtype == HID_KEYBOARD){
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_14,0);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_12,1);
state=2;
}
else{
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_14,0);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_12,0);
}
break;
case 1:
if(USBH_HID_MouseInit(&hUsbHostFS)==0){
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_15,1);
state=3;
}
else {
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_15,0);
state=0;
}
break;
case 3:
mouse=USBH_HID_GetMouseInfo(&hUsbHostFS);
if(mouse != NULL)HAL_GPIO_WritePin(GPIOD,GPIO_PIN_13,1);
else HAL_GPIO_WritePin(GPIOD,GPIO_PIN_13,0);
break;
default:
break;
}
}
if(Appli_state != APPLICATION_READY) state=0;
reste du code est inchangé. comme je l'ai dit avant qu'il détecte la connexion et si c'est une souris, un clavier ou un périphérique inconnu très bien. Je n'arrive pas à l'obtenir pour communiquer