zoukankan      html  css  js  c++  java
  • 使用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 */

  • 相关阅读:
    [C#][控件]WebBrowser 使用范例
    [java]经验集
    [html][easyui]DataGrid 绑定
    [转]jQuery 读取 xml
    [转][html]大文件下载
    [转][javascript]判断传入参数
    [html][javascript] Cookie
    [bat]批处理删默认共享和清理垃圾
    [转]JavaScript RegExp 对象参考手册
    5个编程问题(1小时解决)
  • 原文地址:https://www.cnblogs.com/libra13179/p/7371842.html
Copyright © 2011-2022 走看看