【温故而知新】类似文章浅析USB HID ReportDesc (HID报告描述符)

现在将en.stm32cubef1\STM32Cube_FW_F1_V1.4.0\Middlewares\ST\STM32_USB_Host_Library\Core\Inc\usbh_def.H

/********************************************************************************* @file    usbh_def.h* @author  MCD Application Team* @version V3.2.2* @date    07-July-2015* @brief   Definitions used in the USB host library******************************************************************************* @attention** <h2><center>&copy; COPYRIGHT 2015 STMicroelectronics</center></h2>** Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");* You may not use this file except in compliance with the License.* You may obtain a copy of the License at:**        http://www.st.com/software_license_agreement_liberty_v2** Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.********************************************************************************//* Define to prevent recursive  ----------------------------------------------*/
#ifndef  USBH_DEF_H
#define  USBH_DEF_H#ifdef __cplusplusextern "C" {
#endif/* Includes ------------------------------------------------------------------*/
#include "usbh_conf.h"/** @addtogroup USBH_LIB* @{*//** @addtogroup USBH_LIB_CORE
* @{
*//** @defgroup USBH_DEF* @brief This file is includes USB descriptors* @{*/ #ifndef NULL
#define NULL  0
#endif#ifndef FALSE
#define FALSE 0
#endif#ifndef TRUE
#define TRUE  1
#endif#define ValBit(VAR,POS)                               (VAR & (1 << POS))
#define SetBit(VAR,POS)                               (VAR |= (1 << POS))
#define ClrBit(VAR,POS)                               (VAR &= ((1 << POS)^255))#define  LE16(addr)             (((uint16_t)(*((uint8_t *)(addr))))\+ (((uint16_t)(*(((uint8_t *)(addr)) + 1))) << 8))#define  LE16S(addr)              (uint16_t)(LE16((addr)))#define  LE32(addr)              ((((uint32_t)(*(((uint8_t *)(addr)) + 0))) + \(((uint32_t)(*(((uint8_t *)(addr)) + 1))) << 8) + \(((uint32_t)(*(((uint8_t *)(addr)) + 2))) << 16) + \(((uint32_t)(*(((uint8_t *)(addr)) + 3))) << 24)))#define  LE64(addr)              ((((uint64_t)(*(((uint8_t *)(addr)) + 0))) + \(((uint64_t)(*(((uint8_t *)(addr)) + 1))) <<  8) +\(((uint64_t)(*(((uint8_t *)(addr)) + 2))) << 16) +\(((uint64_t)(*(((uint8_t *)(addr)) + 3))) << 24) +\(((uint64_t)(*(((uint8_t *)(addr)) + 4))) << 32) +\(((uint64_t)(*(((uint8_t *)(addr)) + 5))) << 40) +\(((uint64_t)(*(((uint8_t *)(addr)) + 6))) << 48) +\(((uint64_t)(*(((uint8_t *)(addr)) + 7))) << 56)))#define  LE24(addr)              ((((uint32_t)(*(((uint8_t *)(addr)) + 0))) + \(((uint32_t)(*(((uint8_t *)(addr)) + 1))) << 8) + \(((uint32_t)(*(((uint8_t *)(addr)) + 2))) << 16)))#define  LE32S(addr)              (int32_t)(LE32((addr)))#define  USB_LEN_DESC_HDR                               0x02
#define  USB_LEN_DEV_DESC                               0x12
#define  USB_LEN_CFG_DESC                               0x09
#define  USB_LEN_IF_DESC                                0x09
#define  USB_LEN_EP_DESC                                0x07
#define  USB_LEN_OTG_DESC                               0x03
#define  USB_LEN_SETUP_PKT                              0x08/* bmRequestType :D7 Data Phase Transfer Direction  */
#define  USB_REQ_DIR_MASK                               0x80
#define  USB_H2D                                        0x00
#define  USB_D2H                                        0x80/* bmRequestType D6..5 Type */
#define  USB_REQ_TYPE_STANDARD                          0x00
#define  USB_REQ_TYPE_CLASS                             0x20
#define  USB_REQ_TYPE_VENDOR                            0x40
#define  USB_REQ_TYPE_RESERVED                          0x60/* bmRequestType D4..0 Recipient */
#define  USB_REQ_RECIPIENT_DEVICE                       0x00
#define  USB_REQ_RECIPIENT_INTERFACE                    0x01
#define  USB_REQ_RECIPIENT_ENDPOINT                     0x02
#define  USB_REQ_RECIPIENT_OTHER                        0x03/* Table 9-4. Standard Request Codes  */
/* bRequest , Value */
#define  USB_REQ_GET_STATUS                             0x00
#define  USB_REQ_CLEAR_FEATURE                          0x01
#define  USB_REQ_SET_FEATURE                            0x03
#define  USB_REQ_SET_ADDRESS                            0x05
#define  USB_REQ_GET_DESCRIPTOR                         0x06
#define  USB_REQ_SET_DESCRIPTOR                         0x07
#define  USB_REQ_GET_CONFIGURATION                      0x08
#define  USB_REQ_SET_CONFIGURATION                      0x09
#define  USB_REQ_GET_INTERFACE                          0x0A
#define  USB_REQ_SET_INTERFACE                          0x0B
#define  USB_REQ_SYNCH_FRAME                            0x0C/* Table 9-5. Descriptor Types of USB Specifications */
#define  USB_DESC_TYPE_DEVICE                              1
#define  USB_DESC_TYPE_CONFIGURATION                       2
#define  USB_DESC_TYPE_STRING                              3
#define  USB_DESC_TYPE_INTERFACE                           4
#define  USB_DESC_TYPE_ENDPOINT                            5
#define  USB_DESC_TYPE_DEVICE_QUALIFIER                    6
#define  USB_DESC_TYPE_OTHER_SPEED_CONFIGURATION           7
#define  USB_DESC_TYPE_INTERFACE_POWER                     8
#define  USB_DESC_TYPE_HID                                 0x21
#define  USB_DESC_TYPE_HID_REPORT                          0x22#define USB_DEVICE_DESC_SIZE                               18
#define USB_CONFIGURATION_DESC_SIZE                        9
#define USB_HID_DESC_SIZE                                  9
#define USB_INTERFACE_DESC_SIZE                            9
#define USB_ENDPOINT_DESC_SIZE                             7/* Descriptor Type and Descriptor Index  */
/* Use the following values when calling the function USBH_GetDescriptor  */
#define  USB_DESC_DEVICE                    ((USB_DESC_TYPE_DEVICE << 8) & 0xFF00)
#define  USB_DESC_CONFIGURATION             ((USB_DESC_TYPE_CONFIGURATION << 8) & 0xFF00)
#define  USB_DESC_STRING                    ((USB_DESC_TYPE_STRING << 8) & 0xFF00)
#define  USB_DESC_INTERFACE                 ((USB_DESC_TYPE_INTERFACE << 8) & 0xFF00)
#define  USB_DESC_ENDPOINT                  ((USB_DESC_TYPE_INTERFACE << 8) & 0xFF00)
#define  USB_DESC_DEVICE_QUALIFIER          ((USB_DESC_TYPE_DEVICE_QUALIFIER << 8) & 0xFF00)
#define  USB_DESC_OTHER_SPEED_CONFIGURATION ((USB_DESC_TYPE_OTHER_SPEED_CONFIGURATION << 8) & 0xFF00)
#define  USB_DESC_INTERFACE_POWER           ((USB_DESC_TYPE_INTERFACE_POWER << 8) & 0xFF00)
#define  USB_DESC_HID_REPORT                ((USB_DESC_TYPE_HID_REPORT << 8) & 0xFF00)
#define  USB_DESC_HID                       ((USB_DESC_TYPE_HID << 8) & 0xFF00)#define  USB_EP_TYPE_CTRL                               0x00
#define  USB_EP_TYPE_ISOC                               0x01
#define  USB_EP_TYPE_BULK                               0x02
#define  USB_EP_TYPE_INTR                               0x03#define  USB_EP_DIR_OUT                                 0x00
#define  USB_EP_DIR_IN                                  0x80
#define  USB_EP_DIR_MSK                                 0x80  #ifndef USBH_MAX_PIPES_NBR#define USBH_MAX_PIPES_NBR                             15
#endif /* USBH_MAX_PIPES_NBR */#define USBH_DEVICE_ADDRESS_DEFAULT                     0
#define USBH_MAX_ERROR_COUNT                            2
#define USBH_DEVICE_ADDRESS                             1/*** @}*/ #define USBH_CONFIGURATION_DESCRIPTOR_SIZE (USB_CONFIGURATION_DESC_SIZE \+ USB_INTERFACE_DESC_SIZE\+ (USBH_MAX_NUM_ENDPOINTS * USB_ENDPOINT_DESC_SIZE))#define CONFIG_DESC_wTOTAL_LENGTH (ConfigurationDescriptorData.ConfigDescfield.\ConfigurationDescriptor.wTotalLength)typedef union
{uint16_t w;struct BW{uint8_t msb;uint8_t lsb;}bw;
}
uint16_t_uint8_t;typedef union _USB_Setup
{uint32_t d8[2];struct _SetupPkt_Struc{uint8_t           bmRequestType;uint8_t           bRequest;uint16_t_uint8_t  wValue;uint16_t_uint8_t  wIndex;uint16_t_uint8_t  wLength;} b;
}
USB_Setup_TypeDef;  typedef  struct  _DescHeader
{uint8_t  bLength;       uint8_t  bDescriptorType;
}
USBH_DescHeader_t;typedef struct _DeviceDescriptor
{uint8_t   bLength;uint8_t   bDescriptorType;uint16_t  bcdUSB;        /* USB Specification Number which device complies too */uint8_t   bDeviceClass;uint8_t   bDeviceSubClass; uint8_t   bDeviceProtocol;/* If equal to Zero, each interface specifies its own classcode if equal to 0xFF, the class code is vendor specified.Otherwise field is valid Class Code.*/uint8_t   bMaxPacketSize;uint16_t  idVendor;      /* Vendor ID (Assigned by USB Org) */uint16_t  idProduct;     /* Product ID (Assigned by Manufacturer) */uint16_t  bcdDevice;     /* Device Release Number */uint8_t   iManufacturer;  /* Index of Manufacturer String Descriptor */uint8_t   iProduct;       /* Index of Product String Descriptor */uint8_t   iSerialNumber;  /* Index of Serial Number String Descriptor */uint8_t   bNumConfigurations; /* Number of Possible Configurations */
}
USBH_DevDescTypeDef;typedef struct _EndpointDescriptor
{uint8_t   bLength;uint8_t   bDescriptorType;uint8_t   bEndpointAddress;   /* indicates what endpoint this descriptor is describing */uint8_t   bmAttributes;       /* specifies the transfer type. */uint16_t  wMaxPacketSize;    /* Maximum Packet Size this endpoint is capable of sending or receiving */  uint8_t   bInterval;          /* is used to specify the polling interval of certain transfers. */
}
USBH_EpDescTypeDef;typedef struct _InterfaceDescriptor
{uint8_t bLength;uint8_t bDescriptorType;uint8_t bInterfaceNumber;uint8_t bAlternateSetting;    /* Value used to select alternative setting */uint8_t bNumEndpoints;        /* Number of Endpoints used for this interface */uint8_t bInterfaceClass;      /* Class Code (Assigned by USB Org) */uint8_t bInterfaceSubClass;   /* Subclass Code (Assigned by USB Org) */uint8_t bInterfaceProtocol;   /* Protocol Code */uint8_t iInterface;           /* Index of String Descriptor Describing this interface */USBH_EpDescTypeDef               Ep_Desc[USBH_MAX_NUM_ENDPOINTS];
}
USBH_InterfaceDescTypeDef;typedef struct _ConfigurationDescriptor
{uint8_t   bLength;uint8_t   bDescriptorType;uint16_t  wTotalLength;        /* Total Length of Data Returned */uint8_t   bNumInterfaces;       /* Number of Interfaces */uint8_t   bConfigurationValue;  /* Value to use as an argument to select this configuration*/uint8_t   iConfiguration;       /*Index of String Descriptor Describing this configuration */uint8_t   bmAttributes;         /* D7 Bus Powered , D6 Self Powered, D5 Remote Wakeup , D4..0 Reserved (0)*/uint8_t   bMaxPower;            /*Maximum Power Consumption */USBH_InterfaceDescTypeDef        Itf_Desc[USBH_MAX_NUM_INTERFACES];
}
USBH_CfgDescTypeDef;/* Following USB Host status */
typedef enum
{USBH_OK   = 0,USBH_BUSY,USBH_FAIL,USBH_NOT_SUPPORTED,USBH_UNRECOVERED_ERROR,USBH_ERROR_SPEED_UNKNOWN,
}USBH_StatusTypeDef;/** @defgroup USBH_CORE_Exported_Types* @{*/typedef enum
{USBH_SPEED_HIGH  = 0,USBH_SPEED_FULL  = 1,USBH_SPEED_LOW   = 2,  }USBH_SpeedTypeDef;/* Following states are used for gState */
typedef enum
{HOST_IDLE =0,HOST_DEV_WAIT_FOR_ATTACHMENT,  HOST_DEV_ATTACHED,HOST_DEV_DISCONNECTED,  HOST_DETECT_DEVICE_SPEED,HOST_ENUMERATION,HOST_CLASS_REQUEST,  HOST_INPUT,HOST_SET_CONFIGURATION,HOST_CHECK_CLASS,HOST_CLASS,HOST_SUSPENDED,HOST_ABORT_STATE,
}HOST_StateTypeDef;  /* Following states are used for EnumerationState */
typedef enum
{ENUM_IDLE = 0,ENUM_GET_FULL_DEV_DESC,ENUM_SET_ADDR,ENUM_GET_CFG_DESC,ENUM_GET_FULL_CFG_DESC,ENUM_GET_MFC_STRING_DESC,ENUM_GET_PRODUCT_STRING_DESC,ENUM_GET_SERIALNUM_STRING_DESC,
} ENUM_StateTypeDef;  /* Following states are used for CtrlXferStateMachine */
typedef enum
{CTRL_IDLE =0,CTRL_SETUP,CTRL_SETUP_WAIT,CTRL_DATA_IN,CTRL_DATA_IN_WAIT,CTRL_DATA_OUT,CTRL_DATA_OUT_WAIT,CTRL_STATUS_IN,CTRL_STATUS_IN_WAIT,CTRL_STATUS_OUT,CTRL_STATUS_OUT_WAIT,CTRL_ERROR,CTRL_STALLED,CTRL_COMPLETE
}CTRL_StateTypeDef;  /* Following states are used for RequestState */
typedef enum
{CMD_IDLE =0,CMD_SEND,CMD_WAIT
} CMD_StateTypeDef;  typedef enum {USBH_URB_IDLE = 0,USBH_URB_DONE,USBH_URB_NOTREADY,USBH_URB_NYET,  USBH_URB_ERROR,USBH_URB_STALL
}USBH_URBStateTypeDef;typedef enum
{USBH_PORT_EVENT = 1,  USBH_URB_EVENT,USBH_CONTROL_EVENT,    USBH_CLASS_EVENT,     USBH_STATE_CHANGED_EVENT,
}
USBH_OSEventTypeDef;/* Control request structure */
typedef struct
{uint8_t               pipe_in; uint8_t               pipe_out; uint8_t               pipe_size;  uint8_t               *buff;uint16_t              length;uint16_t              timer;  USB_Setup_TypeDef     setup;CTRL_StateTypeDef     state;  uint8_t               errorcount;  } USBH_CtrlTypeDef;/* Attached device structure */
typedef struct
{
#if (USBH_KEEP_CFG_DESCRIPTOR == 1)  uint8_t                           CfgDesc_Raw[USBH_MAX_SIZE_CONFIGURATION];
#endif  uint8_t                           Data[USBH_MAX_DATA_BUFFER];uint8_t                           address;uint8_t                           speed;__IO uint8_t                      is_connected;    uint8_t                           current_interface;   USBH_DevDescTypeDef               DevDesc;USBH_CfgDescTypeDef               CfgDesc; }USBH_DeviceTypeDef;struct _USBH_HandleTypeDef;/* USB Host Class structure */
typedef struct
{const char          *Name;uint8_t              ClassCode;  USBH_StatusTypeDef  (*Init)        (struct _USBH_HandleTypeDef *phost);USBH_StatusTypeDef  (*DeInit)      (struct _USBH_HandleTypeDef *phost);USBH_StatusTypeDef  (*Requests)    (struct _USBH_HandleTypeDef *phost);  USBH_StatusTypeDef  (*BgndProcess) (struct _USBH_HandleTypeDef *phost);USBH_StatusTypeDef  (*SOFProcess) (struct _USBH_HandleTypeDef *phost);  void*                pData;
} USBH_ClassTypeDef;/* USB Host handle structure */
typedef struct _USBH_HandleTypeDef
{__IO HOST_StateTypeDef     gState;       /*  Host State Machine Value */ENUM_StateTypeDef     EnumState;    /* Enumeration state Machine */CMD_StateTypeDef      RequestState;       USBH_CtrlTypeDef      Control;USBH_DeviceTypeDef    device;USBH_ClassTypeDef*    pClass[USBH_MAX_NUM_SUPPORTED_CLASS];USBH_ClassTypeDef*    pActiveClass;uint32_t              ClassNumber;uint32_t              Pipes[15];__IO uint32_t         Timer;uint8_t               id;  void*                 pData;                  void                 (* pUser )(struct _USBH_HandleTypeDef *pHandle, uint8_t id);#if (USBH_USE_OS == 1)osMessageQId          os_event;   osThreadId            thread;
#endif  } USBH_HandleTypeDef;#if  defined ( __GNUC__ )#ifndef __weak#define __weak   __attribute__((weak))#endif /* __weak */#ifndef __packed#define __packed __attribute__((__packed__))#endif /* __packed */
#endif /* __GNUC__ */#ifdef __cplusplus
}
#endif#endif /* USBH_DEF_H *//************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

View Code

现在我们先看看 USBH_DevDescTypeDef结构体

/* Attached device structure */
typedef struct
{
#if (USBH_KEEP_CFG_DESCRIPTOR == 1)  uint8_t                           CfgDesc_Raw[USBH_MAX_SIZE_CONFIGURATION];
#endif  uint8_t                           Data[USBH_MAX_DATA_BUFFER];uint8_t                           address;uint8_t                           speed;__IO uint8_t                      is_connected;    uint8_t                           current_interface;   USBH_DevDescTypeDef               DevDesc; USBH_CfgDescTypeDef               CfgDesc; }USBH_DeviceTypeDef;

在看 USBH_DevDescTypeDef DevDesc之前我们先看 Universal Serial Bus Specification Revision 2.0

Table 9-8. Standard Device Descriptor

会发现USBH_DevDescTypeDef DevDesc就是上面的表格

typedef struct _DeviceDescriptor
{uint8_t   bLength;uint8_t   bDescriptorType;uint16_t  bcdUSB;        /* USB Specification Number which device complies too */uint8_t   bDeviceClass;uint8_t   bDeviceSubClass; uint8_t   bDeviceProtocol;/* If equal to Zero, each interface specifies its own classcode if equal to 0xFF, the class code is vendor specified.Otherwise field is valid Class Code.*/uint8_t   bMaxPacketSize;uint16_t  idVendor;      /* Vendor ID (Assigned by USB Org) */uint16_t  idProduct;     /* Product ID (Assigned by Manufacturer) */uint16_t  bcdDevice;     /* Device Release Number */uint8_t   iManufacturer;  /* Index of Manufacturer String Descriptor */uint8_t   iProduct;       /* Index of Product String Descriptor */uint8_t   iSerialNumber;  /* Index of Serial Number String Descriptor */uint8_t   bNumConfigurations; /* Number of Possible Configurations */
}
USBH_DevDescTypeDef;

在看 USBH_CfgDescTypeDef CfgDesc;之前我们看看

Table 9-10. Standard Configuration Descriptor

但是我们USBH_CfgDescTypeDef CfgDesc中多了USBH_InterfaceDescTypeDef        Itf_Desc[USBH_MAX_NUM_INTERFACES]

typedef struct _ConfigurationDescriptor{  uint8_t   bLength;  uint8_t   bDescriptorType;  uint16_t  wTotalLength;        /* Total Length of Data Returned */  uint8_t   bNumInterfaces;       /* Number of Interfaces */  uint8_t   bConfigurationValue;  /* Value to use as an argument to select this configuration*/  uint8_t   iConfiguration;       /*Index of String Descriptor Describing this configuration */  uint8_t   bmAttributes;         /* D7 Bus Powered , D6 Self Powered, D5 Remote Wakeup , D4..0 Reserved (0)*/  uint8_t   bMaxPower;            /*Maximum Power Consumption */  USBH_InterfaceDescTypeDef        Itf_Desc[USBH_MAX_NUM_INTERFACES];}USBH_CfgDescTypeDef;

我们继续翻书

Table 9-12. Standard Interface Descriptor

我们会发现USBH_InterfaceDescTypeDef中有多了 USBH_EpDescTypeDef Ep_Desc[USBH_MAX_NUM_ENDPOINTS];

typedef struct _InterfaceDescriptor
{uint8_t bLength;uint8_t bDescriptorType;uint8_t bInterfaceNumber;uint8_t bAlternateSetting;    /* Value used to select alternative setting */uint8_t bNumEndpoints;        /* Number of Endpoints used for this interface */uint8_t bInterfaceClass;      /* Class Code (Assigned by USB Org) */uint8_t bInterfaceSubClass;   /* Subclass Code (Assigned by USB Org) */uint8_t bInterfaceProtocol;   /* Protocol Code */uint8_t iInterface;           /* Index of String Descriptor Describing this interface */USBH_EpDescTypeDef               Ep_Desc[USBH_MAX_NUM_ENDPOINTS]; 
}
USBH_InterfaceDescTypeDef;

还是老规则先翻书

Table 9-13. Standard Endpoint Descriptor

typedef struct _EndpointDescriptor
{uint8_t   bLength;uint8_t   bDescriptorType;uint8_t   bEndpointAddress;   /* indicates what endpoint this descriptor is describing */uint8_t   bmAttributes;       /* specifies the transfer type. */uint16_t  wMaxPacketSize;    /* Maximum Packet Size this endpoint is capable of sending or receiving */  uint8_t   bInterval;          /* is used to specify the polling interval of certain transfers. */
}
USBH_EpDescTypeDef;

其实上面的描述符

 

转载于:https://www.cnblogs.com/libra13179/p/7219891.html

浅析STM32之usbh_def.H相关推荐

  1. 【浅析STM32之GPIO寄存器(CRL/CRH)配置 】

    浅析STM32之GPIO寄存器(CRL/CRH)配置 一.前言 GPIO的配置可以说是STM单片机的一大特色,通过GPIO的配置我们可以进行多种不同模式的输入和输出,并且进行配置的方式也有多种,一般我 ...

  2. 浅析STM32 Bootloader设计

    不需要拆机就能对产品进行固件升级是很多人想要的效果,不仅方便而且节省精力和成本.那么如何完成这项工作呢?接下来所介绍的Bootloader就可以完成这项工作,通过Bootloader引导程序完成固件的 ...

  3. C语言之#define,#ifdef,typedef,extern,statis,__weak的用法,看懂stm32中的.h和.c文件

    1. #define c语言中的预处理命令,用于宏定义. 示例: #define number 0xff(不用加分号) 这里就是用number代替了0xff. 2. #ifdef 条件编译,满足条件时 ...

  4. 【嵌入式设计开发】基于STM32 HD01双H桥高功率C车模车驱动板 程序设计

    HD01高功率驱动高速小车 HD01双H桥高功率赛车驱动板 驱动参数 引脚分配 引脚性能 STM32驱动代码 初始化代码 电机控制代码 控制频率参数 HD01双H桥高功率赛车驱动板 HD01高功率驱动 ...

  5. stm32中stm32f10x_type.h(固件3.0以前)、stm32f10x.h(固件3.0以后)、stdint.h文件的关系

    在stm32f10x的3.5固件库中stm32f10x.h有以下代码(第478行开始): /*** @}*/#include "core_cm3.h" #include " ...

  6. KeilC STM32添加.c .h文件的方法

    嵌入式初学者添加.c .h文件是可能会出现.h头文件无法生效的问题,在此将本人经历总结如下,供大家参考. 1,把所需添加的文件,放到这个文件夹下 项目名称\Core\Src 2,右击此处添加.c文件 ...

  7. STM32 USB Host 同时连接多个设备样例(如鼠标和键盘)--原创

    STM32 USB Host 同时连接多个设备样例(如鼠标和键盘) 在网上搜了很多都是USB Host单独连接鼠标或键盘的样例, 而当前很多无线鼠标键盘都是并到一个USB口上的, 也就是同一个USB有 ...

  8. 移植 uC/OS-III 到 STM32

    首先,打开 Micrium 公司官方网站(http://micrium.com/),点击"Downloads"选项卡进入下载页面,在"Brouse by MCU Manu ...

  9. 基于mini2440嵌入式linux上整合一套Domoticz智能家居系统(十)使用domoticz+mosquitto+Android客户端实现控制STM32板上的LED(一)

    本文将在前面mini2440建立的domoticz.mosquitto为服务器的基础上,以Android做远程客户端来实现对STM32芯片的开发板的LED进行灯控制,当然,这是一个基本功能的实现,如果 ...

最新文章

  1. 统一修改文件下所有图片大小 Python3
  2. Vue——props默认值为工厂函数时[工厂函数:undefined]问题解决方案
  3. 互联网大厂必学技能:压力测试!
  4. 师大校园网迅雷解封软件 Ver1.0.1.5(2009-06-12)
  5. linux之universal usb installer安装ubuntu
  6. jwt获取token_Koa开发之koa-jwt工作过程
  7. Java常用类(4)--System类
  8. visa linux 串口 通信,使用visa进行串口通信
  9. Linux常用命令汇总--ln
  10. java spring源码_spring源码分析-spring中的bean
  11. php无限分级快速,PHPTree——php快速生成无限级分类_php技巧
  12. 计算机的二进制,十六进制等的数值概念
  13. Quartz的misfire特性
  14. TP5使用easywechat进行微信Native扫码支付
  15. 【编程马拉松】【014-红与黑】
  16. 基于51单片机的电子密码锁设计
  17. Centos 7.5 1804安装绿联PL2303串口驱动
  18. python的中文社区
  19. ThinkPHP6集成腾讯云、短信宝短信发送的工具类
  20. 2014年中南大学复试-安全路径

热门文章

  1. mysql查询出过去一个月_Mysql查询今天、昨天、7天、近30天、本月、上一月 数据...
  2. 日期加减加1天_2小时整理了13个时间日期函数,动图演示简单易学,收藏备用吧...
  3. php pdo使用事务,PHP内PDO事务使用步骤详解
  4. php查询功能突然没有用,php – 为什么搜索查询没有在PHRETS中显示任何结果?
  5. h3c交换机 查看二层交换机端口ip_【分享】项目中如何选到称心如意的交换机?...
  6. python求解三元一次方程_北师大版八上数学5.2 求解二元一次方程组 知识点微课精讲...
  7. python使用多线程写生成器_Python学习——多线程,异步IO,生成器,协程
  8. python 复制文件夹内容 并结构一致_Python比较文件夹比另一同名文件夹多出的文件并复制出来的方法...
  9. shadows a parameter
  10. 下拉框_jQuery 美化界面的下拉框