打印

折腾了一个星期的USB键盘都没有成功,请大家给帮帮忙啊

[复制链接]
3005|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yaoohui|  楼主 | 2012-4-15 12:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我从官方的JoyStickMouse例程修改成USB键盘,描述符和报告符都是参考圈圈书上的,可以枚举成功,实验板上的两个LED灯可以跟随键盘的数字键盘灯和大写字母灯同步亮灭,即接收正常。
但是按键发送就出问题了,按键模拟成了上下左右方向键,当按下按键后,光标就开始不停的移动,这时数字键盘灯和大写字母灯也不跟着同步亮灭了,只有按下复位键才能中止发送。


有朋友说发完“键盘按下”的命令后,发“键盘抬起”的命令,我试了这种方法,但是没有效果。


请各位大侠看看程序,是哪里引起的问题


附件中是源代码,用的MDK 4.x,USB库是官方的3.3版本,外设库是3.5版本。其中UsbKeyboardEXTI是键盘中断方式,UsbKeyboardSCAN是键盘扫描方式。

stm32f1_USB.rar

410.52 KB

沙发
yaoohui|  楼主 | 2012-4-16 11:26 | 只看该作者
增加了按键抬起检测,但是状况还是一样的。
int main(void)
{
  __IO uint8_t keyold = 0;
  
  Set_System();
  
  USB_Interrupts_Config();
  
  Set_USBClock();
  
  USB_Init();

  delay_ms(2000);
  keyold = ((GPIO_ReadInputData(GPIOB)>>6) & 0x0F);
  printf("keyold = %x\r\n",keyold);
  
  while (1)
  {
    delay_ms(100);
    if (bDeviceState == CONFIGURED)
    {
      if ((JoyState() != 0) && (PrevXferComplete))
      {
        keyold = ((GPIO_ReadInputData(GPIOB)>>6) & 0x0F);
        UsbDevice_Send(JoyState());
      }
      if (keyold != ((GPIO_ReadInputData(GPIOB)>>6) & 0x0F))
      {
        UsbDevice_Send(0);
      }
    }
  }
}

使用特权

评论回复
板凳
vigia| | 2012-4-16 16:16 | 只看该作者
汗,,我上次写的你有没有看啊

你一定要等到有EP1_IN_CALLBACK中断之后,才能发0呀,不然你数据发不出去的

使用特权

评论回复
地板
vigia| | 2012-4-16 16:19 | 只看该作者
续上,发0之后,要等到再一个EP1_IN_CALLBACK才能发下一组数据

总之没有EP1_IN_CALLBACK就说明你前一组数据还在硬件缓存里,你就不能发下一组数据。

使用特权

评论回复
5
yaoohui|  楼主 | 2012-4-16 23:36 | 只看该作者
本帖最后由 yaoohui 于 2012-4-17 09:40 编辑

研究了一晚上,跟踪了一下代码,发现进入USB中断不对,wIstr = _GetISTR()获取的寄存器为0x0200,这样就进不去CTR_LP()函数,也就无法执行
void EP1_IN_Callback(void)
{
  PrevXferComplete = 1;
}

这样单片机就无法执行下面的程序了

我现在更不知道怎么下手了,请再帮忙看看,谢谢!!!

使用特权

评论回复
6
vigia| | 2012-4-17 12:27 | 只看该作者
你的项目我打不开,暂时看不了,你先看看我曾经发过的一个普及贴
https://bbs.21ic.com/viewthread.p ... %2Bvigia&page=1

看完以后对照下你的代码,看看有没有问题。

使用特权

评论回复
7
yaoohui|  楼主 | 2012-4-25 13:14 | 只看该作者
问题找到了,是SIZ_STRING_SERIAL没有写对。

使用特权

评论回复
8
mage心寒| | 2012-4-25 17:12 | 只看该作者
飘飘然如流风之回血。。一个星期就没了。。

使用特权

评论回复
9
skyfight| | 2012-6-5 18:50 | 只看该作者
我也遇到同样的问题啊,

使用特权

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

本版积分规则

0

主题

12

帖子

0

粉丝