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通用特性

  1. 符合USB标准:经USB-IF认证,符合通用串行总线规范第2.0版。
  2. OTG协议支持:集成全速PHY,并完全支持定义在标准规范OTG补充第1.3版中的OTG协议。
  3. A-B器件识别:支持通过ID线识别USB设备的A端(主机)或B端(设备)。
  4. 协议支持:支持主机协商协议(HNP)和会话请求协议(SRP),允许设备在没有主机的情况下进行数据传输。
  5. 电源管理:允许主机关闭VBUS以在OTG应用中节省电池电量,并支持通过内部比较器对VBUS电平进行监控。
  6. 角色动态切换:支持主机到从机的角色动态切换,可通过软件配置为不同的角色,如具有SRP功能的USB FS从机(B器件)、具有SRP功能的USB FS/LS主机(A器件)或USB On-The-Go全速双角色设备。
  7. 帧和令牌支持:支持FS SOF(帧开始令牌)和LS Keep-alive令牌,SOF脉冲可通过PAD输出,也可从内部连接到定时器(如TIM2)。
  8. 省电功能:在USB挂起期间能够停止系统、关闭数字模块时钟,并对PHY和DFIFO电源进行管理。
  9. 高级FIFO控制:具有1.25 KB的专用RAM,采用高级FIFO控制,支持灵活有效的RAM使用,如动态分配存储区、FIFO大小可配置为非2的幂次方值等。

3.2主机模式特性

  1. VBUS电压生成:通过外部电荷泵生成VBUS电压。
  2. 多通道支持:多达8个主机通道(管道),每个通道都可以动态实现重新配置,支持任何类型的USB传输。
  3. 硬件调度器:内置硬件调度器,可在周期性硬件队列中存储多达8个中断加同步传输请求,在非周期性硬件队列中存储多达8个控制加批量传输请求。
  4. FIFO管理:管理一个共享RX FIFO、一个周期性TX FIFO和一个非周期性TX FIFO,以有效使用USB数据RAM。

3.3从机模式特性

  1. 端点配置:具有1个双向控制端点0,3个IN端点(EP),可配置为支持批量传输、中断传输或同步传输,以及3个OUT端点(EP),同样可配置为支持这些传输类型。
  2. 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,以支持多个磁盘

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/397017.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LVS负载均衡集群部署之—NAT模式的介绍及搭建步骤

一、环境准备 1.准备三台rhel9服务器 服务器名称 主机名 ip地址备注LVS调度服务器lvs.timinglee.org eth0:172.25.254.100(外网) eth1:192.168.0.100(内网) 关闭selinux和防火墙webserver2网站服务器webserver1.timinglee.orgeth0:192.168.…

一行实现88个群智能算法优化混合核极限学习机HKELM的多特征输入单输出的数据回归预测Matlab程序全家桶

