2016-10-09 3 views
0

Ich habe versucht, einige grundlegende usb-Kommunikation mit einer USB-Maus mit meinem stm32f4 Discvery. Es gibt keine USB-Beispiele für mein Board, also ging ich zu anderen Boards.stm32cube, USB-Host, versteckte Maus/Tastatur

stms Cube-Bibliothek Thingy versprochene einfache Entwicklung und alle, so habe ich ein Projekt mit Cube einschließlich USB_OTG_FS im Host-Only-Modus und vier IO-Pins für LEDs generiert. Ich habe mir die Dateien angeschaut und es schien als wäre das Lesen von Maustasten ziemlich trivial, aber ich kann es nicht funktionieren lassen. wenn ich

devtype = USBH_HID_GetDeviceType(&hUsbHostFS); 

laufen erkennt sie das Gerät korrekt.

USBH_HID_MouseInit(&hUsbHostFS) 

kehrt USBH_OK, aber egal was ich versuche

mouse=USBH_HID_GetMouseInfo(&hUsbHostFS); 

ist immer NULL

"USBH_HID_MouseInit" wird nie in der Dokumentation (DM00105256.pdf) erwähnt auch, nur die RTOS-Beispiele verwenden sie. Wenn man das Beispiel des USB-Host-Standalone liest, würde es so aussehen, als würde man mit einer Maus kommunizieren, indem man GetDeviceType ausführt und GetMouseInfo abfragt, aber ich kann es nicht zum Laufen bringen.

Dies ist der Code ich hinzu, ist es in der Haupt ausgeführt, während

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; 

Rest des Codes ist unverändert. wie ich schon sagte bevor es die Verbindung erkennt und ob es sich um eine Maus, Tastatur oder ein unbekanntes Gerät handelt. Ich kann es einfach nicht kommunizieren

Antwort

0

Der Cube ist fehlerhaft, auf eine seltsame Weise codiert und nicht gut dokumentiert.

auf dem tatsächlichen Board Je Sie haben, müssen Sie sicherstellen, die Uhren sind richtig eingerichtet (in system_stm32f4.c)

Mit der STM32F407-basierten Version (http://www.st.com/en/evaluation-tools/stm32f4discovery.html) Sie diese Einstellungen verwenden sollen:

HSE = 8000000 
PLL_M = 8 
PLL_Q = 7 
PLL_N = 336 
PLL_P = 4 

Der USB OTG FS benötigt einen 48 MHz Takt. Hier sind die Gleichungen:

USB OTG FS, SDIO and RNG Clock = PLL_VCO/PLLQ 
PLL_VCO = (HSE_VALUE/PLL_M) * PLL_N