OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6693|回复: 3

电脑端关闭串口后程序死循环在usb中断

[复制链接]

2

主题

3

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2017-4-3
在线时间
6 小时
发表于 2018-3-25 11:06:20 | 显示全部楼层 |阅读模式
20金钱
USB虚拟串口,在USB没有插入电脑时程序正常运行,在插入电脑后,电脑端的上位机必须打开串口后程序才正常运行但是无法进入其他中断,关闭串口后程序死在USB中断。
USB中断函数如下,其他描述如图
/**
* @brief  STM32_USBF_OTG_ISR_Handler
*         handles all USB Interrupts
* @param  pdev: device instance
* @retval status
*/
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;
}

USB发送数据函数

USB发送数据函数

电脑端打开串口后,所有任务正常运行,串口中断次数明显降低至正常水平,ADC中断未进入(应该是ADC没再次启 ...

电脑端打开串口后,所有任务正常运行,串口中断次数明显降低至正常水平,ADC中断未进入(应该是ADC没再次启 ...

插入USB但未在电脑上打开串口时,变量xxx记录USB中断次数,每次更新增长5000左右,其他程序停止运行

插入USB但未在电脑上打开串口时,变量xxx记录USB中断次数,每次更新增长5000左右,其他程序停止运行

电脑未插入USB时,所有功能正常运行

电脑未插入USB时,所有功能正常运行
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

3

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2017-4-3
在线时间
6 小时
 楼主| 发表于 2018-3-25 11:07:24 | 显示全部楼层
新人第一次发帖,如有描述不清楚的请追问我
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2018-3-26 02:08:39 | 显示全部楼层
试试我们例程。
回复

使用道具 举报

21

主题

106

帖子

0

精华

高级会员

Rank: 4

积分
807
金钱
807
注册时间
2017-6-30
在线时间
171 小时
发表于 2021-5-27 23:15:31 | 显示全部楼层
老哥,问题解决了?我也遇到这样的问题,一模一样。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-27 17:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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