一行实现88个群智能算法优化混合核极限学习机HKELM的多特征输入单输出的数据回归预测Matlab程序全家桶 文章目录 前言一行实现88个群智能算法优化混合核极限学习机HKELM的多特征输入单输出的数据回归预测Matlab程序全家桶 一、HKELM模型1. 极限学习机(ELM&#xff0…

【exgcd 扩展欧几里得算法】[ABC340F] S = 1 题解

题意 给定 ( X , Y ) (X,Y) (X,Y),其中 X , Y X,Y X,Y 为整数。求整数 A , B A,B A,B 使得由 ( 0 , 0 ) , ( X , Y ) , ( A , B ) (0,0),(X,Y),(A,B) (0,0),(X,Y),(A,B) 三个点构成的三角形面积为 1 1 1。 思路 将 ( X , Y ) , ( A , B ) (X,Y),(A,B) (X,Y)…

DC-3靶机打靶练习!!!!

先开始还是老样子我的思路: 外网渗透 信息收集 我们在发现了靶机的ip以及靶机开放了80端口,然后收集到了cms 然后去访问页面发现了是有登录口的,win10虚拟机进行后台目录扫描,主机进行弱口令爆破,kali在使用msf模块进…

Basic‘ attribute type should not be a container解决方法

在使用Spring Data JPA的时候,实体类中定义一个用List修饰的成员ip,IDEA会提示Basic‘ attribute type should not be a container错误,导致编译不通过。 查阅一些博客和文档说是Spring Data JPA这个框架会把实体类的属性当做是MySQL数据库中…

sql实战

这里写自定义目录标题 sql实战cmseasy daiqile全局污染 RCE限制16字符传入参数限制传入字符7个限制35字符,并过滤所有英文数字 sql实战 cmseasy 1、/lib/admin/admin.php和/lib/admin/tool/front_class.php源代码中发现,可以伪造IP并且传入ishtml1&…

操作符详解(内含二进制与原、反、补码知识点)--还有超详细图解!一看就会!

前言 今天给大家分享一下C语言操作符的详解,但在此之前先铺垫一下二进制和进制转换与原码、反码、补码的知识点,都有详细的图解,也希望这篇文章能对大家有所帮助,大家多多支持呀! 目录 前言 一、二进制和进制转换 1…

虚拟dom-Diff算法

虚拟dom-Diff算法 vue2 diff算法在vue2中就是patch,通过新旧虚拟dom对比,找到最小变化然后进行dom操作 在页面首次渲染的时候会调用一次patch并创建新的vnode,不会进行深层次的比较,然后再组件中数据发生变化的时候,…

QT事件。

目录 事件 鼠标事件 mousePressEvnet mouseMoveEvent 事件过滤 定时器事件 事件 事件分配机制:当某个事件(鼠标、键盘)发生的时候,窗口就会收到这个事件,并且调用相应的事件处理函数,事件处理函数的命名都是以Event结尾的&…

总线学习6--I2C(EEPROM)

鉴于I2C的项目还是很多,所以又多做了一个试验。 1 环境说明 主控还是树莓派Pico。eeprom用的是之前买的AT24C02。 软件环境还是老朋友micropython。 接线是这样接的。 24C02 PinPico PinVCC3.3VGNDGNDSDAGP16SCLGP17 2 代码 代码如下: from machine …

[Python学习日记-5] Python中的注释

[Python学习日记-5] Python中的注释 简介 注释的示例和使用说明 代码注释原则 简介 随着学习的深入。用不了多久,你就可以写上千甚至上万行的复杂代码啦,有些代码你花了很久写出来,但过了些天再回去看,发现竟然看不懂了&#x…

【wsl】wsl + vscode 中使用 typora 打开 markdown 文件

vscode 连接好wsl 使用Open in External App 一个五星好评的插件Open in External App则可以在vscode中用typora打开md文件,不仅如此,还有设定其他应用打开相应的文件,比如chrome打开html。插件食用方法也比较简单,安装后&#…

Linux 软件编程学习第十一天

1.管道: 进程间通信最简单的形式 2.信号: 内核层和用户层通信的一种方式 1.信号类型: 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 1…

gitea docker 快捷安装部署

前言 在前一篇博文(什么是 Gitea?)中,我们详细介绍了gitea的功能特性,以及其与其它git服务器之间的特性多维度对比。 在本文中,我们将详细介绍gitea的快捷安装部署,docker方式! 1…

Linux磁盘管理与文件系统(二):实用工具和命令、fdisk分区示例

文章目录 4、查看或管理磁盘分区-fdisk格式选项示例 4、示例:使用 fdisk 命令创建分区需求操作步骤 5、创建文件系统-mkfs格式常用选项示例创建其他类型的文件系统 6、创建文件系统-mkswap格式常用选项示例拓展:关闭和启用交换分区拓展:swap分…

Visual Studio Code搭建VUE开发环境

Vue.js 是一款易学易用,性能出色,适用场景丰富的 Web 前端框架。它基于标准 HTML、CSS 和 JavaScript 构建,提供容易上手的 API 和一流的文档。可以用来开启PC网页、移动端网页页面、小程序等等 实验环境 VS Code 1.88.1Node 20.16.0Vue3.2…

趋动科技联合超聚变,让超融合彻底释放算力潜能

近日,趋动科技联合超聚变推出基于FusionOne HCI超融合的AI算力资源池化解决方案。该方案基于业内领先的AI算力资源池化技术,实现智能调度、异构算力融合管理等功能,让客户能够低成本获取AI算力,便捷使用AI算力,加速AI业…

AI学习记录 - transformer的Embedding层

创作不易,免费的赞 前面有介绍了GPT2如何进行token化的过程,现在讲下transformer的Embedding层 Embedding层就是一个巨大的矩阵,边长分别是词汇表长度和词向量维度,矩阵里面的每一个数字都是一个随机初始化的,或者是…

TinyWebserver的复现与改进(1):服务器环境的搭建与测试

计划开一个新坑, 主要是复现qinguoyi/TinyWebServer项目,并且使用其它模块提升性能。 本文开发服务器配置:腾讯云轻量级服务器,CPU - 2核 内存 - 2GB,操作系统 Ubuntu Server 18.04.1 LTS 64bit 打开端口 需要打开服务器3306、80…

常见硬件工程师面试题(四)

大家好,我是山羊君Goat。 对于硬件工程师,学习的东西主要和电路硬件相关,所以在硬件工程师的面试中,对于经验是十分看重的,像PCB设计,电路设计原理,模拟电路,数字电路等等相关的知识…