搜索
bottom↓
回复: 9

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

[复制链接]

出0入0汤圆

发表于 2016-2-23 18:42:01 | 显示全部楼层 |阅读模式
使用STM32F105以及官方的USB库模拟usb转串口,USB的电源5V不监测。初始化usb,打开串口输出正常,然后关闭串口,一段时间程序就一直在中断函数uint32_t USBD_OTG_ISR_Handler (USB_OTG_CORE_HANDLE *pdev)跳不出来,设断点于retval |= DCD_HandleInEP_ISR(pdev);一直进入这里无法返回主函数。
uint32_t USBD_OTG_ISR_Handler (USB_OTG_CORE_HANDLE *pdev)
{
  USB_OTG_GINTSTS_TypeDef  gintr_status;
  uint32_t retval = 0;
  
  if (USB_OTG_IsDeviceMode(pdev)) /* ensure that we are in device mode */
  {
    gintr_status.d32 = USB_OTG_ReadCoreItr(pdev);
    if (!gintr_status.d32) /* avoid spurious interrupt */
    {
      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_TypeDef  gintsts;
      
      /* Clear interrupt */
      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;
}

重新打开串口,输出又正常了,主程序部分接着可以执行,求大神指点原因~~


阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2016-3-5 09:24:27 | 显示全部楼层
碰到同样的问题,也在找解决方案,你的解决了吗?

出0入0汤圆

 楼主| 发表于 2016-3-9 13:58:33 | 显示全部楼层
hmd420304805 发表于 2016-3-5 09:24
碰到同样的问题,也在找解决方案,你的解决了吗?

stm32_f105-07_f2_f4_usb-host-device_lib.zip库出现问题,解决方案是更换了库文件

出0入0汤圆

发表于 2016-3-9 18:48:16 | 显示全部楼层
tian_zi 发表于 2016-3-9 13:58
stm32_f105-07_f2_f4_usb-host-device_lib.zip库出现问题,解决方案是更换了库文件

今天已经搞定。在歪果仁论坛里看到解决方案,尝试修改可以。
最终也更换了库文件V2.2版本。
分包BUG你搞定了吗?
双缓冲搞定了吗?

出0入0汤圆

发表于 2016-3-9 21:47:21 | 显示全部楼层
tian_zi 发表于 2016-3-9 13:58
stm32_f105-07_f2_f4_usb-host-device_lib.zip库出现问题,解决方案是更换了库文件

换成哪个库文件了?

出0入0汤圆

 楼主| 发表于 2016-3-10 16:44:44 | 显示全部楼层
hmd420304805 发表于 2016-3-9 18:48
今天已经搞定。在歪果仁论坛里看到解决方案,尝试修改可以。
最终也更换了库文件V2.2版本。
分包BUG你搞 ...

分包没发现问题,暂时没有做双缓冲

出0入0汤圆

 楼主| 发表于 2016-3-10 16:47:17 | 显示全部楼层
NIC 发表于 2016-3-9 21:47
换成哪个库文件了?

出现问题的是V2.1版本,我用的成功是V3.3.0的库,上面有位兄弟用的是V2.2库版本也成功。我先尝试一下这几种,再源代码上传到这来~~

出0入0汤圆

发表于 2016-12-3 13:55:58 | 显示全部楼层
哈哈,我也遇到了这个问题

出0入0汤圆

 楼主| 发表于 2016-12-3 17:03:14 | 显示全部楼层
simmons 发表于 2016-12-3 13:55
哈哈,我也遇到了这个问题

请教一下采用什么方案解决的?

出0入0汤圆

发表于 2016-12-6 14:41:41 | 显示全部楼层
tian_zi 发表于 2016-12-3 17:03
请教一下采用什么方案解决的?

升级USB固件版本即可
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 18:19

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表