大家好,最近用STM32英贝特开发板调试USB,例程JoyStickMouse用端点EP1来发送数据(EP1_IN),我想添加一个端点来接收数据,情况如下: 1) 添加EP_OUT端点,用bus hound调试,能正确进行读、写; 2) 添加EP2_OUT端点,则bus hound只能接收数据无法发数据; 3) 如果改为EP1_OUT、EP2_IN,则bus hound只能发数据无法接收数据。 似乎,在中断模式下,只能用EP1进行收发数据,请各位指教! 涉及的相关代码如下: /************************************************************** //描述符修改 **************************************************************/ /************** Descriptor of Joystick Mouse interface ****************/ /* 09 */ 0x09, /*bLength: Interface Descriptor size*/ USB_INTERFACE_DESCRIPTOR_TYPE,/*bDescriptorType: Interface descriptor type*/ 0x00, /*bInterfaceNumber: Number of Interface*/ 0x00, /*bAlternateSetting: Alternate setting*/ 0x02, /*bNumEndpoints: Number of endpoints except EP0*/ 0x00, /*bInterfaceClass: HID*/ 0x00, /*bInterfaceSubClass : 1=BOOT, 0=no boot*/ 0x00, /*nInterfaceProtocol : 0=none, 1=keyboard, 2=mouse*/ 0, /*iInterface: Index of string descriptor*/ /******************** Descriptor of EP1_OUT ********************/ /* 18 */ 0x07, /*bLength: Endpoint Descriptor size*/ USB_ENDPOINT_DESCRIPTOR_TYPE, /*bDescriptorType:*/ 0x01, /*bEndpointAddress: Endpoint Address (OUT)*/ // bit 3...0 : the endpoint number // bit 6...4 : reserved // bit 7 : 0(OUT), 1(IN) 0x03, /*bmAttributes: Interrupt endpoint*/ // bit 1...0 : Transfer type // 00(CONTROL), 01(ISOCHRONOUS), 10(BULK), 11(INTERRUPT) // bit 3...2 : Synchronization type // 00(No Synch), 01(Asynchronous), 10(Adaptive), 11(Synchronous) // bit 5...4 : Endpoint Usage type // 00(data), 01(Feedback), 10(Implicit feedback data endpoint), 11(Reserved) // bit 7...6 : Reserved, must be zero 0x40, /*wMaxPacketSize: 64 Byte max */ 0x00, 0x0a, /*bInterval: Polling Interval (10 ms)*/ /* 25 */ /******************** Descriptor of EP2_IN ********************/ 0x07, /*bLength: Endpoint Descriptor size*/ USB_ENDPOINT_DESCRIPTOR_TYPE, /*bDescriptorType:*/ 0x82, /*bEndpointAddress: Endpoint Address (IN)*/ 0x03, /*bmAttributes: Interrupt endpoint*/ 0x04, /*wMaxPacketSize: 4 Byte max */ 0x00, 0x0a, /*bInterval: Polling Interval (10 ms)*/ /* 32 */ /************************************************************** //复位函数 **************************************************************/ //******************************************************* // TODO: Add your code here! //******************************************************* /* Initialize Endpoint 1 */ // Set the endpoint type SetEPType(ENDP1, EP_INTERRUPT); // Set the endpoint data buffer address SetEPRxAddr(ENDP1, ENDP1_RXADDR); // Set the number of recevie data SetEPRxCount(ENDP1, ENDP1_PACKETSIZE); // Initialize the RX/TX status SetEPRxStatus(ENDP1, EP_RX_VALID); SetEPTxStatus(ENDP1, EP_TX_DIS); /* Initialize Endpoint 2 */ // Set the endpoint type SetEPType(ENDP2, EP_INTERRUPT); // Set the endpoint data buffer address SetEPTxAddr(ENDP2, ENDP2_TXADDR); // Set the number of transmit data SetEPTxCount(ENDP2, 4); // Initialize the RX/TX status SetEPRxStatus(ENDP2, EP_RX_DIS); SetEPTxStatus(ENDP2, EP_TX_NAK); /************************************************************** //正确接收数据回调函数 **************************************************************/ void CTR_OUT1(void) { unsigned char pRev[64]; unsigned short wCount; wCount = GetEPRxCount(ENDP1); //获取收到的长度 PMAToUserBufferCopy(pRev, GetEPRxAddr(ENDP1), wCount); //复制数据 SetEPRxValid(ENDP1); //设置端点有效,以接收下一次数据 } /************************************************************** //发送数据 **************************************************************/ /*copy mouse position info in ENDP1 Tx Packet Memory Area*/ UserToPMABufferCopy(Mouse_Buffer, GetEPTxAddr(ENDP2), 4); /* Set the number of transmit data */ SetEPTxCount(ENDP2, 4); /* enable endpoint for transmission */ SetEPTxValid(ENDP2); /************************************************************** //正确发送数据回调函数 **************************************************************/ void CTR_IN2(void) { SetEPRxStatus(ENDP2, EP_RX_DIS); SetEPTxStatus(ENDP2, EP_TX_NAK); } |
如何用c#使用ST25R3911DISCOComm.dll来读取和写入NDEF区的数据,需要相关例程,感谢各位大佬拯救一下我啊!????
使用STM32G431做HID Keyboard与CDC符合设备,发现根本做不成,可能是ST提供的库的问题
STM32U073的usb问题。
STM32F103标准库配置的虚拟串口,设备描述符请求失败
STM32L4R9最大支持SD卡的容量是?支持SDXC 64G卡吗?
usb虚拟多个串口如何操作?
USBX在F407上创建CDC不能正常使用
stm32F407作为usb device时,PC发数据下去,为什么会收到一样的数据?
USB复合设备MSC+CDC,MSC异常影响CDC收发
STM32F407 作USB host 驱动 声卡 问题