stm32 USB CDC 不接电脑无程序一直在USB中断问题

2023-10-27

前些时间基于STM32CUBE 工具做了个用STM32F103的USB 接口 枚举成CDC的项目,接上电脑程序功能正常,但是在不接电脑时,程序一直在USB中断中,下在给大家分享一下我的解决方法:

首先是在 stm32f1xx_hal_pcd.c文件中的 HAL_PCD_IRQHandler函数屏蔽USB_ISTR_ESOF中断响应操作,如下面方红色代码所示:

void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd)

  if (__HAL_PCD_GET_FLAG (hpcd, USB_ISTR_CTR))
  {
    /* servicing of the endpoint correct transfer interrupt */
    /* clear of the CTR flag into the sub */
    PCD_EP_ISR_Handler(hpcd);
  }

  if (__HAL_PCD_GET_FLAG (hpcd, USB_ISTR_RESET))
  {
    __HAL_PCD_CLEAR_FLAG(hpcd, USB_ISTR_RESET);
    HAL_PCD_ResetCallback(hpcd);
    HAL_PCD_SetAddress(hpcd, 0U);
  }

  if (__HAL_PCD_GET_FLAG (hpcd, USB_ISTR_PMAOVR))
  {
    __HAL_PCD_CLEAR_FLAG(hpcd, USB_ISTR_PMAOVR);    
  }
  if (__HAL_PCD_GET_FLAG (hpcd, USB_ISTR_ERR))
  {
    __HAL_PCD_CLEAR_FLAG(hpcd, USB_ISTR_ERR); 
  }

  if (__HAL_PCD_GET_FLAG (hpcd, USB_ISTR_WKUP))
  {
    hpcd->Instance->CNTR &= ~(USB_CNTR_LP_MODE);
    hpcd->Instance->CNTR &= ~(USB_CNTR_FSUSP);
    
    HAL_PCD_ResumeCallback(hpcd);

    __HAL_PCD_CLEAR_FLAG(hpcd, USB_ISTR_WKUP);     
  }

  if (__HAL_PCD_GET_FLAG (hpcd, USB_ISTR_SUSP))
  { 
    /* Force low-power mode in the macrocell */
    hpcd->Instance->CNTR |= USB_CNTR_FSUSP;
    
    /* clear of the ISTR bit must be done after setting of CNTR_FSUSP */
    __HAL_PCD_CLEAR_FLAG(hpcd, USB_ISTR_SUSP);  

    hpcd->Instance->CNTR |= USB_CNTR_LP_MODE;
    if (__HAL_PCD_GET_FLAG (hpcd, USB_ISTR_WKUP) == 0U)
    {
      HAL_PCD_SuspendCallback(hpcd);
    }
  }

  if (__HAL_PCD_GET_FLAG (hpcd, USB_ISTR_SOF))
  {
    __HAL_PCD_CLEAR_FLAG(hpcd, USB_ISTR_SOF); 
    HAL_PCD_SOFCallback(hpcd);
  }

//  if (__HAL_PCD_GET_FLAG (hpcd, USB_ISTR_ESOF))
//  {
//    /* clear ESOF flag in ISTR */
//    __HAL_PCD_CLEAR_FLAG(hpcd, USB_ISTR_ESOF); 
//  }

   
}

然后在USB中断中函数,笔都的是USB_LP_CAN1_RX0_IRQHandler 中的 USER CODE BEGIN USB_LP_CAN1_RX0_IRQn 1区域加入如下红色代码:

/**
  * @brief This function handles USB low priority or CAN RX0 interrupts.
  */
void USB_LP_CAN1_RX0_IRQHandler(void)
{
  /* USER CODE BEGIN USB_LP_CAN1_RX0_IRQn 0 */
    
  /* USER CODE END USB_LP_CAN1_RX0_IRQn 0 */
  HAL_PCD_IRQHandler(&hpcd_USB_FS);
  /* USER CODE BEGIN USB_LP_CAN1_RX0_IRQn 1 */

  //  如果没有数据收到ESOF中断,则关闭如下中断 
  if (__HAL_PCD_GET_FLAG (&hpcd_USB_FS, USB_ISTR_ESOF))
  {
    /* clear ESOF flag in ISTR */
        USB->CNTR &= 0xe2ff;

        /* Force low-power mode in the macrocell */
        USB->CNTR |= USB_CNTR_FSUSP;
        USB->CNTR |= USB_CNTR_LP_MODE;
        
        USB->ISTR &= ~USB_ISTR_RESET;
        USB->ISTR &= ~USB_ISTR_SUSP;
        USB->ISTR &= ~USB_ISTR_WKUP;
        USB->ISTR &= ~USB_ISTR_ESOF;
        
  }

    
  /* USER CODE END USB_LP_CAN1_RX0_IRQn 1 */
}

