stm32 USB CDC 不接电脑无程序一直在USB中断问题
前些时间基于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 */
}
通过以上两步,操作,使用程序在不接电脑时也能正常运行,其它功能也能正常使用。
stm32 USB CDC 不接电脑无程序一直在USB中断问题相关推荐
- 备份linux分区到usb,将Linux引导加载程序备份到USB的方法
本文介绍如何将Linux引导加载程序备份到USB以应对紧急情况.大多数Linux操作系统使用的引导加载程序称为Grub,这是一个简单的工具,可以配置为在PC启动时从菜单启动Linux发行版以及其他操作 ...
- 连不上局域网计算机一连就闪退,手机usb连不上电脑 连上了就闪退??
一.手机USB连不上电脑可能是因为手机没安装驱动,可以下载豌豆荚等软件进行驱动安装. 二.第二个手机USB连不上电脑的解决方法不用安装任何东西,你把手机连接电脑后,点击手机设置--应用程序--开发者选 ...
- STM32开发笔记33:解决USB CDC “该设备无法启动”问题
单片机型号:STM32F401 调试STM32的USB CDC设备已经有好多次了,可以看一下前面写的日志,针对不同的STM32 MCU都进行了调试.原本以为STM32F4会很简单,可处处是坑,已经调到 ...
- 三星s4开机显示无服务器,三星S4无法连接电脑,USB连接后手机只出现充电提示,电脑无反应...
三星S4无法连接电脑,USB连接后手机只出现充电提示,电脑无反应以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 三星S4 ...
- STM32 USB CDC 虚拟多串口
转自: http://www.stmcu.org.cn/module/forum/thread-613510-1-1.html 楼主 发表于 2017-9-28 22:30:04 | 只看该作者 | ...
- [原创] STM32 USB CDC 虚拟多串口
creep 该用户从未签到 61 主题 1995 帖子 26 蝴蝶豆 版主 最后登录 2018-10-19 发消息 电梯直达 楼主 发表于 2017-9-28 22:30:04 | 只看该作 ...
- hp台式计算机u盘启动设置,如何在HP计算机上设置USB引导? HP电脑BIOS设置程序U盘启动教程...
如果要在HP计算机上重新安装系统,如果使用USB闪存驱动器进行安装,则必须将USB闪存驱动器设置为引导,然后将其安装在PE中,但是许多用户却没有这样做.不知道如何在HP计算机上设置USB启动.编辑器将 ...
- stm32 usb 虚拟串口 相同_为什么说你要学习USB?(一)
来源:公众号[鱼鹰谈单片机]作者:鱼鹰OspreyID :emOsprey本篇笔记为 USB 系列教程第一篇,一共有多少篇鱼鹰心里也没底,鱼鹰不会因为篇幅多而停止,会尽可能的将 USB 讲透,让你 ...
- 在进行USB CDC类开发时,无法发送64整数倍的数据(续)
1 前言 此文延续之前相同文章的话题,是对上篇文章的补充,之所以会有此文,主要是之前发现问题是在STM32F4上,解决方案也是基于CubeF4,但是,当相同问题出现在STM32F0上时,使用之前的代码 ...
最新文章
- window resize和scroll事件的基本优化
- 案例:Oracle dul数据挖掘 磁盘损坏dul提取数据文件中表的数据及l
- 想要快速获客?送你 2 个小程序互推方法
- PAT甲级1131 Subway Map (30分):[C++题解]堆优化dijkstra、单源最短路、地铁地图、巧妙地建图套dijkstra模板!!
- 第七届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)
- 【OS学习笔记】八 实模式:编写主引导扇区代码-另一种更高效的写法
- QBC检索和本地SQL检索
- C++ File:\dd\vctools\vc7libs\..\..\afxwin1.inl Line24
- u盘iso安装centos5 ,centos6
- android adb进入recovery模式,adb 进入 recovery adb 进入 bootloader
- TexturePacker破解版教程及下载
- python回车和换行的区别_换行\ n与回车\ r的区别
- 微博遭鹿晗恋情暴击瘫痪,如何把微博服务器搞炸的?
- Python对遥感影像重采样,以及重采样方法
- 龙架构(LoongArch)赋能众享链网,相关产品已完成适配
- 计算摄影:噪声模型与噪声估计
- SSM框架学习(一)————SSM框架简介
- 东师理想运维工具开发路线图(第一阶段)
- 人工智能意念控制打字_智能打字稿批量属性分配
- 数学建模 微分方程实战:利用SEIR模型对新冠病毒预测