打印
[开发工具]

基于 STM32CubeMX 开发 U 盘访问应用

[复制链接]
757|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
micoccd|  楼主 | 2021-11-15 10:21 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
前言
一些应用中, 涉及到对存储设备的数据访问, 例如 uSD 卡、 U 盘。 具备 USB OTG 控制器的 STM32,可以实现对 U 盘
访问的支持。本文介绍 STM32 对于 U 盘访问的硬件/软件实现。 介绍如何利用 STM32CubeMX, 一步一步实现 STM32 访问
U 盘。仅需要简单的几个步骤, 实现 U 盘访问的应用开发。  

使用特权

评论回复
沙发
micoccd|  楼主 | 2021-11-15 10:22 | 只看该作者
一 MSC 类简介
MSC (Mass Storage Class) 是 USB 规范提供的一种 USB 大容量存储设备类, 允许一个 USB 接口的设备与 USB 主机相
连接, 以便在两者之间传输文件。 USB MSC 传输协议分为 CBI (Control / Bulk / Interrupt) 和 BOT (Bulk-only Transfer)。 BOT
协议在不影响功能的情况下省去了对 Interrupt 端点的需求,被存储设备广泛支持。 STM32 提供的 USB 库支持 USB MSC
BOT 协议。
MSC 设备包含很多种, 例如 U 盘、读卡器、移动硬盘等。 STM32 通过内含的 USB OTG 控制器( 支持主机模式) 和
USB 主机库, 实现对 MSC 类的支持, 进而实现对 U 盘访问的支持。 本文中不涉及到 USB MSC (Mass Storage Class) 的详
细介绍 ,更多 MSC 类介绍,请参考《USB 进阶培训_Part1_USB 类的介绍》 。

使用特权

评论回复
板凳
micoccd|  楼主 | 2021-11-15 10:22 | 只看该作者
二 MSC 在 STM32 上的实现
2.1 硬件支持
不同的 STM32 系列, 对 USB 的支持情况如下。对于 STM32F105/107、 STM32F2、 STM32F4、 STM32F7 和
STM32H7 系列, 部分型号支持 USB OTG,能够实现 USB 主机和从机。 U 盘作为 USB MSC 设备,需要 STM32 作为 USB
MSC 主机,实现两者间的访问。 (注: 系列中不是所有型号都支持 OTG,以具体型号手册为准。)

使用特权

评论回复
地板
micoccd|  楼主 | 2021-11-15 10:23 | 只看该作者
STM32 OTG 硬件电路图如下所示。 CN3 为 USB 连接器。

对于 STM32 OTG, 配置为仅主机模式时, 不需使用 OTG_ID,可将其引脚用于其他功能。 并且在不使用 SRP (Session
Request Protocol) 和 HNP (Host Negotiation Protocol) 时,可不连接 VBUS 至 PA9。 电路简化如下图。

更多关于 STM32 USB 硬件设计,请参考《AN4879 USB hardware and PCB guidelines using STM32 MCUs》。

使用特权

评论回复
5
micoccd|  楼主 | 2021-11-15 10:24 | 只看该作者
2.2 软件支持
STM32 拥有丰富的软件资源,推荐如下两个软件包:
 STM32Cube 软件包(包含 USB/OTG 库,支持 MSC 协议)
 STM32CubeMX 辅助开发工具(辅助开发自定义板上应用)
上述软件都是免费对外开发,可在意法半导体官网 www.st.com 下载。

使用特权

评论回复
6
micoccd|  楼主 | 2021-11-15 10:25 | 只看该作者
2.2 软件支持
STM32 拥有丰富的软件资源,推荐如下两个软件包:
 STM32Cube 软件包(包含 USB/OTG 库,支持 MSC 协议)
 STM32CubeMX 辅助开发工具(辅助开发自定义板上应用)
上述软件都是免费对外开发,可在意法半导体官网 www.st.com 下载。

使用特权

评论回复
7
micoccd|  楼主 | 2021-11-15 10:26 | 只看该作者
3.1 前期准备
出于遵循完全一致的实验步骤考虑, 实例基于 ST 发布的 STM32F469I-DISCO 板。除此之外,开发者也可以根据自己的
目标板的具体情况, 参考后面介绍的实例进行配置。

注 1: STM32F469I-DISCO 板的原理图、 用户手册等资源可通过链接获取。
注 2: STM32CubeF4 可以按照介绍方式获取,或者直接在官网下载,然后通过 STM32CubeMX 的本地导入软件包功能
完成导入。

使用特权

评论回复
8
micoccd|  楼主 | 2021-11-15 10:31 | 只看该作者
3.2 应用实现
3.2.1 开发流程
结合 STM32CubeMX 的软件开发流程如下图。

使用特权

评论回复
9
micoccd|  楼主 | 2021-11-15 10:32 | 只看该作者
3.2.2 开发步骤详解
接下来一步一步呈现实现过程。
1. 打开 STM32CubeMX,点击 File\New Project,选择 STM32F469NI( STM32F469I-DISCO 上微控制器型号)。
2. 外设和中间件的选择。 首先结合 STM32F469I-DISCO 板的原理图,了解功能实现必备的接口的使用情况,如下表所
示。

