0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32对于U盘访问的硬件/软件实现

STM32单片机 来源:YXQ 2019-06-04 09:38 次阅读

一些应用中,涉及到对存储设备的数据访问,例如USD卡、U盘。具备USB OTG控制器STM32,可以实现对U盘访问的支持。本文介绍STM32对于U盘访问的硬件/软件实现。介绍如何利用STM32CubeMX,一步一步实现STM32访问U盘。仅需简单的几个步骤, 实现U盘访问的应用开发。

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类的介绍》。

01

硬件支持

不同的STM32系列,对USB的支持情况如下。对于STM32F105/107、STM32F2、STM32F4、STM32F7和STM32H7系列,部分型号支持USB OTG,能够实现USB 主机和从机。U盘作为USB MSC设备,需要STM32作为USB MSC主机,实现两者间的访问。(注:系列中不是所有型号都支持OTG,以具体型号手册为准。)

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》。

02

软件支持

STM32拥有丰富的软件资源,推荐如下两个软件包:

STM32Cube软件包(包含USB/OTG库,支持MSC协议)

STM32CubeMX辅助开发工具(辅助开发自定义板上应用)

上述软件都是免费对外开发,可在意法半导体官网www.st.com下载

U盘访问实现例

一步一步呈现访问U盘的STM32开发过程,实现对U盘的读写等操作。在下面的详解步骤中,会介绍一些主机库和应用机制的内容。如果希望快速开发,可以直接按照步骤开发,略过讲解性的内容。

01

前期准备

出于遵循完全一致的实验步骤考虑,实例基于ST发布的STM32F469I-DISCO板。除此之外,开发者也可以根据自己的目标板的具体情况,参考后面介绍的实例进行配置。

STM32板

USB线

2 * USB线

Type A ←→ Mini B

Type A ←→ Micro B

STM32CubeMX

Cube软件包

STM32CubeF4(1)

说明:在安装STM32CubeMX后,在其“菜单栏\Help\Install New Libraries”中安装STM32CubeF4.

本文实现例中采用的是V1.21.0

IDE

IAR (EWARM)

除IAR外,CubeMX还支持MDK、TrueStudio和SW4STM32等。

文本实现例中采用IAR v8.30.1

注1:STM32F469I-DISCO板的原理图、用户手册等资源可通过链接获取。

注2:STM32CubeF4可以按照介绍方式获取,或者直接在官网下载,然后通过STM32CubeMX从本地导入软件包功能完成导入。

02

应用实现

一、开发流程

结合STM32CubeMX的软件开发流程如下图。

二、开发步骤详解

接下来一步一步呈现实现过程。

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’,如下图所示。

3. 配置时钟,使USB时钟为48MHz,如下图。其中,步骤2中外部高速晶振值要和硬件上匹配。由于USB时钟精度要求高,STM32F469内部时钟无法达到要求,必须选用外部高速时钟,如步骤3所示。对于HCLK(处理器时钟,步骤6配置),根据性能需要进行设置,或者简单的设置为最大值。

4. USB和关联的引脚配置。主要对VBUS使能引脚进行配置及关联。

在USB_HOST界面,配置Drive_VBUS_FS关联引脚为PB2(与硬件连接对应)。VBUS电源开关器件为STMPS2151STR,高电平使能。所以配置如下,在初始化后为低电平(图中步骤7~10)。其他保持默认。

5.设置工程,如下图所示(点击菜单栏\Project\Settings打开)。选择对应的IDE和希望基于的STM32Cube软件包位置。实例简单,堆栈占用小,堆栈配置保持默认即可。除EWARM外,STM32CubeMX还支持MDK-ARM、TrueStudio、SW4STM32等。

6. 点击菜单栏\Project\Generate Code生成工程。

工程生成后,会出现提示框,点击"Open Project"打开工程。工程架构和文件结构如下图(右侧为USB主机应用架构)。生成工程包含全部层的实现,开发者在生成工程的基础上,可直接调用写读等API,实现对U盘的访问。

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

7. 添加U盘访问实现。

STM32CubeMX生成的工程,调用STM32Cube USB主机库。在库中,软核将USB事件传输至用户层,并执行回调用户函数。方便在用户层的回调函数中添加应用实现。用户回调事件如下表。

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

在HOST_CLASS状态中,软核会通知应用类初始化完成。对U盘的访问,应放置在应用层接收到类初始化完成事件后,即HOST_USER_CLASS_ACTIVE事件后,否则无法正常工作。

在工程中添加/修改对U盘的写读访问操作和相关源码,如下表所示。

注1:省略号为了表示还有其他没有改动部分的源码,不用添加进源码中。展现的源码为了更好的表现出对应工程中位置,包含一些生成工程时原有的源码。

注2:MX_DriverVbusFS()中,需要根据实际情况进行配置。实验板上采用的电源开关STMPS2151STR高电平有效。在一些系列STM32的生成工程中,MX_DriverVbusFS函数原型已经生成,此时无需再添加这个函数的声明,但要确认函数中引脚设置对应关系(形参为1时表示要激活)。

8.编译生成的应用固件。

利用IDE进行编译、链接、下载到目标板,实现U盘信息获取和读写操作。

