原文地址::http://blog.csdn.net/shench88/article/details/26719121

相关文章

1、usb通过getreport和setreport发送数据怎么设置----https://zhidao.baidu.com/question/1431521827822950619.html

2、自定义hid设备set_report设置和get_report获取报告描述符控制8字节数据 ----http://zhangzhian.blog.163.com/blog/static/23589602010426103338869/

3、USB之HID类Set_Report Request[调试手记1]----http://www.cnblogs.com/libra13179/p/7365910.html

4、使用STM32CubeMX生成USB_HOST_HID工程[添加对CAPS_LOCK指示灯的控制][SetReport]----http://www.cnblogs.com/libra13179/p/7373217.html

5、在USB键盘中取得SET REPORT的作法----http://bbs.21ic.com/icview-1076414-1-1.html

6、在USB KEYBOARD下,结合SET_REPORT及GET_REPORT的传输方式 ----http://bbs.21ic.com/icview-955196-1-1.html

7、头大, NUC1xx USB HID Set Report数据不对 [问题解决]----http://bbs.ic37.com/bbsview-34051.htm

1)在usb_prop.c的函数CustomHID_Data_Setup()中,GET_PROTOCOL之后增加如下代码:

/*** GET_PROTOCOL ***/
  else if ((Type_Recipient == (CLASS_REQUEST | INTERFACE_RECIPIENT))
           && RequestNo == GET_PROTOCOL)
  {
    CopyRoutine = CustomHID_GetProtocolValue;
  } /* 以上代码为原有例程中的代码 */
  /*** GET_REPORT ***/ /* 以下代码支持GET_REPORT */
  else if((Type_Recipient == (CLASS_REQUEST | INTERFACE_RECIPIENT))
        && RequestNo == GET_REPORT)
  {
    CopyRoutine = CustomHID_GetReport;
  }

2)再增加一个函数:

uint8_t *CustomHID_GetReport(uint16_t Length)
{
  if (Length == 0)
  {
    return 10;
  }
  return &Report_Buffer[pInformation->Ctrl_Info.Usb_wOffset];
}

3)保证在IN Token到来之前,Report_Buffer中包含有效的数据。

上述过程十分简单,但有时不能保证在IN Token到来之前,Report_Buffer中包含有效的数据,即要发送的数据还没有准备好;这时就希望先设置一个标志,让IN Token返回NAK,让CustomHID_Data_Setup()这个函数返回,待数据准备好之后再继续前述的数据拷贝过程。

这个要求使用STM32的USB开发库也是很容易实现的:

1)在usb_prop.c的函数CustomHID_Data_Setup()中,GET_PROTOCOL之后增加的代码变为这样:

/*** GET_REPORT ***/ 
  else if((Type_Recipient == (CLASS_REQUEST | INTERFACE_RECIPIENT)) 
        && RequestNo == GET_REPORT) 
  { 
    if (数据未准备好) 
      return USB_NOT_READY; 
    CopyRoutine = CustomHID_GetReport; 
  } 
这样,STM32将以NAK回应PC端的IN请求。

2)同样增加一个函数CustomHID_GetReport。

3)在数据准备好之后(注意准备数据的时间不能太长,否则PC端会做超时处理),执行下述操作: 
    pInformation->Ctrl_Info.CopyData = CustomHID_GetReport; 
    pInformation->Ctrl_Info.Usb_wOffset = 0; 
    CustomHID_GetReport(0); 
    pInformation->Ctrl_Info.PacketSize = pProperty->MaxPacketSize; 
    DataStageIn();

