打印
[STM32F4]

Cube库中的USB回调函数问题

[复制链接]
2510|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xqyang2008|  楼主 | 2015-11-16 10:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教一下在Cube库的USB库中,对于批量输出传输,dataout回调函数到底发生在批量传输的哪一个阶段?可否通过dataout回调函数设置该批量传输的握手状态为NAK或ACK?
沙发
xqyang2008|  楼主 | 2015-11-16 10:59 | 只看该作者
没人回复呀,自己顶一下。仔细研究了一下库函数中关于HAL_PCD_DataOutStageCallback()函数的调用位置,应该是在USB_OTG_DOEPINT_XFRC中断之后才调用的,也就是说调用的时候批量传输已经完成,貌似没有办法在dataout回调函数中对该次批量传输设置NAK握手。不知道以上分析是否正确,请高手赐教。

使用特权

评论回复
板凳
香水城| | 2015-12-7 14:59 | 只看该作者
关于OTG IP的Cube库函数中,一次OUT传输的流程是这样的:

首先设备端点要准备好接收,即调用USBD_LL_PrepareReceive(USBD_HandleTypeDef *pdev, uint8_t  ep_addr,   uint8_t  *pbuf,  uint16_t  size)。这个操作把端点使能接收;

然后当主机的OUT令牌和相应数据下来之后,会被OTG IP的硬件收发引擎收到所有端点共享的RXFIFO里;触发第一个中断

#1中断: USB_OTG_GINTSTS_RXFLVL
在这里,ISR读取接收fifo中的数据到用户为该端点在应用层分配的接收数组中

紧接着,第二个中断到来:

#2中断:USB_OTG_GINTSTS_OEPINT --> USB_OTG_DOEPINT_XFRC,表示此次OUT transfer结束。在这里Cube library提供给用户回调函数接口HAL_PCD_DataOutStageCallback(hpcd, epnum);用户在这里做他想做的任何和应用程序相关的事情。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

5

帖子

0

粉丝