根据香主的贴子用了!在数据未准备好时!
else if((Type_Recipient == (CLASS_REQUEST | INTERFACE_RECIPIENT))
&& RequestNo == GET_REPORT)
{
if (数据未准备好)
return USB_NOT_READY;
CopyRoutine = CustomHID_GetReport;
}
STM32将以NAK回应PC端的IN请求.
请教!
1。PC端收到NAK,应该会不断重试请求数据吧!多久重试一次!
2。STM32如长时间未准备好数据,一直回应NAK,一般拖多久PC会认应超时。
3。香主的:pInformation->Ctrl_Info.CopyData = CustomHID_GetReport;
pInformation->Ctrl_Info.Usb_wOffset = 0;
CustomHID_GetReport(0);
pInformation->Ctrl_Info.PacketSize = pProperty->MaxPacketSize;
DataStageIn();
添加那几行代码,可以在Get Report命令到来时,如果数据未准备好,给你多一些时间准备数据(根据PC端驱动的情况,估计可以有20~100ms的时间),而不必让PC端做超时处理。
实测好象不起什么做用!在几MS或十几ms数据未准备好!PC端就认为超时了!
4。为什么一但GET_REPORT请求超时后,再发SET REPORT请求,STM32也不响应了!也是超时。
stm代码用的是:
“以HID的SET REPORT为例说明如何使用STM32的USB库支持控制端点0”
“如何使用STM32的USB库支持延迟HID的GET_REPORT请求”
这两个**中的代码。
上位机使用:
HidD_SetInputReport发出SET REPORT.
HidD_GetInputReport() 发出GET_REPORT.
流程是:循环-》先HidD_SetInputRepor写 再HidD_GetInputReport()读。一但GET_REPORT超时了!再发的SET REPORT也超时了!好象GET_REPORT超时后,设备就挂了!重新拔插才行。一超时函数就等时5秒。 |