• 利用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)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述
    (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 */
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    在这里插入图片描述
    (8).添加代码之后编译完成烧录到电路板中,插入鼠标,移动鼠标可以看到坐标点在变动
    在这里插入图片描述
    (9).插入键盘,点击键盘上的按键,可以看到点击键盘的数值。
    在这里插入图片描述

  • 相关阅读:
    挂耳式蓝牙耳机哪家的好用,列举五款舒适度极佳的耳机分享
    Mysql数据库 4.SQL语言 DQL数据查询语言 查询
    制作linux系统内部yum源仓库
    java计算机毕业设计汇美食电子商城MyBatis+系统+LW文档+源码+调试部署
    AMQP协议详解
    停止使用 Storyboards 和 Interface Builder
    (2022 COLING)Context-Tuning情景化提示
    洛谷 P3397 地毯 Java实现 二维差分
    离线环境harbor 搭建及使用
    R语言中的数据结构----矩阵
  • 原文地址:https://blog.csdn.net/qizhi321123/article/details/126389227