2016-10-09 12 views
0

Я пытаюсь настроить базовую коммуникацию usb с помощью мыши usb, используя мой stm32f4. для моего доски нет примеров USB, поэтому я зашел посмотреть другие доски.stm32cube, usb host, спрятанная мышь/клавиатура

stm's Cube library thingy обещал легкую разработку и все, поэтому я сгенерировал проект с кубом, включающим USB_OTG_FS в режиме только хоста и четырьмя выводами для светодиодов. Я посмотрел файлы, и казалось, что чтение кнопок мыши будет довольно тривиально, но я не могу заставить его работать. если я бегу

devtype = USBH_HID_GetDeviceType(&hUsbHostFS); 

обнаруживает устройство правильно.

USBH_HID_MouseInit(&hUsbHostFS) 

возвращает USBH_OK, , но независимо от того, что я пытаюсь

mouse=USBH_HID_GetMouseInfo(&hUsbHostFS); 

не всегда NULL

"USBH_HID_MouseInit" никогда не упоминается в документации (DM00105256.pdf) также, только Примеры RTOS используют их. Чтение автономного примера usb-хоста, похоже, что для общения с мышью будет так же просто, как запуск GetDeviceType и опрос GetMouseInfo, но я не могу заставить его работать.

все это код, который я добавил, он выполняется в основном в то время как

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; 

остальная часть кода не изменяется. как я уже говорил, прежде чем он обнаружит соединение, и если это просто мышь, клавиатура или неизвестное устройство. Я просто не могу связаться с ним

ответ

0

Куб неисправен, закодирован странным образом и плохо документирован.

В зависимости от фактической платы у вас есть, вы должны убедиться, что часы настроены правильно (в system_stm32f4.c)

С stm32f407 на основе версии (http://www.st.com/en/evaluation-tools/stm32f4discovery.html) вы должны использовать эти настройки:

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

Для работы USB OTG FS требуется тактовая частота 48 МГц. Вот уравнения:

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

 Смежные вопросы

  • Нет связанных вопросов^_^