大家好,最近用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); } |
请问一下,我的nucleo板子连接usb线,找不到target,一直无法下载程序怎么回事呢?
请问一下,stm32WB有可以驱动声卡的驱动程序吗(声卡是PCM2704)?
STM32F407 USB怎么测试接口的极限速度
求技术解答,STM32H723的USB模拟U盘应用过程遇到了问题。
我的电脑识别不到STM32的ST-LINK驱动(特指针对芯片stm32wle5ccu6)
请问各位大佬,STM32F4怎么利用Typec口OTG,硬件电路怎么实现
stm32 usb复合设备支持键盘鼠标和hid串口通信可以实现吗
stm32f407 开启两路(FS和HS) Custom HID,与上位机通信偶尔中断
stm32f746g-disco开发板的串口通讯连接方式
STM32F746g-disco开发板串口配置串口助手无法接收到数据