1
完善资料让更多小伙伴认识你,还能领取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个回答
|
|
都没人回答的,算了...已解决,上面的配置对的,是其他问题。。
|
|
|
|
楼主的源码可以上传一份参考一下吗
|
|
|
|
值得借鉴
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
2105 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1941 浏览 3 评论
4537 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
2084 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
2599 浏览 1 评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 05:59 , Processed in 0.448551 second(s), Total 42, Slave 36 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号