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

本文介绍如何修改STM32 USB Host库以支持同时连接多个设备,如鼠标和键盘。通过更新USBH_ClassTypeDef,HID_HandleTypeDef,并修改USBH_HID_InterfaceInit和USBH_HID_Process等函数,实现对多个接口的处理。测试验证了这种方法适用于其他多设备USB连接场景。
摘要由CSDN通过智能技术生成

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

在网上搜了很多都是USB Host单独连接鼠标或键盘的样例, 而当前很多无线鼠标键盘都是并到一个USB口上的, 也就是同一个USB有两个interface. 而官方提供的USB Host库中只会对一个Interface进行处理, 要么键盘要么鼠标, 所以为了能够同时使用键盘和鼠标要对USB Host库进行修改才行.
具体修改如下:
首先使用CubeMX创建了一个带USB HID类功能的工程, 创建步骤很简单网上有很多文档不在这里讨论.
接着进入正题, 修改USB Host库文件.

  1. usbh_def.h
    修改USBH_ClassTypeDef, 使当前Class支持多接口:
/* 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_MAX_NUM_INTERFACES]; /* HID interfaces Handle */
  uint8_t              InterfaceNum;				   /* interface 数量 */
  __IO uint8_t         CurrInterface;				   /* 当前interface */
/* ] */
} USBH_ClassTypeDef;

修改HID_HandleTypeDef, 记录interface的协议类型:

/* Structure for HID process */
typedef struct _HID_Process
{
   
  uint8_t              OutPipe;
  uint8_t              InPipe;
  HID_StateTypeDef     state;
  uint8_t              OutEp;
  uint8_t              InEp;
  HID_CtlStateTypeDef  ctl_state;
  FIFO_TypeDef         fifo;
  uint8_t              *pData;
  uint16_t             length;
  uint8_t              ep_addr;
  uint16_t             poll;
  uint32_t             timer;
  uint8_t              DataReady;
  HID_DescTypeDef      HID_Desc;
  USBH_StatusTypeDef
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值