打印

用STM32做了一个鼠标键盘的复合设备求救

[复制链接]
2950|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yuxueyou|  楼主 | 2013-10-25 14:24 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
单独的鼠标和键盘都正常工作,复合起来按网上的教程描述那里键盘为报告ID1 鼠标为报告ID 2,键盘用端口1
鼠标用端口2  下载程序后在任务管理器那里鼠标和键盘都有 ,可是鼠标和键盘就不是能工作,真是郁闷死了~!~
网上找的资料都是一样~!不知道有做成功的朋友指点下迷津~!谢谢还有单独做键盘或者鼠标的时候在报告描述那里只要加上报告ID(0x85,0x01)程序下载到板子后板子都正常但是键盘和鼠标就不正常工作~!是不是在的值使用一个设备(鼠标,键盘)的时候不需要加报告ID呢

沙发
lzqxs89| | 2013-10-26 10:09 | 只看该作者
都枚举上去了。你可以自己先调试一下,我猜你在枚举之后是没有传送数据了!

使用特权

评论回复
板凳
yuxueyou|  楼主 | 2013-10-29 11:19 | 只看该作者
lzqxs89 发表于 2013-10-26 10:09
都枚举上去了。你可以自己先调试一下,我猜你在枚举之后是没有传送数据了! ...

不太明白~!能多指点下吗

使用特权

评论回复
地板
lzqxs89| | 2013-10-29 13:57 | 只看该作者
yuxueyou 发表于 2013-10-29 11:19
不太明白~!能多指点下吗

枚举知道不?如果不知道,那请你自己先去把这个弄清楚。你这里在计算机上面已经可以看到这两个设备了,说明枚举成功,那意味了USB协议这块基本没问题了。枚举成功后,按照你的descriptor规定的格式给电脑传输数据就行啦!

使用特权

评论回复
5
yuxueyou|  楼主 | 2013-10-31 12:16 | 只看该作者
lzqxs89 发表于 2013-10-29 13:57
枚举知道不?如果不知道,那请你自己先去把这个弄清楚。你这里在计算机上面已经可以看到这两个设备了,说 ...

  //*******************************键盘
    0x05, 0x01, // USAGE_PAGE (Generic Desktop)
    0x09, 0x06, // USAGE (Keyboard)
    0xa1, 0x01, // COLLECTION (Application)
   0x85,0x01,
    0x05, 0x07, //     USAGE_PAGE (Keyboard/Keypad)
    0x19, 0xe0, //     USAGE_MINIMUM (Keyboard LeftControl)
    0x29, 0xe7, //     USAGE_MAXIMUM (Keyboard Right GUI)
    0x15, 0x00, //     LOGICAL_MINIMUM (0)
    0x25, 0x01, //     LOGICAL_MAXIMUM (1)
    0x95, 0x08, //     REPORT_COUNT (8)
    0x75, 0x01, //     REPORT_SIZE (1)
    0x81, 0x02, //     INPUT (Data,Var,Abs)
  //-------------------------输入第一字节
    0x95, 0x01, //     REPORT_COUNT (1)
   0x75,0x08,        //REPORT_SIZE(8)
  0x81,0x03,  //INPUT(CnstVarAbs)
//----------------------------输入第二字节
        0x95,0x06,
        0x75,0x08,
        0x15,0x00,
        0x25,0xff,
        0x05,0x07,
        0x19,0x00,
        0x29,0x65,
        0x81,0x00,
//---------------------------------输入第3到第8字节
        0x95,0x05,
        0x75,0x01,
        0x05,0x08,
        0x19,0x01,
        0x29,0x05,
        0x91,0x02,//OUT PUT
        0x95,0x01,
        0x75,0x03,
        0x91,0x03,//output
        //---------------------------输出第一字节
        0xc0
/************************USB鼠标部分报告描述符**********************/
    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)
   0x95, 0x03, //     REPORT_COUNT (3)
   0x75, 0x01, //     REPORT_SIZE (1)
   0x81, 0x02, //     INPUT (Data,Var,Abs)
   0x95, 0x01, //     REPORT_COUNT (1)
   0x75, 0x05, //     REPORT_SIZE (5)
   0x81, 0x03, //     INPUT (Cnst,Var,Abs)
   0x05, 0x01, //     USAGE_PAGE (Generic Desktop)
   0x09, 0x30, //     USAGE (X)
   0x09, 0x31, //     USAGE (Y)
   0x09, 0x38, //     USAGE (Wheel)
   0x15, 0x81, //     LOGICAL_MINIMUM (-127)
   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
上面是键盘和鼠标的descriptor  下面是给电脑发送键盘的传送数据 但是这样就是不行 鼠标键盘分开就可以
void Joystick_Send(u8 Keys)//键盘发送
{
  u8 Buffer_Scan1[8] =  {0, 0, 0, 0,  0, 0, 0, 0};  
  Buffer_Scan1[3]=Keys;  
  USB_SIL_Write(EP1_IN, Buffer_Scan1, 8);
  SetEPTxValid(ENDP1);
}
/*******************************************************************************/
void Joystick_Send2(u8 buf0,u8 buf1,u8 buf2,u8 buf3) //鼠标发送
{
  u8 Mouse_Buffer[4] = {0, 0, 0, 0};

  Mouse_Buffer[0]=buf0;
  Mouse_Buffer[1]=buf1;
  Mouse_Buffer[2]=buf2;
  Mouse_Buffer[3]=buf3;
  UserToPMABufferCopy(Mouse_Buffer, GetEPTxAddr(ENDP2), 4);
  SetEPTxValid(ENDP2);
}

麻烦你帮我看下 是不是那里搞错了唉~!菜鸟一个



使用特权

评论回复
6
香水城| | 2013-10-31 16:20 | 只看该作者
PC枚举出一个键盘+鼠标的复合设备后,会给不同的interface发传输请求,你的这两个Joystick_Send()和Joystick_Send2()是在哪里被调用的?

我好像有个F103做的键盘+鼠标复合设备的例程,周末有时间给你找找。。。

使用特权

评论回复
7
yuxueyou|  楼主 | 2013-11-15 15:11 | 只看该作者
香水城 发表于 2013-10-31 16:20
PC枚举出一个键盘+鼠标的复合设备后,会给不同的interface发传输请求,你的这两个Joystick_Send()和Joystic ...

好的 谢谢朋友了 最近都不怎么上论坛 如果方便的话麻烦你发一份咯

使用特权

评论回复
8
lh2008xp| | 2014-11-17 17:06 | 只看该作者
香水城 发表于 2013-10-31 16:20
PC枚举出一个键盘+鼠标的复合设备后,会给不同的interface发传输请求,你的这两个Joystick_Send()和Joystic ...

香主,求鼠标键盘F103的例程!谢谢

使用特权

评论回复
9
奔牛滚滚| | 2014-11-17 18:17 | 只看该作者
关注一下,我也要用的

使用特权

评论回复
10
wofei1314| | 2015-7-18 16:28 | 只看该作者
后面就没有消息了,呵呵~

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

20

帖子

1

粉丝