一、测试平台: MCU:STM32F429IGT6 工具:STM32CubeMX软件 编译软件:MDK
二、配置步骤 (1).打开STM32CubeMX软件,创建新的工程文件,先生成一个带有freertos操作系统的串口1例程,生成串口的例程这里不再详细介绍。 (2).配置USB_OTG_HS,由于电路板上USB管脚连接的是PB14和PB15,所以这里配置USB_OTG_HS,Internal FS Phy项配置Host Only,同时开启中断。 (3).配置USB_HOST,由于鼠标和键盘属于USB HID设备,则Class For HS IP选择Human Interface Host Class(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).插入键盘,点击键盘上的按键,可以看到点击键盘的数值。
|