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. 评估和规划 评估当前环境:审查现有的应用程序、数据库、网络架构和依赖关系。确定迁移目标:明确迁移的目标(如成本节约、性能提升、可扩展性等)。选择迁移策略:根据应用程序的类型和复杂性,选择合适的迁移策略…...
云服务器和物理服务器的优缺点对比
云服务器优点在于灵活性强、成本效益高、易于扩展且支持全球化部署;缺点则包括安全性与可控性相对较弱,性能可能受限,以及存在服务中断风险。物理服务器则以其高性能、高稳定性、强安全性和完全可控性著称,但成本较高、扩展性受限…...
你的热电偶读数总跳?可能是50/60Hz工频干扰!STM32驱动MAX31856的滤波配置避坑指南
热电偶读数跳变?50/60Hz工频干扰的精准诊断与MAX31856滤波实战 工业现场的温度测量工程师们,是否经常遇到这样的困扰:明明硬件连接正确,STM32与MAX31856的驱动代码也按手册编写,但热电偶读数却像心电图一样上下跳动&am…...
gte-base-zh模型Java集成开发指南:SpringBoot构建语义搜索服务
gte-base-zh模型Java集成开发指南:SpringBoot构建语义搜索服务 你是不是也遇到过这样的问题?公司内部有海量的文档、产品说明或者用户反馈,想快速找到相关内容,用关键词搜索总是不准,要么搜不全,要么搜出一…...
墨语灵犀赋能在线教育:AI助教自动批改编程作业实践
墨语灵犀赋能在线教育:AI助教自动批改编程作业实践 每次上完《Python入门》课,看着邮箱里堆积如山的作业压缩包,你是不是也感到一阵头疼?打开一份作业,从代码缩进看到变量命名,再从逻辑结构分析到运行结果…...
YOLO-v8.3镜像5分钟快速部署:告别手动配置,一键开启目标检测
YOLO-v8.3镜像5分钟快速部署:告别手动配置,一键开启目标检测 如果你正在寻找一个快速部署YOLOv8目标检测模型的方法,那么这篇文章就是为你准备的。传统的手动部署方式需要花费数小时配置环境、安装依赖和调试问题,而使用YOLO-v8.…...
PX41.13.3版本常用参数
1.预解锁参数COM_PREARM_MODE 默认值 Disabled2. TAKE OFF起飞模式,规定时间内是否起飞成功COM_LKDOWN_TKO 默认值3s3.飞控与机载电脑通信,信号丢失时间判断以及动作COM_OBC_LOSS_L 默认值5sCOM_OBC_ACT 默认值 降落模式COM_OBC_RC_ACT 默认值 定点模…...
保姆级避坑指南:在Ubuntu 22.04上搞定Hi3516CV610 SDK环境(附完整依赖包清单)
保姆级避坑指南:在Ubuntu 22.04上搞定Hi3516CV610 SDK环境(附完整依赖包清单) 第一次接触海思Hi3516CV610开发板的开发者,往往会在搭建SDK环境时踩不少坑。Ubuntu 22.04作为较新的LTS版本,与海思官方推荐的开发环境存在…...
STM32驱动MMA7361加速度传感器工程实践
1. MMA7361加速度传感器驱动库技术解析:面向STM32 Nucleo-F401RE平台的工程化实现1.1 项目定位与工程价值MMA7361是一款由Freescale(现NXP)推出的低成本、低功耗、三轴模拟输出加速度传感器,广泛应用于姿态检测、振动监测、跌落保…...
第1篇 | AUTOSAR方法论解码:从整车功能到ECU落地的工程哲学
在汽车智能化浪潮中,一个深刻的悖论正困扰着无数工程师:为什么标准化架构明明承诺了“一次开发、多处复用”,现实却是每个项目都在重复造轮子?答案或许藏在AUTOSAR方法论的核心逻辑里。 AUTOSAR方法论的本质,是将整车软…...
打工人必备!8个AI办公神器,每天准时下班不是梦
文档处理工具Notion AI 集成在Notion中的AI功能,支持自动生成文档大纲、会议纪要整理、多语言翻译。通过自然语言输入需求,快速输出结构化内容,适合项目管理与知识库搭建。ChatPDF 上传PDF文件后可直接对话式提问,提取关键信息或总…...
.NET 9边缘测试黄金标准(微软内部CI/CD流水线首次公开):含12项必验指标与3种硬件故障注入模板
第一章:.NET 9边缘部署测试的演进与战略定位.NET 9标志着微软在云边协同架构上的关键跃迁——其原生支持AOT编译、精简运行时(Microsoft.NETCore.App.Runtime.Minimal)及轻量级容器镜像,为边缘场景下的确定性启动、低内存占用与快…...