STM32 USB HID的GET_REPORT 与 SET_REPORT请求相关推荐

  1. 记录一下 开发STM32 USB HID踩过的坑

    记录一下 开发STM32 USB HID踩过的坑 一.前言 二.代码配置 一.前言 MCU: STM32F103C8T6 CubeMX: STM32CubeMX 5.3.0 二.代码配置 引脚配置 时 ...

  2. STM32 USB HID Mouse And Keyboard (guide)

    There is a post (STM32 And Custom USB HID Device? Yes Please!) that gets a lot of attention, althoug ...

  3. STM32 USB HID IAP升级

    找了网上大量的资料,最后发现这个东西人家还出售源码.又不是什么算法级的东西,实在理解不了. 至于为什么要用HID,不用官方的DFU,因为驱动呀,DFU识别USB的时候还是要装驱动,客户你永远理解不了他 ...

  4. stm32 USB HID+CDC 鼠标键盘串口 组合设备配置解析

    前言 查阅网上的博客与代码,很多都是关于USB的鼠标配置.USB的键盘配置.USB的虚拟串口配置,稍微深入一点的会将鼠标键盘合在一起,但移植起来就会报很多错误,要么是检测不到,要么是警告,这很正常,因 ...

  5. STM32 USB HID设置(STM32CubeMX)

    STM32F070F6P USB HID设置 1.打开STM32CubeMX软件,选择"NEW"新建一个工程 2.选择芯片型号STM32F070F6P 3.在Swap PA9/10 ...

  6. STM32 USB VCOM和HID的区别,配置及Echo功能实现(HAL)

    STM32 USB VCOM和HID的区别,配置及Echo功能实现(HAL ) STM32的USB功能模块可以配置为虚拟串口(VCOM: Visual Port Com)或人机交互设备(HID: Hu ...

  7. STM32 USB设备远程唤醒机制详解

    目录 1.USB Resume信号 2.USB远程唤醒的方式 3.J状态和K状态 4.STM32 USB设备远程唤醒机制详解 5.主机对设备远程唤醒功能状态的获取.清除和设置 1.USB Resume ...

  8. 62 stm32 usb自定义hid复合设备修改实验

    1.引言 最近因为项目需要,我们希望单片机既能有hid键盘功能,又能有hid设备的功能.即单片机的一个usb接口插入电脑后,电脑能识别出键盘设备和hid设备,两者同时存在的. 基于项目只是要求实现功能 ...

  9. STM32 USB复合设备(VCP虚拟串口+HID键盘)详解

    USB复合设备 介绍 USB复合设备与组合设备区别 USB描述符修改 修改CustomHID_Reset 修改CustomHID_Data_Setup 介绍 本次使用的是Keil 5+STM32F10 ...

  10. [转载]基于Stm32,LD3320的非特定语音识别USB HID Keyboar

    基于Stm32,LD3320的非特定语音识别USB HID Keyboard实现 ---用声音跟机器沟通 鉴于手头拥有一块ST官方的stm32f407VG discover板子以及一块ICRoute公 ...

最新文章

  1. c++和c语言中的函数相互调用的问题
  2. SAP ABAP RFC table administration
  3. 2019牛客多校第一场
  4. 前端学习(2135):ES模块化的导出和导入
  5. mysql 慢sql分析_如何分析Mysql慢SQL
  6. Qt 程序获取程序所在路径、用户目录路径、临时文件夹等特殊路径的方法
  7. 【Java线程】深入理解Volatile关键字和使用
  8. 上新了! 热门开源 AutoML 工具 NNI 2.0 来袭!
  9. 【备忘】Windows的命令行下设置网络代理
  10. 文本文档怎么改格式html,设置电脑更改文本文档格式,怎么更改文本文档格式-
  11. go tool vet是你的好朋友
  12. CTex下载地址和方法
  13. 锐捷服务器系统安全,更安全 锐捷网络发布RG-ESS易安全系统
  14. PHP简单的手机验证码验证过程
  15. [*CTF2022]web题目复现及wp
  16. MATLAB数学建模-规划模型总结| MATLAB求解
  17. [历朝通俗演义-蔡东藩-前汉]第012回 戕县令刘邦发迹 杀郡守项梁举兵
  18. 初始化git仓库(已存在项目)
  19. 概率统计Python计算:自定义离散型分布
  20. 六十二、Qt+Sqlserver 操作数类型冲突: varbinary 与 float 不兼容

热门文章

  1. 个人网站添加百度统计
  2. 浙江大学计算机学院的软件工程和软件学院的软件工程哪个好,关于举办计算机技术和软件工程硕士复习班的通知-硕士招生-浙江大学计算机科学与技术学院中文站...
  3. 黑暗城堡(最短路径树)
  4. linux系统硬件检测命令,一种Linux系统硬件检测的测试方法及系统与流程
  5. oliver什么意思java_英语名字“oliver”是什么意思?
  6. threejs炫酷金属样式龙卷风js特效
  7. 很全的zencart 模板修改
  8. 【WPS表格】数据透视表:统计各商品及各分店的销售总额
  9. Ubuntu系统挂载大于2T新硬盘方法
  10. 【092】韦达定理在一元n次方程中的推广