完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在原有的端点1和端点2基础上增加一个双向端点3.
由于EP3端点缓冲区只有512-32-64*7=32字节大小,所以发送长度不能大于32,否则多余的数据会丢失 1. 修改u***_desc.c 1)将端点数目改为6 /************** Descriptor of Custom HID interface ****************/ /* 09 */ 0x09, /* bLength: Interface Descriptor size */ USB_INTERFACE_DESCRIPTOR_TYPE,/* bDescriptorType: Interface descriptor type */ 0x00, /* bInterfaceNumber: Number of Interface */ 0x00, /* bAlternateSetting: Alternate setting */ 0x06, /* bNumEndpoints */ 0xDC, /* bInterfaceClass: Class code = 0DCH */ 0xA0, /* bInterfaceSubClass : Subclass code = 0A0H */ 0xB0, /* nInterfaceProtocol : Protocol code = 0B0H */ 0, /* iInterface: Index of string descriptor */ 2)增加端点描述符 0x07, /* endpoint descriptor length = 07H */ USB_ENDPOINT_DESCRIPTOR_TYPE, /* endpoint descriptor type = 05H */ 0x83, /* endpoint 2 IN */ 0x02, /* bulk transfer = 02H */ 0x40,0x00, /* endpoint max packet size = 0040H */ 0x0A, /* the value is invalid when bulk transfer */ 0x07, /* endpoint descriptor length = 07H */ USB_ENDPOINT_DESCRIPTOR_TYPE, /* endpoint descriptor type = 05H */ 0x03, /* endpoint 2 OUT */ 0x02, /* bulk transfer = 02H */ 0x40,0x00, /* endpoint max packet size = 0040H */ 0x0A, /* the value is invalid when bulk transfer */ 2. 修改u***_prop.c 1)在void CustomHID_Reset(void)中初始化端点3 /* Initialize Endpoint 3 */ SetEPType(ENDP3, EP_BULK); SetEPRxAddr(ENDP3, ENDP3_RXADDR); SetEPTxAddr(ENDP3, ENDP3_TXADDR); SetEPRxCount(ENDP3, EP_SIZE); SetEPRxStatus(ENDP3, EP_RX_VALID); SetEPTxStatus(ENDP3, EP_TX_NAK); 3. 修改u***_conf.h 1)将端点书改为4 #define EP_NUM (4) 2)修改端点缓冲地址 /* buffer table base address */ #define BTABLE_ADDRESS (0x00) /* EP0 */ /* rx/tx buffer base address */ #define ENDP0_RXADDR (0x20) //4*8=0x20,参照有道笔记“STM32 USB端点修改” #define ENDP0_TXADDR (0x60) /* EP1 */ /* tx buffer base address */ //地址为32位对其,位4的倍数,不能超过 bMaxPacketSize //EP1 #define ENDP1_RXADDR (0xa0) //每个缓冲区大小64 #define ENDP1_TXADDR (0xa0+64) EP2 #define ENDP2_RXADDR (0xa0+64+64) #define ENDP2_TXADDR (0xa0+64+64+64) EP3 #define ENDP3_RXADDR (0xa0+64+64+64+64) #define ENDP3_TXADDR (0xa0+64+64+64+64+64) 3)注释回调函数 //#define EP3_IN_Callback NOP_Process //#define EP3_OUT_Callback NOP_Process 4. 修改u***_endp.c 1)在void EP3_OUT_Callback(void)中实现u***接收数据处理 2)void EP3_IN_Callback(void)可不用实现 5. 修改u***io.c 1)封装上层接收与发送接口 |
|
|
|
只有小组成员才能发言,加入小组>>
3314 浏览 9 评论
2995 浏览 16 评论
3494 浏览 1 评论
9059 浏览 16 评论
4088 浏览 18 评论
1179浏览 3评论
605浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
599浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2335浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1896浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 15:59 , Processed in 1.527449 second(s), Total 78, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号