STM32CubeMX ソフトウェアを使用して USB_HOST_HID を生成し、マウスとキーボード スキャナを接続します

1. テストプラットフォーム:
MCU: STM32F429IGT6
ツール: STM32CubeMX ソフトウェア
コンパイルソフトウェア: MDK

2. 設定手順
(1). STM32CubeMX ソフトウェアを開き、新しいプロジェクト ファイルを作成し、freertos オペレーティング システムでシリアル ポート 1 ルーチンを生成します (シリアル ポートを生成するルーチンについては、ここでは詳しく説明しません)。
(2). USB_OTG_HS の設定 基板上の USB ピンは PB14 と PB15 に接続されているため、ここで USB_OTG_HS を設定し、Internal FS Phy に Host Only を設定し、同時に割り込みを有効にします。
ここに画像の説明を挿入
(3). USB_HOST を設定します。マウスとキーボードは USB HID デバイスに属しているため、HS IP のクラスはヒューマン インターフェイス ホスト クラス (HID) を選択します。CMSIS_RTOS のタスク スタックは 512 として設定する必要があります。デフォルトは 128 です。プログラムが HardFault に入る原因となります。
ここに画像の説明を挿入
(4). 設定が完了したら、「GENERATE CODE」をクリックしてコードを生成し、プロジェクト ファイルを開き、USBH_UsrLog(…) マクロ定義を次のように置き換えます。

#define USBH_UsrLog() do {
      
      
printf(“USBH_UsrLog:) ;
printf(VA_ARGS);
printf(”\n”);
} while (0)

ここに画像の説明を挿入
(5). コンパイルが完了したら、それを回路基板に書き​​込み、キーボードを挿入すると、キーボードに列挙できます
ここに画像の説明を挿入
(6). マウスを挿入すると、マウスに列挙できます
ここに画像の説明を挿入
(7)。マウスとキーボードのどちらを操作しても、マウスとキーボードのイベント コールバック関数コードがまだ追加されていないため、シリアル ポート アシスタントには情報が出力されないことがわかります。usb_host.c ファイルに次のコードを追加します。

/* USER CODE BEGIN 1 */
void USBH_HID_EventCallback(USBH_HandleTypeDef *phost)
{
    
    
   HID_TypeTypeDef   type = HID_UNKNOWN;
 
   USBH_ErrLog("USBH_HID_EventCallback");
 
   type = USBH_HID_GetDeviceType(phost);
 
   switch(type)
   {
    
    
       case HID_KEYBOARD:
       {
    
    
            HID_KEYBD_Info_TypeDef *keyboard_info;
 
            char ascii;
            keyboard_info = USBH_HID_GetKeybdInfo(phost);
 
            if( keyboard_info != NULL )
            {
    
    
                ascii = USBH_HID_GetASCIICode(keyboard_info);
                if( ascii != 0)
                {
    
    
                    USBH_UsrLog("%c",ascii);
                }
            }
       }
 
       break;
 
       case HID_MOUSE:
        {
    
    
           HID_MOUSE_Info_TypeDef *mouse_info;
           mouse_info = USBH_HID_GetMouseInfo(phost);
           USBH_UsrLog("mouse_info X%d, Y%d ,button %d %d %d",mouse_info->x,mouse_info->y,mouse_info->buttons[2],mouse_info->buttons[1],mouse_info->buttons[0]);
       }
       break;
       default:
       break;
   }
}
/* USER CODE END 1 */

ここに画像の説明を挿入
(8). コードを追加した後、コンパイルして回路基板に焼き付け、マウスを挿入し、マウスを動かして座標が変化することを確認します (9). キーボードを挿入し、キーボードのボタンをクリックし
ここに画像の説明を挿入
、クリックされたキーボードの値を確認できます。
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/qizhi321123/article/details/126389227