完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
stm32 USB增加端点总结(端点用法)
在原有的端点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)封装上层接收与发送接口 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
2002 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1782 浏览 1 评论
1248 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
825 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1807 浏览 2 评论
2032浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
947浏览 4评论
stm32f4下spi+dma读取数据不对是什么原因导致的?
340浏览 3评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
685浏览 3评论
668浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-3-7 16:09 , Processed in 0.779086 second(s), Total 44, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191