STM32 USB协议栈源码分析
| 作者 | 将狼才鲸 |
|---|---|
| 日期 | 2025-12-10 |
-
CSDN阅读地址:STM32 USB协议栈源码分析
-
STM32 库下载网址:
https://www.st.com.cn/zh/microcontrollers-microprocessors/stm32f7x0-value-line.html#tools-software
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盘读写操作;