STM32 USB协议栈源码分析

STM32 USB协议栈源码分析

作者 将狼才鲸
日期 2025-12-10

复制代码
USB硬件寄存器读写,并提供供USB协议栈操作的API接口:
	STM32 USB硬件模块,STM32Cube_FW_F7_V1.17.0_01\Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_usb.c
			core复位、高速PHY初始化、core初始化、设置设备速度、激活端点、端点开始传输、读写包、挂起、
			停止设备、设备连接、断开连接、读中断、清中断、激活令牌、复位端口、获取速度、获取当前帧、
			数据块切换、停止host、激活远端唤醒等;
	ue11 USB硬件模块:嵌入式:[mirrors_ultraembedded/cores](https://gitee.com/mirrors_ultraembedded/cores)
			初始化、复位、hub复位、hub设备检测、hub全速设备、hub使能、传输OUT包、传输IN包、定时器延时、当前时间、时间差;
			控制器初始化、复位设备、配置设备、枚举、找端点、清除挂起状态、发送读控制、发送写控制、批量传输写、
			批量传输读、等时传输;
	ue11 USB硬件模块:Linux:[mirrors_ultraembedded/cores](https://gitee.com/mirrors_ultraembedded/cores)
			开始、停止、CTRL(清除hub特性、设置hub特性、清除端点特性(端口使能、端口挂起、端口上电、端口复位)、hub描述符、
			hub状态、端口状态、端口特性(挂起、上电、复位))、设备检测定时器回调、hub描述符、hub状态、获取帧、
			失能端点、urb_dequeue、urb_enqueue、balance、中断处理、发送处理结果、完成请求、开始传输、开启中断、关闭中断、
			OUT包、IN包、状态包、令牌包、端口电源、hub使能、hub复位
STM32 USB协议栈:
	分为硬件HAL库、USB设备库、USB主机库、文件系统库;
	STM32Cube_FW_F7_V1.17.0\Middlewares\ST\STM32_USB_Host_Library\Core\Inc/Src  主机端USB协议栈核心代码
		usbh_conf_template.h  公用接口:打印输出级别控制、内存操作、默认配置(缓存大小、端点数等)。
			只是一个示例模板,最终以Projects\STM32756G_EVAL\Applications\FatFs\FatFs_USBDisk Keil工程里的usbh_conf.c为准!
		usbh_core.h  包含core文件夹里其它文件;应用层协议,协议栈主API:初始化、销毁、注册类、选择接口、
			寻找接口、获取激活的类、找到接口索引、判断端口使能、开始、停止、轮询、重新枚举;
			硬件寄存器相关API:初始化、销毁、开始、停止、连接、断开、获取速度类型、复位端口、获取下一个传输尺寸、
			驱动VBUS、打开管道、关闭管道、提交URB USB请求块、获取USB请求块状态、通知USB请求块改变、设置数据切换、
			获取数据切换、端口失能、端口使能、设置定时器、增加定时器、延时
		usbh_ctlreq.h  控制传输中的枚举、配置与控制:设备识别、配置、HID设备的报告请求、通用命令;
			控制请求,获取描述符,获取设备描述,获取字符串描述,设置配置,获取配置描述符,设置地址,
			设置接口,激活设备特定功能,控制设备特定功能,获取下个描述符
		usbh_def.h  基础宏操作:真假最大最小等;USB协议栈结构体与命令值;
		usbh_ioreq.h  功能:控制传输(发送令牌包,收发包)、批量传输(收发包)、中断传输(收发包)、等时传输(收发包)
		usbh_pipes.h  打开关闭申请释放管道;管道是USB主机与设备端点之间进行数据传输的逻辑通道模型。‌
	STM32Cube_FW_F7_V1.17.0_01\Middlewares\ST\STM32_USB_Host_Library\Class\MSC\Inc/Src
		usbh_msc.h  如果是接入U盘设备,则使用此文件夹内文件;USB大容量存储设备准备好、获取逻辑盘数量、单元准备好、
			获取逻辑盘信息、读、写,命令值,协议结构体;
	STM32Cube_FW_F7_V1.17.0_01\Middlewares\Third_Party\FatFs\src\drivers
		usbh_diskio_template.h、usbh_diskio_dma_template.h  只是一个模板,会用到usbh_core.h、usbh_msc.h
			具体实现在STM32Cube_FW_F7_V1.17.0_01\Projects\STM32756G_EVAL\Applications\FatFs\FatFs_USBDisk的Keil工程里面
	STM32Cube_FW_F7_V1.17.0\Projects\STM32756G_EVAL\Applications\FatFs\FatFs_USBDisk\Inc/Src  主机端USB协议栈USB模块硬件寄存器相关代码
		usbh_conf.h  公用接口:打印输出级别控制、内存操作、默认配置(缓存大小、端点数等);会被USB协议栈core里面调用
		usbh_diskio.h  让文件系统包含USB协议栈的头文件,注册文件系统中初始化、获取状态、读、写、ioctl的操作
		main.c  通过USB协议栈USBH_MSC_xx接口实现供文件系统使用的读写控制等接口,并注册进文件系统,
			调用USB协议栈接口初始化USB硬件,注册设备插拔时的回调函数,注册设备类型,开始运行,等待设备连接,
			连接成功后主动进行U盘读写操作;
相关推荐
曜华激光3 小时前
光伏电池串性能测试仪检测精度极高
单片机·嵌入式硬件
电化学仪器白超3 小时前
20251209Ver8(精密电流源温漂特性测试报告)
python·单片机·嵌入式硬件·自动化
炸膛坦客3 小时前
Cortex-M3-STM32F1 开发:(三十六)APB1 和 APB2 总线的内部构成
stm32·单片机·嵌入式硬件
创思通信4 小时前
STM32F103C8T6采 DS18B20,通过A7680C 4G模块不断发送短信到手机
javascript·stm32·智能手机
钿驰科技4 小时前
TC - BL2840 三相有感直流无刷电机驱动板
单片机·嵌入式硬件
小刘爱玩单片机4 小时前
【stm32简单外设篇】- LCD1602A
c语言·stm32·单片机·嵌入式硬件
意法半导体STM324 小时前
【官方原创】在H563上使用RTX5 RTOS LAT1584
stm32·单片机·嵌入式硬件·mcu
d111111111d5 小时前
STM32 I2C通信详解:从机地址与寄存器地址的作用
笔记·stm32·单片机·嵌入式硬件·学习
普中科技5 小时前
【普中51单片机开发攻略--基于普中-2&普中-3&普中-4】-- 第 14 章 矩阵按键实验
单片机·嵌入式硬件·51单片机·开发板·按键检测·矩阵按键·普中科技
大聪明-PLUS5 小时前
使用 Shell 脚本生成配置文件的 6 种方法
linux·嵌入式·arm·smarc