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

发布者:SereneMeadow最新更新时间:2023-08-09 关键字:STM32  硬件  软件实现 手机看文章 扫描二维码
随时随地手机看文章

一些应用中,涉及到对存储设备的数据访问,例如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后,在其“菜单栏HelpInstall 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,点击FileNew 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.设置工程,如下图所示(点击菜单栏ProjectSettings打开)。选择对应的IDE和希望基于的STM32Cube软件包位置。实例简单,堆栈占用小,堆栈配置保持默认即可。除EWARM外,STM32CubeMX还支持MDK-ARM、TrueStudio、SW4STM32等。

6. 点击菜单栏ProjectGenerate 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等类支持。

关键字:STM32  硬件  软件实现 引用地址:STM32对于U盘访问的硬件/软件实现

上一篇:STM32H7的启动过程分析
下一篇:入门有必要选择STM32Cube HAL库开发吗?

推荐阅读最新更新时间:2024-11-17 01:54

stm32专题二十四:ADC简介
ADC简介: ADC :Analog to Digital,模拟数字转换器 三个独立的ADC 1 / 2 / 3; 分辨率为12位; 每个ADC具有18个通道,其中外部通道16个; ADC结构框图,主要分成7个部分: 电压输入范围、输入通道、转换顺序、触发源、转换时间、数据寄存器、中断。 (1)输入电压范围: ADC 输入范围为:VREF- ≤ VIN ≤ VREF+。由VREF-、VREF+ 、VDDA 、VSSA、这四个外部引脚决定。 在设计原理图的时候一般把VSSA 和VREF-接地,把VREF+和VDDA 接3V3,得到ADC 的输入电压范围为:0~3.3V。 如输入电压超过3.3v,如希望测量
[单片机]
<font color='red'>stm32</font>专题二十四:ADC简介
STM32的can现场总线的特点及工作流程分析
最近在搞stm32实验板的can现场总线实验,之前只是搞过STC51的串口通信,相比之下,发觉can总线都挺复杂的。开始时,知道自己是新手,只知道can总线跟串行通信,485通信,I2C通信一样都是用来传输数据通信的,对其工作原理一窍不通,还是从基础开始看书看资料,先了解它的基本原理吧。 原来can总线有以下特点: 主要特点 支持CAN协议2.0A和2.0B主动模式 波特率最高可达1兆位/秒 支持时间触发通信功能 发送 3个发送邮箱 发送报文的优先级特性可软件配置 记录发送SOF时刻的时间戳 接收 3级深度的2个接收FIFO 14个位宽可变的过滤器组-由整个CAN共享 标识符列表 FIFO溢出处理方式可配置 记录接
[单片机]
<font color='red'>STM32</font>的can现场总线的特点及工作流程分析
STM32自带的SPI实现对外部FLASH(W25Q128)的读写
实验功能:通过KEY1按键来控制W25Q128的写入,通过另外一个按键KEY0来控制W25Q128的读取。 硬件电路: 软件配置: //以下是SPI模块的初始化代码,配置成主机模式 //SPI口初始化 //这里针是对SPI1的初始化 void SPI1_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//使能GPIOA时钟 RCC_APB2PeriphClockCmd(RCC_
[单片机]
毕业设计| STM32蓝牙智能小车
+ 功能描述 蓝牙智能小车由STM32微处理器、步进电机、蓝牙,L298N等模块构成的:1)采用STM32微处理器为核心,在MDK环境下进行编程。2)通知控制L298N模块IN1~IN4引脚的高低电平进而控制电机的转动方向,使小车产生不同的转动模式。3)控制小车的转动模式则是通过蓝牙模块来实现,利用手机蓝牙助手和蓝牙模块相通,进而控制小车的各种运转模式。 + 整体框架 下面的图把核心连接部分都画出来了(其他部分按要求接就可以了,Vcc接电源,GND接地即可),图画的有点丑,希望大家不要介意呀( - ) + 硬件设计 1)芯片连接 使用微控制器为STM32F103RC,芯片上所连接的部分: PC10 - IN1;
[单片机]
毕业设计| <font color='red'>STM32</font>蓝牙智能小车
stm32之.hex 文件
1.我们设置编译 程序的编译器(如图),这个设置意思是把程序下载到flash 的 0x0800 0000开头的位置,然后编译程序 2.编译完程序后,在工程目录的output文件夹中找到编译后生产的.hex文件; 用 notepad++ 或者 UltraEdit 打开 程序 的.hex文件 hex文件格式: (1)以行为单位,每行以冒号开头,内容全部为16进制码(以ASCII码形式显示) (2)在HEX文件里面,每一行代表一个记录。记录的基本格式为: 第一个字节 表示本行数据的长度; 第二、三字节表示本行数据的起始地址; 第四字节表示数据类型,数据类型有:0x00、0x01、0x02、0x03、0x04、0x05。 ‘0
[单片机]
<font color='red'>stm32</font>之.hex 文件
从一无所知的开始 学习stm32
首先说下博主不是什么大牛,还是一名在校的大二学生,主要是想学习STM32,想通过学习STM32,然后通过博客来记些笔记,来提高自己的能力。 好了,来进入主题。哦,就是这个feel! 首先就是学习STM32,就是需要有自己的一块开发板,我用的就是实验室学长留下的一个野火板。自己感觉还是不错的。 首先我们需学习怎么建立一个STM32的工程。 首先在建立一个模板,以方便自己以后使用。我是在桌面上,建立一个文件夹,取名模板。然后在模板里面建立几个文件夹如下图所示: 然后就是找到stm32的库,然后开始往自己的模板里写入一些启动文件和官方文件。我用的就是3.5版本的,3.0版本与3.5版本还是有区别的。 下面就开始往每个文件里添加
[单片机]
从一无所知的开始 学习<font color='red'>stm32</font>
赛灵思启动第三届开源硬件大赛给力中国智造
产学研联手共同推动基于FPGA的中国开放源码硬件创新运动,两岸三地高校将同台竞技, 赛灵思200多块开发板、超万元奖金及优秀选手“直通欧洲”计划给力“中国智造”。 2011年5月30日,中国北京——由中国电子学会主办、赛灵思公司(Xilinx, Inc. (NASDAQ:XLNX) )与北京工业大学共同承办的“第三届OpenHW开放源码硬件与嵌入式大赛(简称开源硬件大赛)”日前在北京工业大学正式启动,此次参赛特等奖获得者将获得15000元的奖金,同时还将获得德致伦公司(Digilent)提供的“直通欧洲”奖励,免费参加2012年9月份在德国慕尼黑举办的“Digilent杯电子设计大赛”盛事,详情请见 http://www
[嵌入式]
赛灵思启动第三届开源<font color='red'>硬件</font>大赛给力中国智造
群英荟萃:Computex展会上烽火暗起
英特尔和AMD下个星期将在台北举行的一年一度的Computex展会上展开竞争。全球最大的硬件厂商都将在这次展会上展出即将在今年晚些时候发布的产品。 据pcadvisor.co.uk网站报道,在下个星期二召开的Computex 2007展会上,英特尔将推出P35 Bear Lake芯片组以及许多台湾地区主要主板厂商推出的采用这种芯片组的主板。芯片组处理处理器与计算机其它部分的通讯。P35 Bear Lake芯片组可加快数据传输速度,提高计算机性能。 根据英特尔最新发布的迅驰套件Santa Rosa芯片设计的笔记本电脑也将非常引人注目。 AMD将在这次展会上介绍其新的Phenom四内核处理器。这种处理器是在五月中旬发布的。在这次
[焦点新闻]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved