OpenEdv-开源电子网

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

急!关于STM32F4 USB原子例程的问题!

[复制链接]

19

主题

82

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
466
金钱
466
注册时间
2018-6-8
在线时间
114 小时
发表于 2017-2-7 22:10:24 | 显示全部楼层 |阅读模式
5金钱
最近开始做STM32F4与扫码枪之间的通讯,通过USB由板子接收并在屏幕上显示,看了看别的帖子有说可以直接用鼠标键盘例程修改成键盘模式实现,求问怎么修改成键盘模式,新手看了好几天程序和资料都没有头绪

最佳答案

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

将报告描述符改为键盘的就行了撒 给你参考一个我做的鼠标加键盘的报告描述符: [mw_shl_code=c,true]const uint8_t CustomHID_ReportDescriptor[CUSTOMHID_SIZ_REPORT_DESC] = { 0x05, 0x01, // USAGE_PAGE (Generic Desktop) 0x09, 0x06, // USAGE (Keyboard) 0xa1, 0x01, // COLLECTION (Application) 0x85, 0x01, // REPORT_ID (1) ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

277

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1522
金钱
1522
注册时间
2014-5-16
在线时间
217 小时
发表于 2017-2-7 22:10:25 | 显示全部楼层
将报告描述符改为键盘的就行了撒
给你参考一个我做的鼠标加键盘的报告描述符:
[mw_shl_code=c,true]const uint8_t CustomHID_ReportDescriptor[CUSTOMHID_SIZ_REPORT_DESC] =
{
        0x05, 0x01,                    // USAGE_PAGE (Generic Desktop)
        0x09, 0x06,                    // USAGE (Keyboard)
        0xa1, 0x01,                    // COLLECTION (Application)
        0x85, 0x01,                    //   REPORT_ID (1)
        0x05, 0x07,                    //   USAGE_PAGE (Keyboard)
        0x19, 0xe0,                    //   USAGE_MINIMUM (Keyboard LeftControl)
        0x29, 0xe7,                    //   USAGE_MAXIMUM (Keyboard Right GUI)
        0x15, 0x00,                    //   LOGICAL_MINIMUM (0)
        0x25, 0x01,                    //   LOGICAL_MAXIMUM (1)
        0x75, 0x01,                    //   REPORT_SIZE (1)
        0x95, 0x08,                    //   REPORT_COUNT (8)
        0x81, 0x02,                    //   INPUT (Data,Var,Abs)
        0x95, 0x01,                    //   REPORT_COUNT (1)
        0x75, 0x08,                    //   REPORT_SIZE (8)
        0x81, 0x03,                    //   INPUT (Cnst,Var,Abs)
        0x95, 0x05,                    //   REPORT_COUNT (5)
        0x75, 0x01,                    //   REPORT_SIZE (1)
        0x05, 0x08,                    //   USAGE_PAGE (LEDs)
        0x19, 0x01,                    //   USAGE_MINIMUM (Num Lock)
        0x29, 0x05,                    //   USAGE_MAXIMUM (Kana)
        0x91, 0x02,                    //   OUTPUT (Data,Var,Abs)
        0x95, 0x01,                    //   REPORT_COUNT (1)
        0x75, 0x03,                    //   REPORT_SIZE (3)
        0x91, 0x03,                    //   OUTPUT (Cnst,Var,Abs)
        0x95, 0x06,                    //   REPORT_COUNT (6)
        0x75, 0x08,                    //   REPORT_SIZE (8)
        0x15, 0x00,                    //   LOGICAL_MINIMUM (0)
        0x25, 0x65,                    //   LOGICAL_MAXIMUM (101)
        0x05, 0x07,                    //   USAGE_PAGE (Keyboard)
        0x19, 0x00,                    //   USAGE_MINIMUM (Reserved (no event indicated))
        0x29, 0x65,                    //   USAGE_MAXIMUM (Keyboard Application)
        0x81, 0x00,                    //   INPUT (Data,Ary,Abs)
        0xc0,                          // END_COLLECTION


        0x05, 0x01,                    // USAGE_PAGE (Generic Desktop)
        0x09, 0x02,                    // USAGE (Mouse)
        0xa1, 0x01,                    // COLLECTION (Application)
        0x85, 0x02,                    //   REPORT_ID (2)
        0x09, 0x01,                    //   USAGE (Pointer)
        0xa1, 0x00,                    //   COLLECTION (Physical)
        0x05, 0x09,                    //     USAGE_PAGE (Button)
        0x19, 0x01,                    //     USAGE_MINIMUM (Button 1)
        0x29, 0x03,                    //     USAGE_MAXIMUM (Button 3)
        0x15, 0x00,                    //     LOGICAL_MINIMUM (0)
        0x25, 0x01,                    //     LOGICAL_MAXIMUM (1)
        0x75, 0x01,                    //     REPORT_SIZE (1)
        0x95, 0x03,                    //     REPORT_COUNT (3)
        0x81, 0x02,                    //     INPUT (Data,Var,Abs)
        0x75, 0x05,                    //     REPORT_SIZE (5)
        0x95, 0x01,                    //     REPORT_COUNT (1)
        0x81, 0x03,                    //     INPUT (Cnst,Var,Abs)
        0x05, 0x01,                    //     USAGE_PAGE (Generic Desktop)
        0x09, 0x30,                    //     USAGE (X)
        0x09, 0x31,                    //     USAGE (Y)
        0x15, 0x81,                    //     LOGICAL_MINIMUM (-127)
    0x09, 0x38,                    //     USAGE (Wheel)
        0x25, 0x7f,                    //     LOGICAL_MAXIMUM (127)
        0x75, 0x08,                    //     REPORT_SIZE (8)
        0x95, 0x03,                    //     REPORT_COUNT (3)
        0x81, 0x06,                    //     INPUT (Data,Var,Rel)
        0xc0,                          //     END_COLLECTION
        0xc0,                           // END_COLLECTION

    0x05, 0x0c,                     // USAGE_PAGE (Consumer Page)
    0x09, 0x01,                     // USAGE (Consumer Control)
    0xa1, 0x01,                     // COLLECTION (Application)
    0x85, 0x03,                     //   REPORT_ID (3)
    0x09, 0xe2,                     //   USAGE (Mute)
    0x09, 0xea,                     //   USAGE (Volume Decrement)
    0x09, 0xe9,                     //   USAGE (Volume Increment)
    0x09, 0xcd,                     //   USAGE (Play/Pause)
    0x0a, 0x92, 0x01,               //   USAGE (AL Calculator(0x192))
    0x0a, 0x83, 0x01,               //   USAGE (Windows Media Player(0x183))
    0x0a, 0x23, 0x02,               //   USAGE (AC Home(0x0223))
    0x15, 0x00,                     //   LOGICAL_MINIMUM (0)
    0x25, 0x01,                     //   LOGICAL_MAXIMUM (1)
    0x95, 0x07,                     //   REPORT_COUNT (7)
    0x75, 0x01,                     //   REPORT_SIZE (1)
    0x81, 0x02,                     //   INPUT (Data,Var,Abs)
    0x75, 0x01,                     //   REPORT_SIZE (1)
    0x95, 0x01,                     //   REPORT_COUNT (1)
    0x81, 0x03,                     //   INPUT (Cnst,Var,Abs)
    0xc0                            // END_COLLECTION

};
[/mw_shl_code]
此报告描述符的格式为:
键盘报告9字节,第1字节为ID,第2字节为控制键,第4~9字节为键值.
例:
  按CTRL+A,报告格式为 01 01 00 04 00 00 00 00 00
  按下数字1,2,3,报告为  01 00 00 1E 1F 20 00 00 00
鼠标报告5字节,第1字节为ID,第2字节为鼠标键,第3,4,5字节分别为X,Y和滚轮.
例:
  鼠标X方向移动8,Y方向移动10的报告为 02 00 08 0A 00
  鼠标左键按下的报告为 02 01 00 00 00
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-2-12 19:06:01 | 显示全部楼层
帮顶
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-12 12:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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