STM32 USB主机通信连接中断过程
1、STM32F USB主机
本文介绍STM32F USB OTG FS主机的中断过程及时序,关于USB通信的原理与报文不在本文的介绍,请参考其他文档。本文根据实际的使用USB主机详细的描述的USB主机中断发生的过程及顺序,是全网少有的文章。本文介绍所涉及的USB主机程序请参考rt thread操作系统的USB主机协议栈与USB主机驱动。
2、连接、断开中断
一个USB设备在连接USB主机端口时会发生连接中断,通知应用程序发生了连接中断。USB设备与USB主机端口断开时会发生断开中断,通知应用程序发生了断开中断。
设备插入USB主机端口时,USB主机产生中断,中断程序中会进入连接中断,如下图,即调用HAL_HCD_Connect_Callback函数,此函数会调用主机协议栈中的rt_usbh_root_hub_connect_handler函数,在此函数中会设置中设备连接标志,并且发送一个消息邮箱,通知协议栈线程来处理设备连接后的复位端口,枚举设备等。
设备从USB主机端口断开时,USB主机产生中断, 中断程序会进入断开连接中断,如下图,即调用HAL_HCD_Disconnect_Callback函数,此函数会调用主机协议栈中的rt_usbh_root_hub_disconnect_handler函数,在此函数中会设置设备断开连接标志,并且发送一个消息邮箱,通知协议栈线程来处理设备断开后来释放之前加载的类驱动、释放USB主机管道。
对着代码,认真看图,认真看图,认真看图!
3、USB主机中断问题
在实际测试过程中,发现了插入一次USB设备时,主机发生1次连接中断,在1ms左右又发生了1次断开中断,之后再发生1次连接中断这样的现象,也许是设备插入产生的抖动产生,不是每次发出,但是出现的机率也有50%以上,实际未对设备连接后的枚举产生影响,所以未加处理。如果要避免这种情况,可以在usb断开中对连接中断发生的时间进行超时判断,在2ms以内连续发生就不执行相应操作。
STM32 USB主机通信连接中断过程相关推荐
- STM32 USB Host 同时连接多个设备样例(如鼠标和键盘)--原创
STM32 USB Host 同时连接多个设备样例(如鼠标和键盘) 在网上搜了很多都是USB Host单独连接鼠标或键盘的样例, 而当前很多无线鼠标键盘都是并到一个USB口上的, 也就是同一个USB有 ...
- 首创STM32 USB主机驱动4G rndis设备
1.4G模块使用技术现状与难题 4G模块支持的对外通信接口有串口和USB接口,串口一般使用AT指令的方式,这个在MCU类产品上面使用的很多,USB接口主用于在连接APU应用处理器上面,由LINUX操作 ...
- 用STM32 USB虚拟串口替代UART
本文使用的库为 stsw_stm32121_V4.1.0,在STM32F103C8 上开发. 导入: 最近玩STM32时深感UART不方便,得用杜邦线把STM32和UART转USB模块连起来,于是了解 ...
- stm32单片机使用串口通信连接GY-33颜色传感器完成对颜色的识别并且打印出其颜色和对应的RGB值
目录 1.GY-33介绍及其接线 2.通信原理 3.代码 4.GY-33发送出来的数据及如何处理数据 5.软件使用 所需:stm32单片机(这里使用的是正点原子stm32mini板),GY_33传感 ...
- USB应用开发笔记之一:STM32上实现USB主机读写U盘
在项目应用中,经常会有对外交换数据的需求.USB接口读写U盘无疑是一种颇为方便的选择.在这一篇中,我们就来讨论如何在STM32上实现USB主机读写U盘文件的方法. 1.应用概述 在我们的产品上 ...
- 计算机串口连接原理,串口通信的原理及USB转串口通信
串口通信的原理 串口通信(SerialCommunicaTIons)的概念非常简单,串口按位(bit)发送和接收字节.尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一 ...
- STM32 USB无法连接电脑
一.说明 在调试 STM32 USB device MSC 功能时,使用官方提供的库和示例项目,电脑可以正确识别设备,也可以正常操作.但是将 USB 部分的代码移植到自己的工程后,发现电脑无法正确识别 ...
- STM32 USB模块讲解,详细讲解USB库通信过程(二)
今天有空,开贴讲讲,怎样配合ST 提供的库函数理解STM32F103 的USB模块,以及怎么调用这些库函数来实现基本的USB通信.题目很大,先只讲讲最简单的应用. 1 关于512字节的Packet B ...
- stm32——USB学习(一)
在现代个人电脑的USB是几乎所有外设的标准通信端口.然而许多工业应用软件仍然使用经典的串口(UART).USB虚拟串口提供了绕过这个问题的一个简单的解决方案. 为了让USB被视为一个COM端口,USB ...
- STM32 —— USB 转 TTL(CH340)
STM32 -- USB 转 TTL(CH340) 在使用 USB 转 TTL 模块之前,我们需要了解 TTL 协议 串口 TTL 什么是 TTL TTL 一般是从单片机或者芯片中发出的电平,高电平为 ...
最新文章
- 1月23日服务器例行维护更新公告,1月24日服务器例行维护公告(已完成)
- git.exe 启动 慢_拳头:今年将修复英雄联盟客户端 启动时间降到19秒
- openvswitch 流表操作(四十八)
- servlet中为什么doGet方法没有被调用的一种可能(笔记)
- 面经——Java基础
- 操作系统(2) -- 进程管理
- Asp.net中使用WEB编辑控件FCKEditor
- Python学习之路3 - 字符串操作字典
- NumPy 简介及安装
- java 读取资源文件最详细解读
- MTK camera驱动浅析(1)
- 芯片设计验证中遇到的VCD、VPD以及EVCD到底是什么?
- 【3】CH347应用--USB TO JTAG进行FPGA调试下载
- Nanjing GDG Meetup 8月线下活动
- trinitycore MySQL模块_TrinityCore MMORPG服务器设计分析
- 2012蓝桥杯【初赛试题】手机尾号
- 可调谐半导体激光器的窄线宽测试及压缩
- H3CTE讲师分享H3C实验8 帧中继
- linux中的bin目录的作用,linux中bin与sbin目录的作用及区别介绍
- 【基于C# Winfrom开发】人事信息管理系统(PIMS)项目
热门文章
- ARM和Linux下 nanomsg 编译与使用
- python function terminated_评论第2页 – Calibre 转换 TXT 文件出现 Errno 21 错误的解决方法 – 书伴...
- 如何对一个GIF表情包进行压缩剪裁?
- doesn‘t work properly without JavaScript enabled. Please enable it to continue 的原因之一
- 两轴插补速度怎么给定_两轴直线插补定位.doc
- 怎么把一张暗的照片调亮_美图秀秀教你批量将偏暗的照片提亮
- 一个驱动级别的 键盘鼠标模拟工具
- Xcode打包ipa的基本步骤(有证书和无证书)
- 加快二代支付系统建设改进央行支付清算服务
- 深度强化学习——A3C