中易网

求教STM32F105关闭串口后程序死循环在usb中断原因

答案:1  悬赏:50  
解决时间 2021-01-13 07:49
  • 提问者网友:椧運幽默
  • 2021-01-13 04:37
求教STM32F105关闭串口后程序死循环在usb中断原因
最佳答案
  • 二级知识专家网友:蓝房子
  • 2021-01-13 05:46
uint32_t USBD_OTG_ISR_Handler (USB_OTG_CORE_HANDLE *pdev)
{
USB_OTG_GINTSTS_TypeDefgintr_status;
uint32_t retval = 0;

if (USB_OTG_IsDeviceMode(pdev))
{
gintr_status.d32 = USB_OTG_ReadCoreItr(pdev);
if (!gintr_status.d32)
{
return 0;
}

if (gintr_status.b.outepintr)
{
retval |= DCD_HandleOutEP_ISR(pdev);
}

if (gintr_status.b.inepint)
{
retval |= DCD_HandleInEP_ISR(pdev);//程序一直进入此处
}

if (gintr_status.b.modemismatch)
{
USB_OTG_GINTSTS_TypeDefgintsts;


gintsts.d32 = 0;
gintsts.b.modemismatch = 1;
USB_OTG_WRITE_REG32(&pdev->regs.GREGS->GINTSTS, gintsts.d32);
}

if (gintr_status.b.wkupintr)
{
retval |= DCD_HandleResume_ISR(pdev);
}

if (gintr_status.b.usbsuspend)
{
retval |= DCD_HandleUSBSuspend_ISR(pdev);
}
if (gintr_status.b.sofintr)
{
retval |= DCD_HandleSof_ISR(pdev);

}

if (gintr_status.b.rxstsqlvl)
{
retval |= DCD_HandleRxStatusQueueLevel_ISR(pdev);

}

if (gintr_status.b.usbreset)
{
retval |= DCD_HandleUsbReset_ISR(pdev);

}
if (gintr_status.b.enumdone)
{
retval |= DCD_HandleEnumDone_ISR(pdev);
}

if (gintr_status.b.incomplisoin)
{
retval |= DCD_IsoINIncomplete_ISR(pdev);
}

if (gintr_status.b.incomplisoout)
{
retval |= DCD_IsoOUTIncomplete_ISR(pdev);
}
#ifdef VBUS_SENSING_ENABLED
if (gintr_status.b.sessreqintr)
{
retval |= DCD_SessionRequest_ISR(pdev);
}

if (gintr_status.b.otgintr)
{
retval |= DCD_OTG_ISR(pdev);
}
#endif
}
return retval;
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息