OpenEdv-开源电子网

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

STM32 USB 枚举成鼠标的一个问题??

[复制链接]

2

主题

4

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2012-10-20
在线时间
1 小时
发表于 2013-11-2 17:23:19 | 显示全部楼层 |阅读模式

自己参考例程写了一个USB程序以熟悉其过程,正确获取了报告描述符后,主机识别了设备,但是当我向主机报告鼠标位置时,USB就复位了,不知什么情况??请各位指点一下!!

主函数 main 里的循环:
while(1){
  if(ReadKey()==KEY0){
   
   if(usbDevInfo.bState==STATE_CONFIGURED){
    MouseSend(0,-1,0,0);
    Delay_ms(100);
   }
  }
  if(ReadKey()==KEY1){
   
   if(usbDevInfo.bState==STATE_CONFIGURED){
    MouseSend(0,1,0,0);
    Delay_ms(100);
   }
  }
  LED_Off(LED0);
 }
下面是枚举时的信息:
// 0  表示进入 USB 中断
     1 为 RESET
     4 为 WKUP
     5 为 SUSP
     6 为 SOF
     7 为 ESOF
04 USB_Resume...
01 USB_Reset...
   USB->EPR[0]=0x3210
   USB->EPR[1]=0x621
7 05 USB_Suspend...
04 USB_Resume...
7 01 USB_Reset...
   USB->EPR[0]=0x3210
   USB->EPR[1]=0x621
06 USB SetupTransfer...
  DataOut: 0x680, 0x100, 0x0, 0x40,
  STD Request : GetDescriptors Type=1 Index=0 ...
    _GetDeviceDesc ...
  DataIn: 0x112, 0x200, 0x0, 0x4000,
06 InTransfer ...
06 OUT_Transfer...
      USB->EPR[0]=0x0
01 USB_Reset...
   USB->EPR[0]=0x3210
   USB->EPR[1]=0x621
6 06 USB SetupTransfer...
  DataOut: 0x500, 0x4, 0x0, 0x0,
  STD Request : SetAddress ...
06 InTransfer ...
06 USB SetupTransfer...
  DataOut: 0x680, 0x100, 0x0, 0x12,
  STD Request : GetDescriptors Type=1 Index=0 ...
    _GetDeviceDesc ...
  DataIn: 0x112, 0x200, 0x0, 0x4000, 0x483, 0x5710, 0x200, 0x201, 0x103,
06 InTransfer ...
06 OUT_Transfer...
      USB->EPR[0]=0x1210
06 USB SetupTransfer...
  DataOut: 0x680, 0x200, 0x0, 0x9,
  STD Request : GetDescriptors Type=2 Index=0 ...
    _GetConfigDesc ...
  DataIn: 0x209, 0x22, 0x101, 0xe000, 0x932,
06 InTransfer ...
06 OUT_Transfer...
      USB->EPR[0]=0x1210
06 USB SetupTransfer...
  DataOut: 0x680, 0x300, 0x0, 0xff,
  STD Request : GetDescriptors Type=3 Index=0 ...
    _GetStringDesc index=0 ...
  DataIn: 0x304, 0x409,
06 InTransfer ...
06 OUT_Transfer...
      USB->EPR[0]=0x1210
06 USB SetupTransfer...
  DataOut: 0x680, 0x303, 0x409, 0xff,
  STD Request : GetDescriptors Type=3 Index=3 ...
    _GetStringDesc index=3 ...
  DataIn: 0x310, 0x53, 0x54, 0x4d, 0x33, 0x32, 0x31, 0x30,
06 InTransfer ...
06 OUT_Transfer...
      USB->EPR[0]=0x1210
06 USB SetupTransfer...
  DataOut: 0x680, 0x200, 0x0, 0xff,
  STD Request : GetDescriptors Type=2 Index=0 ...
    _GetConfigDescSet ...
  DataIn: 0x209, 0x22, 0x101, 0xe000, 0x932, 0x4, 0x100, 0x103, 0x2, 0x2109, 0x100, 0x100, 0x3222, 0x700, 0x8105, 0x403, 0x100,
06 InTransfer ...
06 OUT_Transfer...
      USB->EPR[0]=0x1210
06 USB SetupTransfer...
  DataOut: 0x680, 0x600, 0x0, 0xa,
  STD Request : GetDescriptors Type=6 Index=0 ...
06 USB SetupTransfer...
  DataOut: 0x680, 0x300, 0x0, 0xff,
  STD Request : GetDescriptors Type=3 Index=0 ...
    _GetStringDesc index=0 ...
  DataIn: 0x304, 0x409,
06 InTransfer ...
06 OUT_Transfer...
      USB->EPR[0]=0x1210
06 USB SetupTransfer...
  DataOut: 0x680, 0x302, 0x409, 0xff,
  STD Request : GetDescriptors Type=3 Index=2 ...
    _GetStringDesc index=2 ...
  DataIn: 0x322, 0x41, 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x45, 0x4b, 0x20, 0x89e6, 0x63a7, 0x55, 0x53, 0x42, 0x9f20, 0x6807,
