OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5543|回复: 7

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

[复制链接]

23

主题

69

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2017-1-5
在线时间
50 小时
发表于 2017-3-27 17:29:25 | 显示全部楼层 |阅读模式
10金钱
概述: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\r\n",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]
请各位师兄 学长指点一二,不求代码 ,只愿得一二思路,谢谢

最佳答案

查看完整内容[请看2#楼]

在你的代码里找到一个类似于USBH_UserProcess()的函数,里面有一个HOST_USER_CLASS_ACTIVE的状态,进入了这个状态,就代表已经连接上了. 在HOST_USER_CLASS_ACTIVE状态中,如果 phost->pActiveClass->ClassCode == USB_HID_CLASS,那就是HID设备连上了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

277

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1522
金钱
1522
注册时间
2014-5-16
在线时间
217 小时
发表于 2017-3-27 17:29:26 | 显示全部楼层
在你的代码里找到一个类似于USBH_UserProcess()的函数,里面有一个HOST_USER_CLASS_ACTIVE的状态,进入了这个状态,就代表已经连接上了.
在HOST_USER_CLASS_ACTIVE状态中,如果 phost->pActiveClass->ClassCode == USB_HID_CLASS,那就是HID设备连上了
回复

使用道具 举报

23

主题

69

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2017-1-5
在线时间
50 小时
 楼主| 发表于 2017-3-27 17:32:16 | 显示全部楼层
另附上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 码
回复

使用道具 举报

23

主题

69

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2017-1-5
在线时间
50 小时
 楼主| 发表于 2017-3-28 08:55:39 | 显示全部楼层
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 */
   
      /* 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 */
   
      /* USER CODE END DRIVE_HIGH_CHARGE_FOR_FS */
    }
  }       
  HAL_Delay(200);
  return USBH_OK;  
}
在初始化函数里,发现这里没函数,要自己添加吧?这里添加啥函数?
回复

使用道具 举报

5

主题

277

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1522
金钱
1522
注册时间
2014-5-16
在线时间
217 小时
发表于 2017-3-28 09:04:53 | 显示全部楼层
为我的心 发表于 2017-3-28 08:55
USBH_StatusTypeDef  USBH_LL_DriverVBUS (USBH_HandleTypeDef *phost, uint8_t state)
{

这要看你的硬件上USB供电有没有开关控制,有的话这里就要进行开关控制.
回复

使用道具 举报

23

主题

69

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2017-1-5
在线时间
50 小时
 楼主| 发表于 2017-3-28 10:37:49 | 显示全部楼层
zmingwang 发表于 2017-3-28 09:04
这要看你的硬件上USB供电有没有开关控制,有的话这里就要进行开关控制.

cube开始没配置  仅做主机没勾选Active Vbus.   现在就想把USB连起,万事开头难的感觉,给你发消息 聊聊好吗 ?
回复

使用道具 举报

5

主题

277

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1522
金钱
1522
注册时间
2014-5-16
在线时间
217 小时
发表于 2017-3-28 10:56:57 | 显示全部楼层
为我的心 发表于 2017-3-28 10:37
cube开始没配置  仅做主机没勾选Active Vbus.   现在就想把USB连起,万事开头难的感觉,给你发消息 聊聊 ...

你这确实是开头,嗯,祝好运.
回复

使用道具 举报

23

主题

69

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2017-1-5
在线时间
50 小时
 楼主| 发表于 2017-3-28 11:01:12 | 显示全部楼层
USB是什么呢?一说USB是YouSB的意思,即“你傻B”的意思。另一种说法是USB其实是美国的弟弟,因为美国叫USA, USB当然是他的弟弟了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-18 17:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表