STM32关于USB控制端点4的问题

本文详细介绍了在USB设备中如何为不同的端点分配地址及缓冲区,并解释了端点描述符表的起始位置及其占用空间,对于理解USB设备内部数据传输流程具有较高的参考价值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


解释如下:
#define BTABLE_ADDRESS      (0x00)  //说明端点描述符表从0x00开始
每个端点描述符会占用4个uint32_t型,即16个字节
如果使用到端点4,需要将
#define ENDP0_RXADDR        (0x18)
#define ENDP0_TXADDR        (0x58)
改为
#define ENDP0_RXADDR        (0x50)  端点0-4  占用16*5=80个字节
#define ENDP0_TXADDR        (0x90)  端点0缓冲区占用字节Device_Property.MaxPacketSize=0x40;

以下端点分配需从 ENDP0_TXADDR + 0x40开始
EP1_RXBUF 等的大小根据需要自行定义,不贴出了。

#define         ENDP1_TXADDR                ((uint16_t)(0xD0))
#define         ENDP1_RXADDR                ((uint16_t)((ENDP1_TXADDR+EP1_TXBUF+1)/2*2)) //按字对齐

#define         ENDP2_TXADDR                ((uint16_t)((ENDP1_RXADDR+EP1_RXBUF+1)/2*2)) 
#define         ENDP2_RXADDR                ((uint16_t)((ENDP2_TXADDR+EP2_TXBUF+1)/2*2))

#define         ENDP3_TXADDR                ((uint16_t)((ENDP2_RXADDR+EP2_RXBUF+1)/2*2))
#define         ENDP3_RXADDR                ((uint16_t)((ENDP3_TXADDR+EP3_TXBUF+1)/2*2))

#define         ENDP4_TXADDR                ((uint16_t)((ENDP3_RXADDR+EP3_RXBUF+1)/2*2)) 
#define         ENDP4_RXADDR                ((uint16_t)((ENDP4_TXADDR+EP4_TXBUF+1)/2*2))



from:http://bbs.ic37.com/bbsview-29849.htm


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值