USB EP2没写对应的接收函数,但为什有能接收到PC发的数据?
请教下大家,用USB调试助手来调试USB所遇到的困惑。问题如下面截图;在程序只找到一个MCU接收PC所发数据的函数(如下)。但这是EP1的,而非EP2的。但在调试时,确发现PC通过EP2下发的数据,mcu却能收得到。(因为在在程序里,是有EP2对PC发送数据的函数的)
void EP1_OUT_Callback(void){ #ifndef STM32F10X_CL PMAToUserBufferCopy(USB_Receive_Buffer, ENDP1_RXADDR, REPORT_COUNT); SetEPRxStatus(ENDP1, EP_RX_VALID); USB_Received_Flag=1; #else // USB_SIL_Read(EP1_OUT,USB_Receive_Buffer); // USB_Received_Flag=1; #endif}
程序是有EP2对PC的发送数据函数。但没找得到EP2接收PC所发数据的函数。uint32_t USB_SendData(uint8_t *data,uint32_t dataNum){ #ifndef STM32F10X_CL //数据通过USB送出去 UserToPMABufferCopy(data, ENDP2_TXADDR, dataNum); SetEPTxCount(ENDP2, REPORT_COUNT); SetEPTxValid(ENDP2); #else USB_SIL_Write(EP2_IN, data, dataNum); #endif return dataNum;}
而且,看程序另一个地方的设置,#defineEP2_OUT_Callback NOP_Process,这个也没加屏蔽,也就是 EP2接收PC所发数据的函数或功能也没使能/* CTR service routines *//* associated to defined endpoints *///#defineEP1_IN_Callback NOP_Process//#defineEP2_IN_Callback NOP_Process#defineEP3_IN_Callback NOP_Process#defineEP4_IN_Callback NOP_Process#defineEP5_IN_Callback NOP_Process#defineEP6_IN_Callback NOP_Process#defineEP7_IN_Callback NOP_Process
//#defineEP1_OUT_Callback NOP_Process#defineEP2_OUT_Callback NOP_Process#defineEP3_OUT_Callback NOP_Process#defineEP4_OUT_Callback NOP_Process#defineEP5_OUT_Callback NOP_Process#defineEP6_OUT_Callback NOP_Process
#defineEP7_OUT_Callback NOP_Process
请高手们分析下,谢谢
MC端点1收到数据,修改标志
读取数据,并发送
通过端点2发送出去
所以你端点2能发出数据。至于端点2能收到数据,不知道你怎么判断的
在EP2的接收缓冲区中打一个数据断点,到了断点的时候看代码,是哪里的代码把数据写入了EP2的接收缓冲,个人观点:lol 斜阳__ 发表于 2019-1-15 13:13
MC端点1收到数据,修改标志
EP2能发送接收到的数据给到PC,这个流程我是请楚的。我就是弄不清,调试助手是通过EP2向MCU来发送数据,而我在例程里根本是没找到EP2的接收函数(EP1的接收函数倒是有的)。这个是买开发板送的例程,不是我自己写的。
而且从下面例程的设定来看,EP2的接收(这里的接收是指接收PC发的数据)压根就没打开,红体字所示。难道说,调试助手上PC通过EP2向MCU来发送数据,MCU其实是通过EP1来接收的吗?
/* EP1*/
/* tx buffer base address */
//地址为32位对其,位4的倍数,不能超过 bMaxPacketSize
#define ENDP1_RXADDR (0x98)
#define ENDP1_TXADDR (0xD8)
//EP2
//#define ENDP2_RXADDR (0x118)
#define ENDP2_TXADDR (0x118)
/* CTR service routines */
/* associated to defined endpoints */
//#defineEP1_IN_Callback NOP_Process
//#defineEP2_IN_Callback NOP_Process
#defineEP3_IN_Callback NOP_Process
#defineEP4_IN_Callback NOP_Process
#defineEP5_IN_Callback NOP_Process
#defineEP6_IN_Callback NOP_Process
#defineEP7_IN_Callback NOP_Process
//#defineEP1_OUT_Callback NOP_Process
#defineEP2_OUT_Callback NOP_Process
#defineEP3_OUT_Callback NOP_Process
#defineEP4_OUT_Callback NOP_Process
#defineEP5_OUT_Callback NOP_Process
#defineEP6_OUT_Callback NOP_Process
#defineEP7_OUT_Callback NOP_Process
应该是buf被写入了,不是收到的数据吧? Kevin201707 发表于 2019-1-16 10:10
应该是buf被写入了,不是收到的数据吧?
在程序里,你找得到BUF被写入的内容吗?我每次连上USB,调试助手上,EP2接收区的数据是和发送区一致的,不过,若此后再改变发送区的数据,EP2接收区的数据就还是原来的,不会跟着发送区的数据而变化 EP1怎么不能发送数据 只要描述符里有EP2out端点,上位机软件就能发送数据出去,至于MCU接受,可以看接收中断是如何执行的。 这是上位机问题,包括我自己写的HID 上位机也有这问题,都是直接调用调底的write,read 所以,,,
页:
[1]