注1. 在不考虑 SRP 和 HNP 时,访问 U 盘,只需要 STM32 的 USB OTG 的 USB 数据正负线即可。
根据硬件情况, 选择调试接口、 外部时钟、 USB OTG FS 和 USB 中间件,如下图所示。

在引脚分布图, PB2 引脚上单击鼠标左键,选择 ‘GPIO_Output’ ,如下图所示。

使用特权

评论回复
10
micoccd|  楼主 | 2021-11-15 10:32 | 只看该作者
3. 配置时钟, 使 USB 时钟为 48MHz, 如下图。 其中,步骤 2 中外部高速晶振值要和硬件上匹配。 由于 USB 时钟精度
要求高, STM32F469 内部时钟无法达到要求,必须选用外部高速时钟,如步骤 3 所示。 对于 HCLK( 处理器时钟,
步骤 6 配置) , 根据性能需要进行设置,或者简单的设置为最大值。

使用特权

评论回复
11
micoccd|  楼主 | 2021-11-15 10:33 | 只看该作者
4. USB 和关联的引脚配置。主要对 VBUS 使能引脚进行配置及关联。
在 USB_HOST 界面,配置 Drive_VBUS_FS 关联引脚为 PB2(与硬件连接对应) 。 VBUS 电源开关器件为
STMPS2151STR,高电平使能。 所以配置如下,在初始化后为低电平(图中步骤 7~10) 。其他保持默认。

使用特权

评论回复
12
micoccd|  楼主 | 2021-11-15 10:34 | 只看该作者
5. 设置工程,如下图所示(点击菜单栏\Project\Settings 打开) 。 选择对应的 IDE 和希望基于的 STM32Cube 软件包位
置。实例简单,堆栈占用小,堆栈配置保持默认即可。 除 EWARM 外, STM32CubeMX 还支持 MDK-ARM、
TrueStudio、 SW4STM32 等。

使用特权

评论回复
13
micoccd|  楼主 | 2021-11-15 10:35 | 只看该作者
6. 点击菜单栏\Project\Generate Code 生成工程。
工程生成后,会出现提示框,点击 ‘Open Project’打开工程。 工程架构和文件结构如下图(右侧为 USB 主机应用
架构)。生成工程包含全部层的实现,开发者在生成工程的基础上,可直接调用写读等 API,实现对 U 盘的访问。

注: USB 主机库和各文件功能介绍,请参考《UM1720 STM32Cube USB host library》 。

使用特权

评论回复
14
micoccd|  楼主 | 2021-11-15 10:36 | 只看该作者
7. 添加 U 盘访问实现。
STM32CubeMX 生成的工程,调用 STM32Cube USB 主机库。在库中, 软核将 USB 事件传输至用户层,并执行回
调用户函数。方便在用户层的回调函数中添加应用实现。 用户回调事件如下表。

USB 软核状态机如下图所示。

使用特权

评论回复
15
micoccd|  楼主 | 2021-11-15 10:37 | 只看该作者
在 HOST_CLASS 状态中,软核会通知应用类初始化完成。 对 U 盘的访问,应放置在应用层接收到类初始化完成事
件后,即 HOST_USER_CLASS_ACTIVE 事件后, 否则无法正常工作。
在工程中添加/修改对 U 盘的写读访问操作和相关源码,如下表所示。




注1. 省略号为了表示还有其他没有改动部分的源码,不用添加进源码中。展现的源码为了更好的表现出对应工程中位
置,包含一些生成工程时原有的源码。
注2. MX_DriverVbusFS()中,需要根据实际情况进行配置。实验板上采用的电源开关 STMPS2151STR 高电平有效。 在
一些系列 STM32 的生成工程中, MX_DriverVbusFS 函数原型已经生成,此时无需再添加这个函数的声明,但要确
认函数中引脚设置对应关系(形参为 1 时表示要激活) 。
8. 编译生成的应用固件。
利用 IDE 进行编译、链接、下载到目标板,实现 U 盘信息获取和读写操作。

使用特权

评论回复
16
micoccd|  楼主 | 2021-11-15 10:38 | 只看该作者
四 测试&验证
连接 U 盘至 STM32F469I-DISCO 板的 USB_User 连接口。 IAR 进入在线调试模式, 利用在线调试,查看获取到的 U 盘
信息和写读缓存中的数据情况。
运行完毕后, 连接 U 盘至 PC, 利用 PC 上安装的 Active@ Disk Editor( 外部链接) 查看 U 盘对应扇区数据( 10 扇区对
应起始位置为 5120) ,从而验证 U 盘信息获取和写读功能正常。 如下图所示。

使用特权

评论回复
17
micoccd|  楼主 | 2021-11-15 10:38 | 只看该作者
五 小结
STM32CubeMX 加速了 STM32 的开发过程。即使类似 USB 这种复杂的外设使用,也可以如上述实现例,只需要几个步
骤即可以实现 USB 应用。 并且提供了除 MSC 类之外, HID、 UAC、 CDC 等类支持。

使用特权

评论回复
18
tfqi| | 2021-12-9 18:55 | 只看该作者
在硬件上需要注意什么呢

使用特权

评论回复
19
wiba| | 2021-12-9 18:57 | 只看该作者
usb真的很难调试

使用特权

评论回复
20
zljiu| | 2021-12-9 19:01 | 只看该作者
非常容易出状况

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

93

主题

576

帖子

1

粉丝