自己参考例程写了一个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...
|