检验验证

连接U盘至STM32F469I-DISCO板的USB_User连接口。IAR进入在线调试模式,利用在线调试,查看获取到的U盘信息和写读缓存中的数据情况。

运行完毕后,连接U盘至PC,利用PC上安装的Active@ Disk Editor(外部链接)查看U盘对应扇区数据(10扇区对应起始位置为5120),从而验证U盘信息获取和写读功能正常。如下图所示。

总结

STM32CubeMX加速了STM32的开发过程。即使类似USB这种复杂的外设使用,也可以如上述实例,只需要几个步骤即可以实现USB应用。并且提供了除MSC类之外,HID、UAC、CDC等类支持。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • msc
    msc
    +关注

    关注

    0

    文章

    29

    浏览量

    20103
  • STM32
    +关注

    关注

    2265

    文章

    10859

    浏览量

    354546

原文标题:技术笔记 | 基于STM32CubeMX开发U盘访问应用

文章出处:【微信号:STM32_STM8_MCU,微信公众号:STM32单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何在STM32实现USB主机读写U文件

    在项目应用中,经常会有对外交换数据的需求。USB接口读写U无疑是一种颇为方便的选择。在这一篇中,我们就来讨论如何在STM32实现USB主机读写U
    的头像 发表于 12-13 17:20 1.4w次阅读
    如何在<b class='flag-5'>STM32</b>上<b class='flag-5'>实现</b>USB主机读写<b class='flag-5'>U</b><b class='flag-5'>盘</b>文件

    使用STM32CubeMx生成USB HOST及fatfs,实现STM32F105RC访问U的功能,无法枚举设备的原因?

    使用STM32 CubeMx生成USB HOST及fatfs代码框架,实现STM32F105RC访问U
    发表于 04-09 07:55

    怎么基于STM32实现U访问

    一些应用中,涉及到对存储设备的数据访问,例如USD卡、U。具备USB OTG控制器的STM32,可以实现
    发表于 08-08 06:25

    STM32 FLASH实现U

    STM32 FLASH实现U
    发表于 05-20 10:08

    如何使用u*** host实现U的读写

    U是一个很常用的存储设备,它是通过u***实现数据传输的,那么在stm32上面,我们要怎么接入U
    发表于 02-22 06:22

    金士顿u低格软件 工具下载

    金士顿u低格软件 工具下载, 请到下面下载相对应型号的工具:
    发表于 01-02 20:29 21次下载

    U伴侣 EasyUDisk读写U模块

    在嵌入式的电子产品中实现U文件的读写,在软件设计上成了许多厂家技术攻关的难题,U伴侣Easy
    发表于 11-04 12:01 74次下载

    STM32-comStick U版开发平台(ST)

    STM32-comStick U版开发平台(ST) 意法半导体(ST)发布一款U版的开发平台STM
    发表于 11-02 09:11 1252次阅读

    STM32的文件系统程序+SD卡虚拟U设计

    STM32的文件系统程序,以及SD卡虚拟U设计
    发表于 12-10 16:34 54次下载

    台电U加密软件免费下载

    本文档的主要内容详细介绍的是台电U加密软件免费下载。
    发表于 01-02 08:00 12次下载
    台电<b class='flag-5'>U</b><b class='flag-5'>盘</b>加密<b class='flag-5'>软件</b>免费下载

    当年的硬件与今天的U

    当年的硬件,今天的U
    的头像 发表于 01-13 16:02 2319次阅读

    STM32&SD卡实现USB虚拟U

    下载源码请关注公众号之前的文章中介绍过STM32读写SD卡和FatFS文件系统相关的知识。今天将在这基础上介绍STM32通过USB口虚拟U的知识。即插入USB接口后,电脑将SD卡识别
    发表于 12-28 19:54 43次下载
    <b class='flag-5'>STM32</b>&SD卡<b class='flag-5'>实现</b>USB虚拟<b class='flag-5'>U</b><b class='flag-5'>盘</b>

    STM32CubeMX | STM32基于HAL实现USB模拟U

    STM32CubeMX | STM32基于HAL实现USB模拟U目录STM32CubeMX |
    发表于 12-28 20:04 40次下载
    <b class='flag-5'>STM32</b>CubeMX | <b class='flag-5'>STM32</b>基于HAL<b class='flag-5'>实现</b>USB模拟<b class='flag-5'>U</b><b class='flag-5'>盘</b>

    探秘STM32U5安全特性|硬件加解密引擎与软件算法对比

    探秘STM32U5安全特性|硬件加解密引擎与软件算法对比
    的头像 发表于 10-27 10:23 1633次阅读
    探秘<b class='flag-5'>STM32U</b>5安全特性|<b class='flag-5'>硬件</b>加解密引擎与<b class='flag-5'>软件</b>算法对比

    基于STM32CubeMX开发U访问应用

    电子发烧友网站提供《基于STM32CubeMX开发U访问应用.pdf》资料免费下载
    发表于 09-25 09:19 3次下载
    基于<b class='flag-5'>STM32</b>CubeMX开发<b class='flag-5'>U</b><b class='flag-5'>盘</b><b class='flag-5'>访问</b>应用