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). キーボードを挿入し、キーボードのボタンをクリックし
、クリックされたキーボードの値を確認できます。