USB的HID应用上实现的一些问题,望指点迷津

2019-07-20 15:50发布

概述:STM32作为USB主机识别无线线盘,通过一条micro USB转USB,将无线键盘对应的USB插上。
现在就想让STM32连接HID设备,但我不知道哪条语句算是连接上了,部分代码如下
[mw_shl_code=applescript,true]  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_UART4_Init();
  MX_USB_HOST_Init();//初始化主机库   添加支持的类  开始主机过程

  /* USER CODE BEGIN 2 */
        HID_Class.Init(&hUsbHostFS); //The function init the HID class
//        USBH_HID_SetIdle(&hUsbHostFS,1,HID_KEYBRD_BOOT_CODE);
//        USBH_HID_SetProtocol(&hUsbHostFS,HID_KEYBRD_BOOT_CODE);
        type=USBH_HID_GetDeviceType(&hUsbHostFS);   //返回设备类型
        printf("type:%d ",type);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {

  /* USER CODE END WHILE */
    MX_USB_HOST_Process();        //运行主机协议栈
  /* USER CODE BEGIN 3 */

  }[/mw_shl_code]
请各位师兄 学长指点一二,不求代码 ,只愿得一二思路,谢谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
7条回答
为我的心
2019-07-20 20:13
另附上USB HOST主机手册相关内容:
1.HID 类接口初始化
接口初始化过程中,根据设备端点描述符,会分配和打开一个中断 IN 端点和 / 或一个中断
OUT 端点。对于启动鼠标与键盘,仅使用中断 IN 管道。
2.HID 类请求
对 HID 鼠标 / 键盘设备发出的类相关控制请求如表 17 所述。
表 17. HID 类请求
类请求 说明
Set Idle 设定 HID 鼠标 / 键盘的轮询周期。在 HOST_CLASS_REQUEST 阶段发送该请求。
Set Protocol 将 HID 协议设为鼠标和 HID 的启动协议。在
HOST_CLASS_REQUEST 阶段发送该请求。
3.HID 类处理
使用中断 IN 管道,通过接收 HID 报告来处理鼠标 / 键盘操作。
由后台函数和 SOF 函数协同进行鼠标、键盘的数据处理
• SOF 函数处理与 SOF 事件同步的 IN 通信事务的发起。
• 后台函数处理数据的接收以及通过数据接收回调函数来通知应用层。
使用 USBH_HID_Handle 结构体来保存过程变量
4.USBH_HID_GetReport 通过控制通道获取报告数据 ( HID 启动鼠标 / 键盘例程中
没有用到)
USBH_HID_SetReport 通过控制通道发送报告数据 ( HID 启动鼠标 / 键盘例程中
没有用到)
USBH_HID_SetIdle 设定 HID 轮询周期
USBH_HID_EventCallback 提供给应用层的事件回调:当 IN 中断管道接收到鼠标或键
盘 HID 报告数据时被调用。
USBH_HID_SetProtocol 发送 Set_Protocol 控制请求
USBH_HID_GetHIDDescriptor 获取 HID 描述符
USBH_HID_GetHIDReportDescriptor 获取 HID 报告描述符 (启动鼠标 / 键盘例程中没有用到)
USBH_HID_GetDeviceType 返回 HID 设备类型:鼠标或键盘
USBH_HID_GetMouseInfo 获取 HID_MOUSE_Info_TypeDef 类型结构体中的鼠标报
告数据 (如下所示)
USBH_HID_GetKeybdInfo 获取 HID_KEYBD_Info_TypeDef 类型结构体中的键盘报告
数据 (如下所示)
USBH_HID_GetASCIICode 将键盘按键转换为 ASCII 码

一周热门 更多>