通过以上两步,操作,使用程序在不接电脑时也能正常运行,其它功能也能正常使用。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

stm32 USB CDC 不接电脑无程序一直在USB中断问题 的相关文章

  • 使用 DeviceWatcher 监视 USB 驱动器并检索设备信息?

    I m a WinForms开发人员和我已经知道如何使用 WMI 监视连接或断开连接的 USB 但不久前我发现了设备观察者 http msdn microsoft com en us library windows devices enum
  • Android 到 PC USB 读/写

    我在 PC 上有一个程序 从 USB 接收字符串输入 旧程序 我有一个 Android 4 X 平板电脑 需要向在 PC 上运行的程序提供 USB 上的字符串输入 当我在 Android 上使用示例代码时 以下代码给出了空的哈希图 PC 在
  • 不支持混合类型

    请看一下下面的头文件 pragma once using namespace UsbLibrary ref class MissileLauncher public MissileLauncher void private Bytes us
  • 在 Mac 上通过 USB 访问 iOS 设备

    我有一个移动应用程序需要将文件传输到数据库 然而 其规范之一是 如果用户没有设置无线网络 则应该能够将其插入 Mac 并将文件传输到数据库 然而 我遇到的问题是如何将上述文件从 iPad 上通过 USB 传输到计算机上 上周我研究了各种解决
  • 如何在没有窗口句柄的情况下使用 RegisterDeviceNotification?

    我正在编写一个 DLL 库 该库使用 VB NET 中的 winusb 连接到 USB 设备 由于它是一个 DLL 所以我没有窗口 而且我的库的用户也可能没有窗口 例如命令行应用程序 我见过的检测设备连接和分离的示例都使用RegisterD
  • libv4l2:打开流时出错:设备上没有剩余空间

    我尝试为 opencv 获取立体声对 我将 Logitech B910 和 Logitech C910 网络摄像头连接到 USB 但有这个错误 我玩弄了怪癖参数并设置outfmt mjpeg在mplayer中 但又出现此错误 在哪里可以找到
  • 使用 adb 连接到 LG 手机时出现问题 (Mac OS X 10.7.5)

    当我跑步时adb devices没有设备显示为已连接 我的设备是运行 4 4 2 的 LG Optimus Exceed 2 周围有很多这样的帖子 所以这就是我所做的 我正在使用电话附带的数据线 它会充电并尝试同步照片 因此这不是问题 切换
  • 如何枚举 USB 设备*并*对其进行读/写?

    我需要与一个自定义 USB 设备进行通信 它没有特定的驱动程序 该设备不显示为 dev tty I 发现 http www signal11 us oss udev 我该如何使用libudev枚举 USB 设备 假设我设法获得相应的stru
  • 在 Python 中将 USB 视频捕获设备友好名称与 OpenCV 端口号相关联

    我想在 Windows 平台上使用 Python 获取外部 USB 视频捕获设备的友好名称和 USB 端口号 我正在使用 OpenCV 从 USB 捕获设备捕获视频 OpenCV 将 USB 端口称为 1 找到的第一个工作摄像头 0 对我来
  • 我无法找到 libftdi 的 mpsse (SPI) 模式的示例代码

    这不是一个家庭作业问题 尽管这是一个工作问题 几个月前 我刚写完一份规范 老板就会把它外包出去 因为资金紧张 所以我正在尝试自己做这件事 我是一个很弱的 C 编码员 如果 gcc 能输出一些运行时不会出现段错误的东西 或者有时根本没有任何东
  • 使用 STM32 USB 设备库将闪存作为大容量存储设备

    我的板上有这个闪存IC 它连接到我的STM32F04 ARM处理器 处理器的USB端口可供用户使用 我希望我的闪存在通过 USB 连接到 PC 时被检测为存储设备 作为第一步 我在程序中将 USB 类定义为 MSC 效果很好 因为当我将主板
  • Android:如何以编程方式连接/断开 OTG

    我想在我的 Android 设备中以编程方式连接和断开 USB OTG 笔式驱动器 硬盘驱动器等 对于USB 我使用以下路径在连接到PC时绑定 取消绑定USB sys bus usb drivers usb bind or unbind 我
  • 如何查找USB盘符?

    我正在编写一个安装程序来将应用程序安装到 USB 驱动器 该应用程序只能从 USB 驱动器使用 因此它可以通过自动选择要安装的 USB 驱动器来为用户节省额外的步骤 我可能会尝试使用 Nullsoft 或 MSI 进行安装 但由于我最熟悉
  • 我可以从哪里开始使用可编程硬件?

    一段时间以来 我一直渴望至少学习一点有关硬件编程的知识 并想在这里提出要求以获得一些起点 我是一位相当有成就的程序员 具有 Delphi 和 Objective c 经验 但从未听过设备端口 中断 我什至不知道术语 更不用说对硬件进行编程了
  • 如何将 Android USB 连接模式更改为仅充电? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案
  • Delphi - 如何获取 USB 可移动硬盘和记忆棒的列表?

    在我的应用程序 Delphi 中 我需要列出所有 USB 存储设备 这些可以是闪存棒or外部存储驱动器 有一个Jvcl成分JvDriveCombo 并且它有DriveType属性 问题是我是否选择DriveType Fixed那么除了外部驱
  • 有没有办法通过 WiFi 部署/调试 Cordova Android Ionic 应用程序? [关闭]

    Closed 这个问题是与编程或软件开发无关 help closed questions 目前不接受答案 这是一个双胞胎this https stackoverflow com questions 46596236 is there a w
  • 我的 Android 设备需要安装哪个驱动程序才能运行我的应用程序?

    我购买了 intex mobile 来在真实设备中测试我的 Android 应用程序 然而 该设备不存在于 OEM USB 驱动程序列表中 android 提供的设备列表中 我检查了 intex 官方网站 但不确定到底需要安装哪个驱动程序
  • USB编程

    我想对微控制器 AVR 进行编程 以通过 USB 控制一些 LED 它只是出于对如何构建和编程 USB 设备的兴趣 有一些 AVR 微控制器支持 USB 协议 或者我可以自己在另一个微控制器中实现 USB 协议 但我想知道用什么来在计算机上
  • IntelliJ IDEA 中的 Android 开发导致电脑死机

    我使用 IntelliJ IDEA 10 5 进行 Android 开发 并使用最新的 Google USB 驱动程序 版本 4 进行调试 在 IntelliJ IDEA 中开发一段时间后 当通过 USB 连接 Android 设备 Nex

