• 使用STM32CubeMX生成USB_HOST_HID工程


    使用开发板为STM32F105开发板

    原本想将具体步骤给写出来。时间有限。直接将STM32F105_USBH_HID.IOC上传files.cnblogs.com/files/libra13179/STM32F105_USBH_HID.zip

    [需要注意开发板使用的外部晶振为25mhz]

    下面给出主要修改地方

    usbh_conf.c中修改

    /**
      * @brief  USBH_LL_DriverVBUS 
      *         Drive VBUS.
      * @param  phost: Host handle
      * @param  state : VBUS state
      *          This parameter can be one of the these values:
      *           0 : VBUS Active 
      *           1 : VBUS Inactive
      * @retval Status
      */
    USBH_StatusTypeDef  USBH_LL_DriverVBUS (USBH_HandleTypeDef *phost, uint8_t state)
    { 
    
      /* USER CODE BEGIN 0 */
      /* USER CODE END 0*/     
      if (phost->id == HOST_FS) 
      { 
        if (state == 0)
        {   
          /* Drive high Charge pump */
          /* ToDo: Add IOE driver control */       
          /* USER CODE BEGIN DRIVE_HIGH_CHARGE_FOR_FS */
          HAL_GPIO_WritePin(GPIOC, GPIO_PIN_9, GPIO_PIN_SET);
          /* USER CODE END DRIVE_HIGH_CHARGE_FOR_FS */ 
        } 
        else
        {
          /* Drive low Charge pump */
          /* ToDo: Add IOE driver control */    
          /* USER CODE BEGIN DRIVE_LOW_CHARGE_FOR_FS */
          HAL_GPIO_WritePin(GPIOC, GPIO_PIN_9, GPIO_PIN_RESET);
          /* USER CODE END DRIVE_LOW_CHARGE_FOR_FS */ 
        }
      }    
      HAL_Delay(200);
      return USBH_OK;  
    }

    在 usbh_conf.H修改使用rtt来打印信息

     /* DEBUG macros */  
    
    #ifdef RTT_LOG_ENABLED
    
    #include "rtt_log.h"
    
        #if (USBH_DEBUG_LEVEL > 0)
        #define  USBH_UsrLog   logi
        #else
        #define USBH_UsrLog(...)   
        #endif 
                                    
                                    
        #if (USBH_DEBUG_LEVEL > 1)
    
        #define  USBH_ErrLog    logw
        #else
        #define USBH_ErrLog(...)   
        #endif 
                                    
                                    
        #if (USBH_DEBUG_LEVEL > 2)                         
        #define  USBH_DbgLog    loge
        #else
        #define USBH_DbgLog(...)                         
        #endif
        
    #else
        
        #if (USBH_DEBUG_LEVEL > 0)
        #define  USBH_UsrLog(...)   printf(__VA_ARGS__);
                                    printf("
    ");
        #else
        #define USBH_UsrLog(...)   
        #endif 
                                    
                                    
        #if (USBH_DEBUG_LEVEL > 1)
    
        #define  USBH_ErrLog(...)   printf("ERROR: ") ;
                                    printf(__VA_ARGS__);
                                    printf("
    ");
        #else
        #define USBH_ErrLog(...)   
        #endif 
                                    
                                    
        #if (USBH_DEBUG_LEVEL > 2)                         
        #define  USBH_DbgLog(...)   printf("DEBUG : ") ;
                                    printf(__VA_ARGS__);
                                    printf("
    ");
        #else
        #define USBH_DbgLog(...)                         
        #endif
        
    #endif //RTT_LOG_ENABLED

    好了现在下载测试

    使用otg线将键盘和开发板连接

    好了现在开始我们添加一下怎么识别键盘的按键信息。

    在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 *USBH_HID_GetMouseInfo(USBH_HandleTypeDef *phost)
           }
           break;
           
           default:
           break;
       }
    }
    /* USER CODE END 1 */

    测试一下

    现在测试鼠标

    先在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 */

  • 相关阅读:
    SharePoint 中AJAX请求报错
    SharePoint Online 站点启用内容编辑器部件
    SharePoint 表单开发常用脚本[不断更新ing]
    SharePoint Online 工作流添加历史记录
    BBC评出的100本最具影响力经典书籍
    描写人物的成语汇总,请为孩子收藏!
    失传已久,1917年的满分作文,惊现于世!
    MySQL用户及权限
    数据库SQL优化大总结之 百万级数据库优化方案(转载)
    3分钟弄懂中国金融体系
  • 原文地址:https://www.cnblogs.com/libra13179/p/7371842.html
Copyright © 2020-2023  润新知