完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
|
我现在想实现STM32 USB的双缓冲批量传输,枚举成功的,之前用端口2能正常实现单缓冲的收发数据,但是用端点2实现单方向的接收数据功能,却怎么也不能接收数据!
初始化代码 *USB_EP2R=(((*USB_EP2R)&EPREG_MASK)&(~EP_EA))|EP_ADDR_2;//端点2 U***SetEPNewType(USB_EP2R,EP_BULK); U***SetEP_Kind(USB_EP2R); //批量双缓冲 U***SetEPTxBufferTableAddr(EP2,EP2TxBufferTableAddr); //这个是当接收缓冲区0 U***SetEPRxBufferTableAddr(EP2,EP2RxBufferTableAddr); //这个是当接收缓冲区1 //U***SetEPRxCount(EP2,16); _SetEPDblBuffCount(EP2,16); //设置接收0和1 数据长度 都是16 U***SetEPDTOG_TX(USB_EP2R,EP_DTOG_TX_CLR); U***SetEPDTOG_RX(USB_EP2R,EP_DTOG_RX_CLR); U***SetEPDTOG_TX(USB_EP2R,EP_DTOG_TX_SET); U***SetEPTxStatus(USB_EP2R,EP_TX_DIS); U***SetEPRxStatus(USB_EP2R,EP_RX_VALID); 这样配置好,USB模块接收不了数据,高级USB中断进不去也,哪位大神帮忙下,万分感激。。。 说明下 _SetEPDblBuffCount(EP2,16);这个宏函数是从u***_reg.h文件里面拿过来直接用的 实现代码如下: #define _BlocksOf32(dwReg,wCount,wNBlocks) { wNBlocks = wCount >> 5; if((wCount & 0x1f) == 0) wNBlocks--; *pdwReg = (u32)((wNBlocks << 10) | 0x8000); }/* _BlocksOf32 */ #define _BlocksOf2(dwReg,wCount,wNBlocks) { wNBlocks = wCount >> 1; if((wCount & 0x1) != 0) wNBlocks++; *pdwReg = (u32)(wNBlocks << 10); }/* _BlocksOf2 */ #define _pEPTxCount(bEpNum) ((u32 *)(((*BTABLE) +bEpNum*8+2)*2 + PMAAddr)) #define _pEPRxCount(bEpNum) ((u32 *)(((*BTABLE) +bEpNum*8+6)*2 + PMAAddr)) //---// #define _SetEPCountRxReg(dwReg,wCount) { u16 wNBlocks; if(wCount > 62){_BlocksOf32(dwReg,wCount,wNBlocks);} else {_BlocksOf2(dwReg,wCount,wNBlocks);} }/* _SetEPCountRxReg */ #define _SetEPRxDblBuf0Count(bEpNum,wCount) { u32 *pdwReg = _pEPTxCount(bEpNum); _SetEPCountRxReg(pdwReg, wCount); } //---// #define _SetEPCountRxReg(dwReg,wCount) { u16 wNBlocks; if(wCount > 62){_BlocksOf32(dwReg,wCount,wNBlocks);} else {_BlocksOf2(dwReg,wCount,wNBlocks);} }/* _SetEPCountRxReg */ #define _SetEPRxCount(bEpNum,wCount) { u32 *pdwReg = _pEPRxCount(bEpNum); _SetEPCountRxReg(pdwReg, wCount); } //------// #define _SetEPDblBuf0Count(bEpNum, wCount) { {_SetEPRxDblBuf0Count(bEpNum,wCount);} } #define _SetEPDblBuf1Count(bEpNum, wCount) { {_SetEPRxCount(bEpNum,wCount);} } #define _SetEPDblBuffCount(bEpNum, wCount) { _SetEPDblBuf0Count(bEpNum, wCount); _SetEPDblBuf1Count(bEpNum, wCount); } |
|
相关推荐
3个回答
|
|
|
都没人回答的,算了...已解决,上面的配置对的,是其他问题。。
|
|
|
|
|
|
楼主的源码可以上传一份参考一下吗
|
|
|
|
|
|
值得借鉴
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1445 浏览 1 评论
1115 浏览 0 评论
976 浏览 0 评论
STM32F405驱动DS1302时钟模块,输出时间错乱该怎么排查?
5355 浏览 2 评论
stm32f405rgt6驱动DS1302ZN出现时间错乱问题
4148 浏览 1 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-14 10:14 , Processed in 0.681795 second(s), Total 76, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1424