STM32的USB接口介绍
STM32 USB接口是STM32微控制器系列中集成的一种通信接口,它允许STM32微控制器与外部设备或计算机进行高速的数据传输和通信。以下是STM32 USB接口的简要介绍:
1. 接口类型
STM32的USB接口通常支持USB 2.0标准,部分高端型号可能还支持USB 3.0或更高版本。根据STM32的USB IP模块不同,USB接口可以分为低速(Low-Speed)、全速(Full-Speed, FS)、高速(High-Speed, HS)或超高速(SuperSpeed, SS)四种类型。其中,全速USB的传输速率为12Mbps,高速USB的传输速率为480Mbps,而超高速USB(如USB 3.0)的传输速率则更高。
2. 角色模式
STM32的USB接口可以工作在多种角色模式下,包括:
- 设备模式(Device Mode):STM32作为USB设备,与USB主机(如电脑)进行通信。在这种模式下,STM32响应主机的命令和数据请求,进行数据传输。
- 主机模式(Host Mode):STM32作为USB主机,管理并控制一个或多个USB设备。在这种模式下,STM32可以主动发起数据传输请求,控制USB设备的操作。
- OTG模式(On-The-Go Mode):STM32同时支持设备模式和主机模式,可以在两种模式之间动态切换。OTG模式通过检测USB ID引脚的电平来确定当前的角色,从而灵活地适应不同的应用场景。
3. 主要特性
STM32的USB模块具有一系列丰富的特性,这些特性可以大致分为通用特性、主机模式特性和从机模式特性。以下是这三种特性的详细解析:
3.1通用特性
- 符合USB标准:经USB-IF认证,符合通用串行总线规范第2.0版。
- OTG协议支持:集成全速PHY,并完全支持定义在标准规范OTG补充第1.3版中的OTG协议。
- A-B器件识别:支持通过ID线识别USB设备的A端(主机)或B端(设备)。
- 协议支持:支持主机协商协议(HNP)和会话请求协议(SRP),允许设备在没有主机的情况下进行数据传输。
- 电源管理:允许主机关闭VBUS以在OTG应用中节省电池电量,并支持通过内部比较器对VBUS电平进行监控。
- 角色动态切换:支持主机到从机的角色动态切换,可通过软件配置为不同的角色,如具有SRP功能的USB FS从机(B器件)、具有SRP功能的USB FS/LS主机(A器件)或USB On-The-Go全速双角色设备。
- 帧和令牌支持:支持FS SOF(帧开始令牌)和LS Keep-alive令牌,SOF脉冲可通过PAD输出,也可从内部连接到定时器(如TIM2)。
- 省电功能:在USB挂起期间能够停止系统、关闭数字模块时钟,并对PHY和DFIFO电源进行管理。
- 高级FIFO控制:具有1.25 KB的专用RAM,采用高级FIFO控制,支持灵活有效的RAM使用,如动态分配存储区、FIFO大小可配置为非2的幂次方值等。
3.2主机模式特性
- VBUS电压生成:通过外部电荷泵生成VBUS电压。
- 多通道支持:多达8个主机通道(管道),每个通道都可以动态实现重新配置,支持任何类型的USB传输。
- 硬件调度器:内置硬件调度器,可在周期性硬件队列中存储多达8个中断加同步传输请求,在非周期性硬件队列中存储多达8个控制加批量传输请求。
- FIFO管理:管理一个共享RX FIFO、一个周期性TX FIFO和一个非周期性TX FIFO,以有效使用USB数据RAM。
3.3从机模式特性
- 端点配置:具有1个双向控制端点0,3个IN端点(EP),可配置为支持批量传输、中断传输或同步传输,以及3个OUT端点(EP),同样可配置为支持这些传输类型。
- FIFO管理:管理一个共享Rx FIFO和一个Tx-OUT FIFO,以高效使用USB数据RAM。同时,管理多达4个专用Tx-IN FIFO(分别用于每个使能的IN EP),以降低应用程序负荷并支持软断开功能。

