前言
学习stm32 USB接口使用,学会用CUBE工具快速创建USB设备工程及调试,关于usb的相关知道请读者提前准备并学习,当然如果不想深究其中原理的话,跟着本文来操作就可以实现基于USB的设备开发了。需要提示的是,stm32在使用usb接口功能是一般需要在DP引脚上上拉一个1.5K电阻到3.3V(部分MCU内部会上拉)。
示例详解
基于硬件平台: STM32F10C8T6最小系统板, MCU 的型号是 STM32F103c8t6, 使用stm32cubemx 工具自动产生的配置工程,使用KEIL5编译代码。
本示例所用的最小系统板原理图:
从本节开始,关于CUBEMX工具及KEIL工具的操作将不再细讲,如果还有不熟悉的可以查看之前的教程文档。下面直接介绍工程配置:
系统时钟树
USB接口配置
USB设备配置(选择Mass Storage Class,参数可保持默认)
引脚配置
中断配置(保持默认)
工程代码
在usbd_storage_if.c 修改参数 STORAGE_BLK_NBR 大小为64(本例中我们用芯片内部的FLAHS来模拟U盘,大小是32k)
拉下来是修读改读和写函数,我们为工程加入事先准备好的Flash.c和flash.h文件,在usbd_storage_if.c文件头部分加入:
然后修改读写函数:
接下来就是重新设置堆栈大小,将栈设为4K,这样可以保证U盘初始化时成功:
到此,简单的USB_MSC设备演示demo就完成了,下面我们将程序烧录开发板,然后将将开发板接上电脑,电脑成功识别到U盘并弹同格式化对话框,直接格式化就行了:
我们在U盘新建一个文档张十三的测试.txt然后在文档中输入一些内容:
重新上电断开后再次打开U盘看里面的内容:
关键字:STM32 基础系列教程 USB_MSC
引用地址:
STM32 基础系列教程 26 - USB_MSC
推荐阅读最新更新时间:2024-11-13 18:29
意法最新STM32为注重低能耗设计提供解决方案
丰富的开放生态系统帮助设计人员大幅降低功耗。 中国,2014年5月13日 ——意法半导体最新的STM32L0微控制器已经完全通过相关认证测试,并在公司及指定经销商处接受订货。新系列STM32微控制器让客户能够取得前所未有的低功耗,整合高能效的ARM® Cortex®-M0+内核、优化架构、电源管理模式、超低功耗外设、支持节能型USB功能、独有的超低功耗制造工艺。 STM32L0将运行模式功耗降至87µA/MHz,当保留RAM全部数据时,停止模式功耗为440nA,并集成低功耗定时器,快速唤醒时间达到3.5µs,让应用设计人员能够充分利用不同的低功耗模式。设计人员使用STM32L0系列产品可开发出电池续航能力一流且外观设计
[单片机]
Keil5配置GCC编译器编译STM32工程
Keil一般使用ARMCC编译MCU工程代码。偶然听说Keil也是支持内嵌GCC编译器的。于是尝试了网上博客所述的一些方法,最终找到了一篇博客 http://blog.csdn.net/lan120576664/article/details/46806991 按照文中所述,发现仍存在一些其他错误,后来又查找了其他相关资料,在这作以总结 一、下载GCC编译器 https://launchpad.net/gcc-arm-embedded/ 二、安装GCC GCC解压到keil的安装目录下面。如下图 三、配置Keil 如下图所示进行相关设置: Prefix:arm-none-eabi- Folder:D:k
[单片机]
STM32位带操作举例
STM32位带操作举例 int main(void) { GPIO_InitTypeDef GPIO_InitStruction; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); GPIO_InitStruction.GPIO_Pin=GPIO_Pin_8; GPIO_InitStruction.GPIO_Mode=GPIO_Mode_Out_OD; GPIO_InitStruction.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOA,&GPIO_InitStruction); //PA8 /*whil
[单片机]
STM32开发笔记69: 外设启动的先后次序
单片机型号:STM32F070F6P6 今天,在程序框架中增加了Timer16定时器驱动,但程序不能正常运行,本篇日志记录其原因。 驱动程序框架,定义了回调函数Timer16_InterruptFunction,写在main.cpp中用于逻辑层设计。Timer16_InterruptFunction调用的间隔为1ms,具体程序如下: void Timer16_InterruptFunction(void) { Target.HAL.L2.Turn(); } 此程序完成以1ms为间隔L2闪烁的程序,但是将此程序烧写到目标板后,程序不能正常运行。经过调试,最后将问题锁定在启动顺序上,看一下程序外设的启动顺序,具体程序如下
[单片机]
STM32编译错误汇总(一)
error: L6236E: No section matches selector - no section matche&nbs 没有添加启动文件 startup. 移植STM32程序失败 检查Target中 Use Cross-Module Optimization 和 Use MicroLIB 有没有勾选上。 FCARM - Output Name not specified, please check ‘Options for Target - Utilities’ 看看添加的lib文件是不是 lib后缀名,或者说编译器是否把它识别为lib文件, 往项目管理器添加文件的时候,文件类型是不是手滑 选成了Im
[单片机]
按键开关机电路图 按键开关机电路设计方案
最近做个基于STM32脑波检测的项目,甲方爸爸要求使用按键进行开关机。在网上查了一些资料,找到了很多案例分享,在此进行总结。 主要分为以下两部分: 单片机控制按键开关机电路 独立按键开关机电路 1、单片机控制按键开关机电路 1.1、简约版 图中Ctr和Key接单片机管脚,作用如下: Ctr作为开关控制用 Key作为按键检测用 操作流程: 开机:按下按键,Q1导通,单片机上电,控制Ctr为低电平,保持Q1导通。 关机:再按下按键,单片机控制Ctr为高电平,此时松开按键Q1截至,单片机停电。 如图: 简约版 优缺点分析: 优点:电路简单,元器件比较少。 缺点:在停机状态下单片机的IO口依旧带电,正常使用没问
[单片机]
玩转STM32(10)CPU的脉搏
前面学习了怎么样下载程序到开发板, 并且可以运行起来,看到LED灯轮回地亮灭。你也许很好奇为什么LED会轮流地亮灭,像拥有生命一样,具有周期性地工作。要解决这个问题,我们得学习CPU的脉搏,那么什么是CPU的脉搏呢?其实CPU就是一堆泥沙和一些金属组成的,本身是不具备这种生命的特性,那么它周期性地工作的秘密又是什么呢?其实CPU之所以有这种特性,是因为它靠一个振荡电路来实现,这个振荡电路就是CPU的心脏,如果没有它是不可能产生任何的跳动。 在这个振荡电路里,你也许听过石英晶振这个名称,为什么要使用它呢?物理学家在研究物质的属性时,发现石英有一个特性,当把石英放在一个电场里,石英会变长,当电场去掉后,又可以恢复原来的长度。在这个
[单片机]
STM32之LWIP网络协议栈移植步骤与方案
1.LWIP介绍 lwip是瑞典计算机科学院网络嵌入式系统小组(SICS)的Adam Dunkels(亚当·邓克尔) 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持 TCP 协议主要功能的基础上减少对RAM的占用。 LwIP是Light Weight(轻型)IP 协议,有无操作系统的支持都可以运行。LwIP 实现的重点是在保持TCP协议 主要功能的基础上减少对RAM的占用,它只需十几KB的RAM和 40K左右的ROM就可以运行,这使LwIP协议栈适合在低端的嵌入式系统中使用。lwip提供三种API: RAW API (NETCONN)lwip API BSD API 2.LWIP源码下载 源码下载地址:LWIP
[单片机]