06 InTransfer ...
06 OUT_Transfer...
      USB->EPR[0]=0x1210
06 USB SetupTransfer...
  DataOut: 0x680, 0x300, 0x0, 0xff,
  STD Request : GetDescriptors Type=3 Index=0 ...
    _GetStringDesc index=0 ...
  DataIn: 0x304, 0x409,
06 InTransfer ...
06 OUT_Transfer...
      USB->EPR[0]=0x1210
06 USB SetupTransfer...
  DataOut: 0x680, 0x302, 0x409, 0xff,
  STD Request : GetDescriptors Type=3 Index=2 ...
    _GetStringDesc index=2 ...
  DataIn: 0x322, 0x41, 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x45, 0x4b, 0x20, 0x89e6, 0x63a7, 0x55, 0x53, 0x42, 0x9f20, 0x6807,
06 InTransfer ...
06 OUT_Transfer...
      USB->EPR[0]=0x1210
06 USB SetupTransfer...
  DataOut: 0x680, 0x100, 0x0, 0x12,
  STD Request : GetDescriptors Type=1 Index=0 ...
    _GetDeviceDesc ...
  DataIn: 0x112, 0x200, 0x0, 0x4000, 0x483, 0x5710, 0x200, 0x201, 0x103,
06 InTransfer ...
06 OUT_Transfer...
      USB->EPR[0]=0x1210
06 USB SetupTransfer...
  DataOut: 0x680, 0x200, 0x0, 0x9,
  STD Request : GetDescriptors Type=2 Index=0 ...
    _GetConfigDesc ...
  DataIn: 0x209, 0x22, 0x101, 0xe000, 0x932,
06 InTransfer ...
06 OUT_Transfer...
      USB->EPR[0]=0x1210
06 USB SetupTransfer...
  DataOut: 0x680, 0x200, 0x0, 0x22,
  STD Request : GetDescriptors Type=2 Index=0 ...
    _GetConfigDescSet ...
  DataIn: 0x209, 0x22, 0x101, 0xe000, 0x932, 0x4, 0x100, 0x103, 0x2, 0x2109, 0x100, 0x100, 0x3222, 0x700, 0x8105, 0x403, 0x100,
06 InTransfer ...
06 OUT_Transfer...
      USB->EPR[0]=0x1210
06 USB SetupTransfer...
  DataOut: 0x900, 0x1, 0x0, 0x0,
  STD Request : SetConfig ...
06 InTransfer ...
06 USB SetupTransfer...
  DataOut: 0xa21, 0x0, 0x0, 0x0,
  HID Request : SetIdle ...
06 InTransfer ...
06 USB SetupTransfer...
  DataOut: 0x681, 0x2200, 0x0, 0x72,
  STD Request : GetDescriptors Type=34 Index=0 ...
    _GetReportDesc ...
  DataIn: 0x105, 0x209, 0x1a1, 0x109, 0xa1, 0x905, 0x119, 0x329, 0x15, 0x125, 0x395, 0x175, 0x281, 0x195, 0x575, 0x381, 0x105, 0x3009, 0x3109, 0x8115, 0x7f25, 0x875, 0x295, 0x681, 0xc0c0,
06 InTransfer ...
06 OUT_Transfer...
      USB->EPR[0]=0x1210                //枚举完成,主机识别了设备,串口不再输出信息!!
//开发板提供的例程《 ALIENTEK MINISTM32 实验26 触控USB鼠标》在这之后还会不断的输出 06 ,表示一直再进 SOF 中断!!为什么会一直进SOF中断,不明白??
2013.11.4 -- 这个问题已知道:是因为我没开 SOF 中断的原因 !!!











此时按下 KEY0 串口输出:

  DataIn: 0xff00, 0x0,
03 USB_ERR ...                                  //USB 进入错误中断
6  USB->EPR[1]=0x631
   USB->EPR[0]=0x1210
01 USB_Reset...                                 //USB 复位了,而没有进入传输完成中断CTR (进中断会有信息输出的!!)???
   USB->EPR[0]=0x3210
   USB->EPR[1]=0x621
3 6 06 USB SetupTransfer...
  DataOut: 0x680, 0x100, 0x0, 0x40,
  STD Request : GetDescriptors Type=1 Index=0 ...
    _GetDeviceDesc ...
  DataIn: 0x112, 0x200, 0x0, 0x4000,
06 InTransfer ...
06 OUT_Transfer...

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

38

主题

2061

帖子

6

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3273
金钱
3273
注册时间
2012-1-16
在线时间
37 小时
发表于 2013-11-2 18:43:07 | 显示全部楼层
回复 支持 反对

使用道具 举报

2

主题

4

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2012-10-20
在线时间
1 小时
 楼主| 发表于 2013-11-4 16:56:36 | 显示全部楼层

问题解决了!!
是我的报告描述符有问题,我是用 HID Descriptor Tool 直接生成的描述符,它默认是发3字节数据(没有滚轮),而我却发了4字节的数!
致使主机 Abort,主机没有应答,USB模块发生错误中断进而复位!!

回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-10 03:11

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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