OpenEdv-开源电子网

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

求助基于JoyStickMouse的USB-HID键盘发送速度过慢如何解决

[复制链接]

2

主题

7

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2016-4-1
在线时间
2 小时
发表于 2016-4-1 11:38:03 | 显示全部楼层 |阅读模式
1金钱
最近需要一个USB键盘模块,淘宝找了好久也没找到,于是想到用F103C8T6模拟HID键盘,参照lsj9383前辈的教程成功实现了虚拟键盘的发码,可是两次发送键码要延迟30ms以上才能保证不漏键,这个延迟太大了,想请教下如何才能将提高该例程的发码速率,至少要能达到50HZ,最好能到100HZ。附上已改好的代码

JoyStickMouse.zip

11.38 MB, 下载次数: 1234

最佳答案

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

已解决,参照圈圈前辈的书,将中断查询时间从32ms改为5ms,搞定 USB_ENDPOINT_DESCRIPTOR_TYPE, /*bDescriptorType:*/ 0x01, /*bEndpointAddress: Endpoint Address (OUT)*/ 0x03, /*bmAttributes: Interrupt endpoint*/ 0x08, /*wMaxPacketSize: 8 Byte max */ 0x00, 0x05, //0x20 /*bInterval: Polling Interval (32 ms)(5ms)*/
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2016-4-1
在线时间
2 小时
 楼主| 发表于 2016-4-1 11:38:04 | 显示全部楼层
已解决,参照圈圈前辈的书,将中断查询时间从32ms改为5ms,搞定   
     USB_ENDPOINT_DESCRIPTOR_TYPE, /*bDescriptorType:*/
     0x01,          /*bEndpointAddress: Endpoint Address (OUT)*/
     0x03,          /*bmAttributes: Interrupt endpoint*/
     0x08,          /*wMaxPacketSize: 8 Byte max */
     0x00,
     0x05,     //0x20     /*bInterval: Polling Interval (32 ms)(5ms)*/
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2016-4-1
在线时间
2 小时
 楼主| 发表于 2016-4-1 11:39:46 | 显示全部楼层
其实最理想的状态是能找到一款usb0键盘编码IC,可是找了好久也没找到,只找到了PDIUSBD12,我这儿有块D12还没用过
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2016-4-1
在线时间
2 小时
 楼主| 发表于 2016-4-1 13:09:52 | 显示全部楼层
void Set_USBClock(void)
{
#if defined(STM32L1XX_MD) || defined(STM32L1XX_HD)|| defined(STM32L1XX_MD_PLUS)
  /* Enable USB clock */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_USB, ENABLE);

#else
  /* Select USBCLK source */
  RCC_USBCLKConfig(RCC_USBCLKSource_PLLCLK_1Div5);
  
  /* Enable the USB clock */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_USB, ENABLE);
#endif /* STM32L1XX_XD */

}
上面上传的代码有个地方有错,需将USB_CLOCK()改为上述值,分频DIV1改成1DIV5
回复

使用道具 举报

4

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2016-3-29
在线时间
26 小时
发表于 2016-4-4 14:37:06 | 显示全部楼层
if(Keys&KEY_UP)
  {
   Buffer[i]=0x52; //Keyboard UpArrow
   i++;
  }

#define KEY_SEL    0x01
#define KEY_RIGHT  0x02
#define KEY_LEFT   0x04
#define KEY_DOWN   0x10
#define KEY_UP     0x08
#define KEY_2      0x20
#define KEY_3      0x40

啥意思啊,位与&
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-19 14:34

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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