利用STM32CubeMX软件生成USB_HOST_HID连接鼠标和键盘扫码枪

一、测试平台:
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).插入键盘,点击键盘上的按键,可以看到点击键盘的数值。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qizhi321123/article/details/126389227