4.功能特性
STM32 USB接口具有多种功能特性,包括:
- 即插即用和热插拔:支持USB设备的即插即用和热插拔功能,方便用户随时连接和断开设备。
- 多种传输类型:支持控制传输、中断传输、块传输和等时传输等四种传输类型,以满足不同应用的需求。
- 固件升级和调试:通过USB接口,可以方便地进行STM32的固件升级和调试,提高开发效率。
- 电源管理:部分STM32型号还支持USB电源管理功能,可以通过USB接口为设备供电或进行电池充电。
5.工作原理
-
USB2.0 使用四根线:VCC(5V)、GND、D+(3.3V)和 D-(3.3V) (注:五线模式多了一个DI 脚用于支持 OTG 模式,
OTG 为 USB 主机+USB 设备双重角色) -
在 USB 主机上,D-和 D+都接 15K 的电阻到地,在没有设备接入的时候,D+、D-均是低电平。在 USB 设备中,如果是高速设备,则在D+上接一个1.5K的电阻到 3.3V,如果是低速设备,则在 D-上接一个1.5K 的电阻到 3.3V。当设备接入主机时,主机就可以判断是否有设备接入,并能判断设备是高速设备还是低速设备。
- STM32F429通过
AHB总线访问(AHB频率必须大14.2Mhz),USB OTG 的内核时钟必须是 48Mhz,来自时钟树里面的 PLL48CK(和 SDIO 共用),我们一般使用 180Mhz 的主频,而 USB 需要 48Mhz 的时钟频率,无法从 180Mhz 进行整数分频得到,因此,我们需要将STM32F429 的主频,提升到 192Mhz,这样经过 4 分频,就可以得到 48Mhz 的 USB 时钟频率。
6.USB_OTG库
ST 提供了我们一个完整的 USB OTG 驱动库(包括主机和设备),通过这个库,我们可以很方便的实现我们所要的功能,而不需要详细了解 USB 的整个驱动,大大缩短了我们的开发时间和精力,ST 提供的 USB OTG 库,可以在:http://www.stmcu.org/document/list/index/category-523 这里下载到(STSW-STM32046)。
1.USB_OTG库

2.USB_OTG例程

3.移植注意
移植完成后,项目如下图所示:

