STM32 虚拟U盘

发布者:RadiantDusk最新更新时间:2025-02-05 来源: jianshu关键字:STM32  虚拟U盘  Cubemx 手机看文章 扫描二维码
随时随地手机看文章

使用 SRAM 进行简单测试

  • Cubemx 设置 USB_OTG_FS 为 Device_Only, USB_DEVICE 设置 Class For FS IP 为 Mass Storage Class, 里面详细配置使用默认参数即可.

  • 到 Project Manager 设置栈大小稍微大些, 因为 USB 协议的函数调用和局部变量较多, 比如设置成 0x10000.

  • 在 usbd_storage_if.c 中添加如下代码, 使用 SRAM 作为存储:


#define STORAGE_LUN_NBR                  1

#define STORAGE_BLK_NBR                  200        /* 内存容量一般来说很少, 这里使用 100K 的内存作为实验 */

#define STORAGE_BLK_SIZ                  0x200


/* USER CODE BEGIN PRIVATE_DEFINES */

static char msc_data[STORAGE_BLK_NBR * STORAGE_BLK_SIZ];    /* 定义数组用来存放数据 */

/* USER CODE END PRIVATE_DEFINES */


/* 修改下面两个函数 */

int8_t STORAGE_Read_FS(uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len)

{

    /* USER CODE BEGIN 6 */

    memcpy(buf, msc_data + STORAGE_BLK_SIZ*blk_addr, blk_len*STORAGE_BLK_SIZ);


    return (USBD_OK);

    /* USER CODE END 6 */

}


int8_t STORAGE_Write_FS(uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len)

{

    /* USER CODE BEGIN 7 */

    memcpy(msc_data + STORAGE_BLK_SIZ*blk_addr, buf, blk_len*STORAGE_BLK_SIZ);


    return (USBD_OK);

    /* USER CODE END 7 */

}


使用 NAND FLASH 做测试

int8_t STORAGE_Read_FS(uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len)

{

  /* USER CODE BEGIN 6 */

  for (int i = 0; i < blk_len; i++)

  {

    nand_flash_read_page((blk_addr + i) * 64, 0, buf, 4096);

  }

  

  return (USBD_OK);

  /* USER CODE END 6 */

}




int8_t STORAGE_Write_FS(uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len)

{

  /* USER CODE BEGIN 7 */

  for (int i = 0; i < blk_len; i++)

  {

    nand_flash_erase(blk_addr + i);

    nand_flash_write_page((blk_addr + i) * 64, 0, buf, 4096);

  }

  return (USBD_OK);

  /* USER CODE END 7 */

}


关键字:STM32  虚拟U盘  Cubemx 引用地址:STM32 虚拟U盘

上一篇:stm32配合xshell串口输入
下一篇:安富莱 STM32 按键检测

推荐阅读最新更新时间:2026-03-22 11:27

