初级会员

- 积分
- 160
- 金钱
- 160
- 注册时间
- 2019-5-20
- 在线时间
- 50 小时
|
1金钱
参考了原子哥的程序,也参考了网上其他例程,目前是可以通过hid收发数据,但是有点奇怪,主要是用busbound监控时发现如下:发送和接收都出现两次,而且第二次出现的会多一个字节00.
看图片感觉是,带小数点是代表从端口1和从端口2跑去的数据,
然而用另一个软件看的结果是这样的,另一个软件就是用来测试数据收发,截图如下,按照程序的设计应该是端口2发,端口1收
程序部分定义如下:
/* EP0 转接收发*/
#define ENDP0_RXADDR (0x40) //(0x18)
#define ENDP0_TXADDR (0x80) //(0x58)
/* EP1 只负责收*/
/* tx buffer base address 各端点地址间隔必须为64即16进制的40 0x100 对应 0x140*/
#define ENDP1_RXADDR (0x100)
/* EP2 新增ep2只负责发*/
#define ENDP2_TXADDR (0x140)
void EP1_OUT_Callback(void)
{
u32 i;
USB_ReceiveFlg = TRUE; //正确接收标志位
RX_DataLen = GetEPRxCount(ENDP1); //获取接到数据的长度
PMAToUserBufferCopy(Receive_Buffer, ENDP1_RXADDR,RX_DataLen); //把缓冲区的数据拷贝到Receive_Buffer
SetEPRxValid(ENDP1);//设置端点的接收状态为有效,因为端点接收到数据后会端点状态自动设置成停止状态
if(Receive_Buffer[0]==0xFA && Receive_Buffer[1]==0xAF && Receive_Buffer[3]==0x01 && Receive_Buffer[9]==0xED)
{
while(GetEPTxStatus(ENDP2) == EP_TX_VALID); //等待硬件置位端点为EP_TX_NAK(这一条语句很重要)=
for(i=0;i<64;i++)
{
UserToPMABufferCopy(Transi_Buffer, ENDP2_TXADDR, 64); //拷贝发送缓冲区64字节数据到PMA中
SetEPTxCount(ENDP2, 64);//从端点2发送64字节数据
SetEPTxValid(ENDP2);//使能端点2的发送状态
}
}
请问为何会出现这样的问题,搞不懂程序哪里出的问题,谢谢各位指教。
|
|