STM32-USB
+ -

USBD_DataOutStage

2026-08-13 本文链接为:http://www.usbzh.com/article/detail-1786.html ,欢迎转载,转载请附上本文链接。

USBD_DataOutStage是各个端点发收到主机发送的数据的回调。

硬件中断
  │
  ▼
USBD_OTG_ISR_Handler()
  │  gintr_status.b.outepintr
  ▼
DCD_HandleOutEP_ISR()
  │  doepint.b.xfercompl → OUT 端点传输完成
  │  USBD_DCD_INT_fops->DataOutStage(pdev, epnum)
  ▼
USBD_DataOutStage(pdev, epnum)             
  │
  ├─ epnum == 0  → 处理 EP0 控制传输
  │
  └─ epnum != 0  → pdev->dev.class_cb->DataOut(pdev, epnum)

代码分析

static uint8_t USBD_DataOutStage(USB_OTG_CORE_HANDLE *pdev , uint8_t epnum)
{
  USB_OTG_EP *ep;
  //端点0
  if(epnum == 0) 
  {
    ep = &pdev->dev.out_ep[0];
    //端点0处于接收主机数据阶段
    if ( pdev->dev.device_state == USB_OTG_EP0_DATA_OUT)
    {
    //如果没有收全,就继续收数据
      if(ep->rem_data_len > ep->maxpacket)
      {
        ep->rem_data_len -=  ep->maxpacket;
        if(pdev->cfg.dma_enable == 1)
        {
          /* in slave mode this, is handled by the RxSTSQLvl ISR */
          ep->xfer_buff += ep->maxpacket; 
        }
        USBD_CtlContinueRx (pdev,ep->xfer_buff,MIN(ep->rem_data_len ,ep->maxpacket));
      }
      else
      {
      //收完了,就发送0长度数据包
        if((pdev->dev.class_cb->EP0_RxReady != NULL)&&(pdev->dev.device_status == USB_OTG_CONFIGURED))
        {
        //很多时候这是NULL
          pdev->dev.class_cb->EP0_RxReady(pdev); 
        }
        //发送0长度数据确认状态包
        USBD_CtlSendStatus(pdev);
      }
    }
  }
  else if((pdev->dev.class_cb->DataOut != NULL)&& (pdev->dev.device_status == USB_OTG_CONFIGURED))
  {
  //非0端点直接调用类驱动对应的回调
    pdev->dev.class_cb->DataOut(pdev, epnum); 
  }  
  return USBD_OK;
}
本文链接为:http://www.usbzh.com/article/detail-1786.html ,欢迎转载,转载请附上本文链接。

HID人机交互QQ群:564808376    UAC音频QQ群:218581009    UVC相机QQ群:331552032    BOT&UASP大容量存储QQ群:258159197    STC-USB单片机QQ群:315457461    USB技术交流QQ群2:580684376    USB技术交流QQ群:952873936     USB技术交流3:1031974172

0 篇笔记 写笔记

关注公众号
  • HID人机交互
  • Linux&USB
  • Linux-USB百科
  • MIDI V1.0
  • TinyUSB
  • UAC音频
  • CDC
  • TYPE-C
  • USB规范
  • USB3测试
  • USB3知识点
  • USB大容量存储
  • USB百科
  • USB周边
  • UVC摄像头
  • Windows系统USB
  • USB资源
  • XHCI 1.2b 规范
  • 音视频博客
  • 取消
    感谢您的支持,我会继续努力的!
    扫码支持
    扫码打赏,你说多少就多少

    打开支付宝扫一扫,即可进行扫码打赏哦

    您的支持,是我们前进的动力!