STM32 CubeMX配置详解:USB烧录程序的使用与设置
本次使用STM32G474VET6芯片 配置并编写测试程序 1.配置芯片 CubeMX- 选择芯片,SYS默认不变 配置RCC与时钟树 配置USB 生成代码。为了方便观察程序是否烧录成功,再开启一个GPIO驱动LED 2.进入MDK,循环中加入LED的闪烁 正式进入USB烧录步骤: 1.进入DFU模式:BOOT0拉高 → 复位 → 芯片进入Bootloader。 本型号芯片BOOT0连接PB8引脚,将PB8与3V3短接,然后复位(重新上电)芯片,芯片即可进入Bootloader 2.连接USB到电脑:使用USB-C线连接开发板与电脑。 USB-C母座DP、DN引脚直连单片机D
[单片机]
<font color='red'>STM32</font> <font color='red'>CubeMX</font>配置详解:USB烧录程序的使用与设置
STM32 CubeMx串口输出乱码问题解析与总结
笔者最近在拿到了个新的板子,MCU是意法半导体的STM32H723VGT6,板载晶振是24MHz。个人习惯拿到新板子先打印个hello world,于是CubeMx启动。 配置串口1异步模式,波特率115200,其余保持默认。 Debug选SW,RCC用外部高速时钟HSE,接着配置时钟树如下。 为了方便进行串口重定向,使用ARM-MDK工具链,接着是Keil 磺ision5启动。首先在点击魔术棒,勾选使用微库以便对printf重定向至串口。 接着打开 usart.c,在最后面添加将 fputc 重定向至串口。并在 usart.h 中将 stdio.h 头文件包含进来(对应位置看注释)
[单片机]
<font color='red'>STM32</font> <font color='red'>CubeMx</font>串口输出乱码问题解析与总结
STM32核心知识入门指南:标准库、HAL库与STM32CubeMX零基础详解
初识STM32,那肯定要先了解它是什么,长话短说进入正文! STM32是什么,是一款来自意法半导体公司生产的32位微控制器系列产片,这里小楽就不多介绍了。 那刚接触嵌入式或其他同学就该疑惑了,为什么叫STM32?32位是什么?微控制器(MCU)又是什么?那小楽将一一解答。 各位,各位集中注意力! 一.STM32的介绍 一.微控制器(MCU)是什么 咱来先解决微控制器! 微控制器呢!是一种集成了多种功能模块的 嵌入式专用计算机芯片,广泛应用于各类电子设备的控制场景中。它将很多部件(这里的部件暂时先不急着介绍,容量有点大)集成在单个芯片上,具备完整的最小系统能力,可独立实现特定控制任务。 二.为什么叫STM32与32位是什么
[单片机]
<font color='red'>STM32</font>核心知识入门指南:标准库、HAL库与STM32<font color='red'>CubeMX</font>零基础详解
STM32 CubeMX
1_GPIO HAL_GPIO_WritePin(GPIOx,GPIO_PIN_x,GPIO_PIN_SET); //或者GPIO_PIN_RESET 2_PWM uint16_t val = 0; HAL_TIM_PWM_Start(&htimx,TIM_CHANNEL_1); While(){ _HAL_TIM_SET_COMPARE(&htimx,TIM_CHANNEL_1,val); _val++; } 3_UART_发送10字符串,仅执行1次(不在while中) //定义两个数组变量 Uint8_t T =”nPlease enter 10 characters:rn”; Uint8_t R ; //串
[单片机]
Keil MDK STM32系列(五) 使用STM32CubeMX创建项目基础结构
概述 从前面介绍的STM32开发可以感受到, 虽然SPL对于纯寄存器方式开发已经是很大的进步, SPL将大部分寄存器配置做了很好的封装, 配置项简单易读, 但是外设与输出脚的映射关系, 配置项的数量, 配置之间的关联都使得配置难度并未降低, 在项目启动阶段依然要通过不断查阅MCU的用户手册去修改方案, 各种情况下的代码例程直接借鉴容易出错, 需要反复尝试, 往往在调通外设这一步就已经耗费了开发人员的大量时间. 所以ST将开发库的重心迁移到了HAL上, 配合HAL的就是STM32CubeMX这个图形化配置工具. 通过图形化界面, 通过预设的逻辑辅助生成代码模板. 这样可以将底层寄存器和外设的复杂定义和逻辑包装在工具界面之下, 避
[单片机]
STM32基础2--SMT32CubeMX的 code目录
1.0:Code的目录结构 在上一篇文章生成代码后,通过MDK打开项目,可以看到如下的项目结构。对于GPIO来说,我们只需要关注两个文件 main.h , main.c , gpio.h , gpio.c 。 2.0:main.h main.h 可以看到引入头文件#include stm32f4xx_hal.h ,以及对GPIO进行了宏定义。 GPIO宏定义是由于在配置GPIO引脚时使用User Label /* USER CODE BEGIN Header */ /** ************************************************************************
[单片机]
<font color='red'>STM32</font>基础2--SMT32<font color='red'>CubeMX</font>的 code目录
STM32CubeMX+HAL 输出PWM
1. 配置STM32CubeMX 前面的一些基础步骤可参见:【STM32】CubeMX+HAL 点亮LED 的【1.1】~【1.6】步骤。 核心配置: 这里我使用的是 TIM2 定时器,当然使用其他的也可以,但要注意相关配置。 1.1 TIM2 的 Mode 配置 1.2 TIM2 的 Configuration 配置 1.3 其余 GPIO 配置 PA2 的 PWM 输出作为 PA6 的输入,PA6 连接的是一个 LED ,观察是否出现呼吸灯现象。 余下步骤可参见:【STM32】CubeMX+HAL 点亮LED 的【1.10】~【1.13】步骤。 2. 添加代码 下面贴出主要代码: 2.1
[单片机]
【<font color='red'>STM32</font>】<font color='red'>CubeMX</font>+HAL 输出PWM
STM32CubeMX | 28 - STM32片内Flash的使用
本篇文章主要介绍如何使用STM32中的片内FLash。 1. 准备工作 硬件准备 开发板 首先需要准备一个开发板,这里我准备的是STM32L4的开发板(BearPi): 软件准备 需要安装好Keil - MDK及芯片对应的包,以便编译和下载生成的代码; 2.生成MDK工程 如果使用的是STM32F1系列,请先看这篇文章!!!( STM32CubeMX生成F1的工程中造成 下载器无法下载 问题的解决方案 ) 选择芯片型号 打开STM32CubeMX,打开MCU选择器: 搜索并选中芯片STM32L431RCT6: 配置时钟源 如果选择使用外部高速时钟(HSE),则需要在System Core中配置
[单片机]
STM32<font color='red'>CubeMX</font> | 28 - <font color='red'>STM32</font>片内Flash的使用
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

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