本人是第一次发帖。
目前,上位机给下位机发数据可以接收到,但是stm32下位机往上位机发,就是发不出去。上位机是用Labview做的一个很简单的程序,发给下位机,下位机能够收到,但是收不到stm32下位机往上位机发的数据,我也用Bus Hound也只能看到上位机发的数据,stm32发给上位机的数据收不到。我自己反复的查看了自己的程序,始终找不到问题,请各位高手指点指点,小弟谢了!
const uint8_t CustomHID_ReportDescriptor[CUSTOMHID_SIZ_REPORT_DESC] =
{
//#ifdef 0
0x05, 0x8c, /* USAGE_PAGE (ST Page) */
0x09, 0x01, /* USAGE (Demo Kit) */
0xa1, 0x01, /* COLLECTION (Application) */
/* 6 */
// The Input report
0x09,0x03, // USAGE ID - Vendor defined
0x15,0x00, // LOGICAL_MINIMUM (0)
0x26,0x00, 0xFF, // LOGICAL_MAXIMUM (255)
0x75,0x08, // REPORT_SIZE (8)
0x95,0x40, // REPORT_COUNT (20)
0x81,0x02, // INPUT (Data,Var,Abs)
//19
// The Output report
0x09,0x04, // USAGE ID - Vendor defined
0x15,0x00, // LOGICAL_MINIMUM (0)
0x26,0x00,0xFF, // LOGICAL_MAXIMUM (255)
0x75,0x08, // REPORT_SIZE (8) //每个数据域长度为8bit,即一个字节
0x95,0x40, // REPORT_COUNT (20)//共包含8个数据域,即数据总长度为8字节
0x91,0x02, // OUTPUT (Data,Var,Abs)
//32
0xc0 /* END_COLLECTION */
//#endif
}
void CustomHID_Reset(void)
{
.
.
.
.
/* Initialize Endpoint 1 从机发*/
SetEPType(ENDP1, EP_INTERRUPT);
SetEPRxAddr(ENDP1, ENDP1_RXADDR);
SetEPRxCount(ENDP1, 64);
SetEPRxStatus(ENDP1, EP_RX_VALID);
//SetEPTxStatus(ENDP1, EP_TX_DIS);
/* Initialize Endpoint 2 从机收*/
SetEPType(ENDP2, EP_INTERRUPT);
SetEPTxAddr(ENDP2, ENDP2_TXADDR);
SetEPTxCount(ENDP2, 64);
SetEPTxStatus(ENDP2, EP_TX_DIS);
SetEPTxStatus(ENDP2, EP_TX_NAK);
/* Set this device to response on default address */
SetDeviceAddress(0);
#endif /* STM32F10X_CL */
bDeviceState = ATTACHED;
}
void EP1_OUT_Callback(void)
{ u8 i;
for(i=0;i<64;i++)
{
Receive_Buffer=0; //对Receive_Buffer清零
}
USB_ReceiveFlg = TRUE;
DataLen = GetEPRxCount(ENDP1);
PMAToUserBufferCopy(Receive_Buffer, ENDP1_RXADDR,DataLen); //把缓冲区的数据拷贝到Receive_Buffer
if(USB_ReceiveFlg ==TRUE)
{ MsgCmd=1;
GPIO_SetBits(GPIOF,GPIO_Pin_9); //接收亮灯LED1
delay(50000000);
GPIO_ResetBits(GPIOF,GPIO_Pin_9);
}
else
{MsgCmd=0;
printf("\r\nMsgCmd\r\n");
SetEPRxStatus(ENDP1, EP_RX_VALID);
}
}
void EP2_IN_Callback(void)
{
u32 ii;
printf("\r\n下位机发送完毕,中断进入\r\n");
GPIO_SetBits(GPIOF,GPIO_Pin_8);
delay(5000000);
GPIO_ResetBits(GPIOF,GPIO_Pin_9);
for (ii=0;ii<64;ii++) Transi_Buffer[ii] = 0; //对发送变量清零
}
void GET_CMD(void)
{
u8 i;
for(i=0;i<DataLen;i++)
{
Transi_Buffer=Receive_Buffer;
}
if(MsgCmd==1)
{
USB_SIL_Write(EP2_IN, Transi_Buffer, DataLen);
// UserToPMABufferCopy(Transi_Buffer, GetEPTxAddr(ENDP2), DataLen);
SetEPTxCount(ENDP2, DataLen);
SetEPTxValid(ENDP2);
// UserToPMABufferCopy(Transi_Buffer, ENDP2_TXADDR, DataLen);
// SetEPTxCount(ENDP2,DataLen);
// _SetEPTxStatus(ENDP2, EP_TX_VALID);
MsgCmd=0;
}
|