- 使用 USB OTG FS,必须在 MDK 编译器的全局宏定义里面,添加宏定义:
USE_USB_FS - 通过修改 usbd_conf.h 里面的 MSC_MEDIA_PACKET 定义值大小,可以一定程度提高USB 读写速度(越大越快)。通过修改:STORAGE_LUN_NBR 宏定义的值为 2,可以支持 3 个磁盘
- 官方例程在 2 个或以上磁盘支持的时候,存在 bug,需要修改 usbd_msc.h 里面USBD_MSC_BOT_HandleTypeDef 结构体的 scsi_blk_nbr 参数,将其改为数组形式:uint32_t scsi_blk_nbr[STORAGE_LUN_NBR];数组大小由 STORAGE_LUN_NBR 指定,修改该参数后,相应的有一些函数要做修改,参考本例程源码。
- 修改 usbd_msc_bot.c 里面修改 MSC_BOT_CBW_Decode 函数,将 hmsc->cbw.bLUN > 1 改为:hmsc->cbw.bLUN > STORAGE_LUN_NBR,以支持多个磁盘
相关文章:
STM32的USB接口介绍
STM32 USB接口是STM32微控制器系列中集成的一种通信接口,它允许STM32微控制器与外部设备或计算机进行高速的数据传输和通信。以下是STM32 USB接口的简要介绍: 1. 接口类型 STM32的USB接口通常支持USB 2.0标准,部分高端型号可能还支持USB 3.…...
【中等】 猿人学web第一届 第2题 js混淆 动态cookie 1
目录 调试干扰Hook Function 加密参数定位hook Cookie AST 解混淆字符串解密还原解密函数AST 配合解密函数还原字符串 ASCII 编码字符串还原字符串相加花指令(对象)剔除无用代码虚假 if剔除无引用代码剔除无引用的对象数值还原 switch 还原完整的 AST 代码代码注意 还原加密 请…...
ubuntu 22.04 安装 docker(服务器从毛胚到精装)
1、用户操作 阿里云默认是 root 用户,我们一般要自己创建一个用户,然后给该用户 sudo 权限 添加用户 sudo adduser newUserName赋予sudo权限 sudo usermod -aG sudo newUserName删除用户 sudo deluser --remove-home --remove-all-files newUserNam…...
Vue3从零开始——如何巧妙使用setup语法糖、computed函数和watch函数
文章目录 一、setup语法糖二、computed函数2.1 computed的基本用法2.2 computed vs methods2.3 注意事项 三、watch函数3.1 watch的基本用法3.2 immediate和deep选项 四、综合小Demo五、总结 一、setup语法糖 之前我们在编写代码时每次都要编写setup() ,默认导出配置&#x…...
【C++】 特殊类设计:从构思到实现,引领设计新潮流
🌈 个人主页:Zfox_ 🔥 系列专栏:C从入门到精通 目录 🚀 前言 一: 🔥 不能被拷贝的类 二: 🔥 只能在堆上创建对象的类 三: 🔥 只能在栈上创建对象的…...
性能调优 18. Tomcat整体架构及其设计精髓分析
1. Tomcat介绍 1.1. 介绍 这边使用的是Tomcat9来做说明,本章节先对Tomcat架构和设计有个整体认识。后续章节会对Tomcat性能调优做说明。 官方文档介绍 https://tomcat.apache.org/tomcat-9.0-doc/index.html1.2. Tomcat概念 …...
【C++高阶】:特殊类设计和四种类型转换
✨ 人生如梦,朝露夕花,宛若泡影 🌏 📃个人主页:island1314 🔥个人专栏:C学习 ⛺️ 欢迎关注:👍点赞 👂&am…...
kafka基础概念二
1.Kafka中主题和分区的概念 1.主题Topic 主题-topic在kafka中是一个逻辑的概念,kafka通过topic将消息进行分类。不同的topic会被订阅该topic的消费者消费 但是有一个问题,如果说这个topic中的消息非常非常多,多到需要几T来存,因…...
牛客-热身小游戏
题目链接:热身小游戏 第一种写法:线段树 介绍第二种写法:并查集 对于一些已经查询过的点,我们可以往后跳,进行路径压缩,他们的父亲为下一个点。 a数组记录[ l , r ] 之间的乘积,初始值为1。…...
Python 深度学习调试问题
Python–深度学习解决的常见问题 1.在自己写测试样例的时候,有时候可能将要传入的是input_size,不小心传入为input_dim,这个时候会导致出现问题,自定义的卷积模块或者池化等模块会提示类型问题。 解决的策略是: 1.进行assert i…...
linux恶意请求
nginx访问日志: 162.243.135.29 - - [05/Jan/2024:00:12:07 0800] "GET /autodiscover/autodiscover.json?zdi/Powershell HTTP/1.1" 404 153 "-" "Mozilla/5.0 zgrab/0.x"107.151.182.54 - - [04/Mar/2024:11:30:06 0800] "G…...
Java 反射笔记总结(油管)
Java系列文章目录 IDEA使用指南 Java泛型总结(快速上手详解) Java Lambda表达式总结(快速上手详解) Java Optional容器总结(快速上手图解) Java 自定义注解笔记总结(油管) Jav…...
HTML表格、表单、标签、CSS、选择器
目录 一、HTML表格 二、表单 三、布局标签 四、CSS 五、选择器 一、HTML表格 table:表格 tr:行 td:单元格;rowspan:纵向合并相邻单元格;clospan:横向合并相邻单元格 th:单元格加粗居中 border&…...
【javaWeb技术】·外卖点餐小程序(脚手架学习1·数据库)
🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀系统学javaWeb开发_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 【免费】项…...
LVS 实现四层负载均衡项目实战--DR模式
一、环境准备 主机名IP地址router eth0:172.25.254.100 eth1:192.168.0.100 clienteth0:172.25.254.200lvseth1:192.168.0.50web1web2 1、client配置 [rootclient ~]# cat /etc/NetworkManager/system-connections/eth0.nmconne…...
Python与Qt的对应版本
Python与Qt的对应版本并没有严格的一一对应关系,但通常在使用Python与Qt进行开发时,会选择一个兼容性较好的版本组合。Qt的Python绑定库主要是PyQt和PySide,以下是几个常见的搭配: 1. **PyQt5**: - Python 3.5及以上版…...
WPF篇(12)-Image图像控件+GroupBox标题容器控件
Image图像控件 Image也算是独门独户的控件,因为它是直接继承于FrameworkElement基类。 Image控件就是图像显示控件。Image类能够加载显示的图片格式有.bmp、.gif、.ico、.jpg、.png、.wdp 和 .tiff。要注意的是,加载.gif动画图片时,仅显示第…...
LeetCode 热题 HOT 100 (024/100)【宇宙最简单版】
【哈希表】No. 0128 最长连续序列【中等】👉力扣对应题目指路 希望对你有帮助呀!!💜💜 如有更好理解的思路,欢迎大家留言补充 ~ 一起加油叭 💦 欢迎关注、订阅专栏 【力扣详解】谢谢你的支持&am…...
如何在AWS上进行 环境迁移
在 AWS 上进行环境迁移通常包括以下几个步骤和最佳实践: 1. 评估和规划 评估当前环境:审查现有的应用程序、数据库、网络架构和依赖关系。确定迁移目标:明确迁移的目标(如成本节约、性能提升、可扩展性等)。选择迁移策略:根据应用程序的类型和复杂性,选择合适的迁移策略…...
云服务器和物理服务器的优缺点对比
云服务器优点在于灵活性强、成本效益高、易于扩展且支持全球化部署;缺点则包括安全性与可控性相对较弱,性能可能受限,以及存在服务中断风险。物理服务器则以其高性能、高稳定性、强安全性和完全可控性著称,但成本较高、扩展性受限…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
动态 Web 开发技术入门篇
一、HTTP 协议核心 1.1 HTTP 基础 协议全称 :HyperText Transfer Protocol(超文本传输协议) 默认端口 :HTTP 使用 80 端口,HTTPS 使用 443 端口。 请求方法 : GET :用于获取资源,…...
Android屏幕刷新率与FPS(Frames Per Second) 120hz
Android屏幕刷新率与FPS(Frames Per Second) 120hz 屏幕刷新率是屏幕每秒钟刷新显示内容的次数,单位是赫兹(Hz)。 60Hz 屏幕:每秒刷新 60 次,每次刷新间隔约 16.67ms 90Hz 屏幕:每秒刷新 90 次,…...
鸿蒙Navigation路由导航-基本使用介绍
1. Navigation介绍 Navigation组件是路由导航的根视图容器,一般作为Page页面的根容器使用,其内部默认包含了标题栏、内容区和工具栏,其中内容区默认首页显示导航内容(Navigation的子组件)或非首页显示(Nav…...
