本帖最后由 jinguoju 于 2012-4-23 11:49 编辑
圈圈大哥,你好。买了你的书,仔细研究了一遍终于对USB入门了,在此表示非常感谢!!
我在使用STM32做自己的自定义设备时,可以枚举到自己的设备,在使用端点1(中断传输)或者端点2(块传输)进行通信时多不能成功,还请圈圈给指点指点。
下面是问题的具体描述:
1.上位机应用程序:使用的是您提供的自定义设备测试应用程序(MyUsbDeviceTestApp),我修改了Class Guid和接口类GUID 以适合自己的设备;
2.驱动程序:按照《圈圈教你玩USB》第九章做的,基本上没做其他修改,看上去没有什么问题;
3.下位机程序:按照ST提供的固件3.1版本中的Common_HID进行的修改。
下面是下位机复位时端点2的定义:
SetEPType(ENDP2, EP_BULK);
SetEPTxStatus(ENDP2, EP_TX_STALL);
SetEPRxAddr(ENDP2, ENDP2_RXADDR);
SetEPTxAddr(ENDP2, ENDP2_TXADDR);
SetEPRxCount(ENDP2, 8);
SetEPTxCount(ENDP2, 8);
SetEPRxValid(ENDP2);
下面是下位机上端点2的处理函数:
void EP2_OUT_Callback(void)
{
count_out = GetEPRxCount(ENDP2);
PMAToUserBufferCopy(buffer_out, ENDP2_RXADDR, count_out);
SetEPRxStatus(ENDP2, EP_RX_VALID);
}
在应用程序的消息窗口是这么提示的:
设备已连接 (22:32:43)
开始查找设备 (22:32:45)
设备已经找到 (22:32:45)
打开设备成功 (22:32:45)
端点2发送数据8字节 (22:32:47)
01 02 03 04 05 06 07 08
端点2发送失败,错误代码:31 (22:32:47)
今天我用USBlyzer获取了下面的信息:
|