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主机通信连接中断过程相关推荐

  1. STM32 USB Host 同时连接多个设备样例(如鼠标和键盘)--原创

    STM32 USB Host 同时连接多个设备样例(如鼠标和键盘) 在网上搜了很多都是USB Host单独连接鼠标或键盘的样例, 而当前很多无线鼠标键盘都是并到一个USB口上的, 也就是同一个USB有 ...

  2. 首创STM32 USB主机驱动4G rndis设备

    1.4G模块使用技术现状与难题 4G模块支持的对外通信接口有串口和USB接口,串口一般使用AT指令的方式,这个在MCU类产品上面使用的很多,USB接口主用于在连接APU应用处理器上面,由LINUX操作 ...

  3. 用STM32 USB虚拟串口替代UART

    本文使用的库为 stsw_stm32121_V4.1.0,在STM32F103C8 上开发. 导入: 最近玩STM32时深感UART不方便,得用杜邦线把STM32和UART转USB模块连起来,于是了解 ...

  4. stm32单片机使用串口通信连接GY-33颜色传感器完成对颜色的识别并且打印出其颜色和对应的RGB值

    目录 1.GY-33介绍及其接线 2.通信原理 3.代码 4.GY-33发送出来的数据及如何处理数据​ 5.软件使用 所需:stm32单片机(这里使用的是正点原子stm32mini板),GY_33传感 ...

  5. USB应用开发笔记之一:STM32上实现USB主机读写U盘

      在项目应用中,经常会有对外交换数据的需求.USB接口读写U盘无疑是一种颇为方便的选择.在这一篇中,我们就来讨论如何在STM32上实现USB主机读写U盘文件的方法. 1.应用概述   在我们的产品上 ...

  6. 计算机串口连接原理,串口通信的原理及USB转串口通信

    串口通信的原理 串口通信(SerialCommunicaTIons)的概念非常简单,串口按位(bit)发送和接收字节.尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一 ...

  7. STM32 USB无法连接电脑

    一.说明 在调试 STM32 USB device MSC 功能时,使用官方提供的库和示例项目,电脑可以正确识别设备,也可以正常操作.但是将 USB 部分的代码移植到自己的工程后,发现电脑无法正确识别 ...

  8. STM32 USB模块讲解,详细讲解USB库通信过程(二)

    今天有空,开贴讲讲,怎样配合ST 提供的库函数理解STM32F103 的USB模块,以及怎么调用这些库函数来实现基本的USB通信.题目很大,先只讲讲最简单的应用. 1 关于512字节的Packet B ...

  9. stm32——USB学习(一)

    在现代个人电脑的USB是几乎所有外设的标准通信端口.然而许多工业应用软件仍然使用经典的串口(UART).USB虚拟串口提供了绕过这个问题的一个简单的解决方案. 为了让USB被视为一个COM端口,USB ...

  10. STM32 —— USB 转 TTL(CH340)

    STM32 -- USB 转 TTL(CH340) 在使用 USB 转 TTL 模块之前,我们需要了解 TTL 协议 串口 TTL 什么是 TTL TTL 一般是从单片机或者芯片中发出的电平,高电平为 ...

最新文章

  1. 1月23日服务器例行维护更新公告,1月24日服务器例行维护公告(已完成)
  2. git.exe 启动 慢_拳头:今年将修复英雄联盟客户端 启动时间降到19秒
  3. openvswitch 流表操作(四十八)
  4. servlet中为什么doGet方法没有被调用的一种可能(笔记)
  5. 面经——Java基础
  6. 操作系统(2) -- 进程管理
  7. Asp.net中使用WEB编辑控件FCKEditor
  8. Python学习之路3 - 字符串操作字典
  9. NumPy 简介及安装
  10. java 读取资源文件最详细解读
  11. MTK camera驱动浅析(1)
  12. 芯片设计验证中遇到的VCD、VPD以及EVCD到底是什么?
  13. 【3】CH347应用--USB TO JTAG进行FPGA调试下载
  14. Nanjing GDG Meetup 8月线下活动
  15. trinitycore MySQL模块_TrinityCore MMORPG服务器设计分析
  16. 2012蓝桥杯【初赛试题】手机尾号
  17. 可调谐半导体激光器的窄线宽测试及压缩
  18. H3CTE讲师分享H3C实验8 帧中继
  19. linux中的bin目录的作用,linux中bin与sbin目录的作用及区别介绍
  20. 【基于C# Winfrom开发】人事信息管理系统(PIMS)项目

热门文章

  1. ARM和Linux下 nanomsg 编译与使用
  2. python function terminated_评论第2页 – Calibre 转换 TXT 文件出现 Errno 21 错误的解决方法 – 书伴...
  3. 如何对一个GIF表情包进行压缩剪裁?
  4. doesn‘t work properly without JavaScript enabled. Please enable it to continue 的原因之一
  5. 两轴插补速度怎么给定_两轴直线插补定位.doc
  6. 怎么把一张暗的照片调亮_美图秀秀教你批量将偏暗的照片提亮
  7. 一个驱动级别的 键盘鼠标模拟工具
  8. Xcode打包ipa的基本步骤(有证书和无证书)
  9. 加快二代支付系统建设改进央行支付清算服务
  10. 深度强化学习——A3C