2016-10-09 35 views
0

私はstm32f4ディスクリプションを使ってusbマウスで基本的なUSB通信を設定しようとしています。私のボードのためのUSBの例はありませんので、私は他のボードを見に行きました。stm32cube、usbホスト、hidマウス/キーボード

stmのキューブライブラリーは簡単な開発を約束したので、ホスト専用モードでUSB_OTG_FS、LED用に4つのIOピンを含むキューブを含むプロジェクトを生成しました。 私はファイルを見て、マウスボタンを読むのはかなり簡単なようでしたが、動作させることはできません。 実行した場合

devtype = USBH_HID_GetDeviceType(&hUsbHostFS); 

デバイスを正しく検出しました。

USBH_HID_MouseInit(&hUsbHostFS) 

はUSBH_OK、 を返しますが、関係なく、私は

mouse=USBH_HID_GetMouseInfo(&hUsbHostFS); 

しようとするもの、のみ

が "USBH_HID_MouseInitは" ドキュメント(DM00105256.pdf)で言及されることはありません も常にNULLではありませんRTOSの例で使用しています。 USBホストのスタンドアロンの例を読んでみると、マウスとcomunicateするのは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

キューブはバグであり、奇妙な方法でコード化されており、十分に文書化されていません。 stm32f407ベースのバージョン(http://www.st.com/en/evaluation-tools/stm32f4discovery.html)で

あなたが持っている実際のボードによっては、クロックが(system_stm32f4.cで)正しく設定されていることを確認する必要があり

あなたは、これらの設定を使用する必要があります。

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

USB OTG FSには48MHzクロックが必要です。方程式は次のとおりです。

USB OTG FS, SDIO and RNG Clock = PLL_VCO/PLLQ 
PLL_VCO = (HSE_VALUE/PLL_M) * PLL_N 
関連する問題