随机推荐

  • ec服务器如何显示4d,ECToolbox软件四种公式在心肌灌注显像中计算左心室射血分数的应用...

    摘要 目的 比较ECToolbox 4种公式 R 0 R 1 R 2 R 3 计算心电图门控心肌灌注显像 ECG gated myocardial perfusion SPECT GMPS 左心室射血分数与平衡法心血池显像 equilibr
  • el-input (输入框)校验 只能输入数字和小数

    备注 我写的是判断输入的是否数字或小数 如果只需判断是否是数字可直接复制elementui官网上的案例即可 1 一定要写 prop aa 不然是没效果的 2 仿照elementui官网 绑定rules 3 写校验 tirgger chang
  • gcj Round 1- A -B题

    输入 E R N v1 v2 vn 有n个工作 没做一个消耗一定的能量 但可以得到R个能量 最多为E 多则去除 初始能量是E 每件工作的收益是 v i u i u i 做i使用的能量 u i gt 0 u i lt E 解 如果规定u i
  • VUE layui之table数据表格使用详细说明

    步骤 一 layui官网下载包 二 将解压的文件放入static文件夹 如果没有就在根目录下新建一个 三 public文件下index html中引入css及js文件 这里注意顺序和你下载的版本号 四 vue页面中使用
  • java3D 第三章 java3D基本图形类详解

    第三章 java 3D基本图形功能 java 3D基本图形功能 java 3D场景式管理 SimpleUniverse类及其方法 ViewingPlatform类及方法 包的关系 Shape3D类及方法 Appearance类及方法 Bra
  • 大数据技术——Scala语言基础

    Scala语言概述 计算机的缘起 数学家阿隆佐 邱奇 Alonzo Church 设计了 入演算 这是一套用于研究函数定义 函数应用和递归的形式系统 入演算被视为最小的通用程序设计语言 入演算的通用性就体现在 任何一个可计算函数都能用这种形
  • 对于stm32,初学者用库函数好还是直接对寄存器操作比较好

    在stm32教学光盘的A里 有两个开发指南 一个是库函数版本 一个是寄存器版本 那么问题来了 作为一个初学者 我应该用库函数好还是直接对寄存器操作比较好 为此我搜集了一些资料 找到了一些可以借鉴的文章 首先 两个都是C语言 从51过渡过来的
  • PBFT代码实现

    本篇文章主要是PBFT共识的简单实现 其中有许多地方都做了简化 PBFT的原理已在上篇文章中描述过 如果对PBFT的原理不太清晰的的可以进行查看 文章地址 共识算法学习总结 代码实现的主要功能有 通过客户端添加区块 使用libp2p的mdn
  • CVTE笔试面试经验分享(硬件)—2020秋招

    秋招流程 投简历 在线笔试 技术面试一 技术面试二 综合面试 投简历 简历是直接在CVTE的校招网上投递的 然后可以选择面试城市和笔试时间 在线笔试 简历筛选通过后就会通知进行线上的笔试 笔试结果各个岗位不同等待的也不同 硬件笔试都是基础
  • 【Linux】基本指令(一)

    目录 一 ls指令 1 不指定目录 ls 2 指定目录 ls huangchao 3 加选项 ls l 4 加选项 ls a 5 选项组合 ls l a 6 选项 指定文件夹 ls l a huangchao 7 ls 指令总结 二 mkd
  • Opencascade安装教程(Visual Studio 2017)

    之前尝试了一次Visual Studio 2019 Opencascade7 5 0的编译 编译成功了 但是在Qt中使用的时候一堆错误没有解决 加之之前的项目需要 所以卸载了VS2019 改安装了VS2017 如果不想找太多错误 不妨可以安
  • Python实现淘宝商品数据爬取——静态网页爬虫(仅供学习,切勿无限制爬取)

    一 关于淘宝网 淘宝网是亚太地区较大的网络零售 商圈 由阿里巴巴集团在2003年5月创立 淘宝网是中国深受欢迎的网购零售平台 拥有近5亿的注册用户数 每天有超过6000万的固定访客 同时每天的在线商品数已经超过了8亿件 平均每分钟售出4 8
  • modelsim do文件简介及仿真波形分析注意事项

    目录 前言 Modelsim指令介绍 步骤一 创建run wave do 步骤二 打开Modelsim 步骤三 do run wave do 步骤4 run sim bat 补充介绍 参考 前言 本文对 do文件进行整理介绍 并在后文引用
  • 简单四边形不等式优化dp(上)

    这里只讨论简单的二维四边形不等式优化dp 和简单的广义决策单调性板子 下文中 优于 一般指的是 不劣于 请自行分辨 四边形不等式 四边形不等式定义为 位于整数集合上的二元函数 f x y f
  • sklearn中主成分分析PCA参数解释

    主成分分析一般用于数据降维 在应用主成分分析包scikit learn时注意以下四点 1 用pca components 可以获取特征向量 且特征向量为行向量 例如W pca components 0 或W pca components 0
  • Python如何生成词云(详细分析)

    前言 今天教大家用wrodcloud模块来生成词云 我读取了一篇小说并生成了词云 先看一下效果图 效果图一 效果图二 根据效果图分析的还是比较准确的 小说中的主人公就是 程理 所以出现次数最多 图中有两种模式 一种是默认的模式 另一种是自己
  • 【SpringMvc】从Servlet的HttpServlet到SpringMVC的DispathServlet到Springboot的RequestMapping

    1 0 众所周知 一个http请求到我们服务器 web容器 tomcat jetty servlet 就会约定俗成去访问webapp路径下的web xml配置文件 首先读取的是两个节点 listener 和 context param 监听
  • 自动化测试-selenium+python3+HTMLTestRunner

    案例介绍 使用selenium框架测试并输出测试报告 一 准备工作 1 编辑器 pycharm 2 安装selenium first step second step 3 导入HTMLTestRunner 用来生成测试报告的 注意 pyth
  • 细数6种垃圾回收器的区别, 快进来看看有没有你要用的

    文章目录 前言 一 垃圾回收算法 1 复制算法 2 标记 清除算法 3 标记 整理算法 4 分代算法 二 Serial收集器 三 Parallel Scavenge收集器 四 ParNew收集器 五 CMS收集器 1 GC流程 2 CMS的
  • stm32 USB CDC 不接电脑无程序一直在USB中断问题

    前些时间基于STM32CUBE 工具做了个用STM32F103的USB 接口 枚举成CDC的项目 接上电脑程序功能正常 但是在不接电脑时 程序一直在USB中断中 下在给大家分享一下我的解决方法 首先是在 stm32f1xx hal pcd