STM32——USB 内部FLASH模拟U盘

前言

本文章使用STM32CubeMX将单片机变成一个小U盘

操作步骤

1.选择单片机型号

我使用的是STM32f103RCT6

2.设置外部高速时钟


 3.设置Debug

 4.配置USB

 选择Mass Storage Class

5.配置时钟树

USB设备时钟设为48MHz 

6.改变堆栈大小

把堆栈变大,否则无法启动

然后生成代码

7.代码修改 

打开usbd_storage_if.c文件,修改

​
/**
  * @}
  */

/** @defgroup USBD_STORAGE_Private_Defines
  * @brief Private defines.
  * @{
  */

#define STORAGE_LUN_NBR                  1
#define STORAGE_BLK_NBR                  60 //模拟60个扇区
#define STORAGE_BLK_SIZ                  0x200

/* USER CODE BEGIN PRIVATE_DEFINES */
uint8_t msc_data[STORAGE_BLK_NBR][STORAGE_BLK_SIZ] = {0};   //总容量30kB
/* USER CODE END PRIVATE_DEFINES */

/**
  * @}
  */

​

在begin6和begin7处修改代码

int8_t STORAGE_Read_FS(uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len)
{
  /* USER CODE BEGIN 6 */
  uint32_t n, i;
  for (n = 0;n < blk_len;n++) 
    {
        for (i = 0;i < STORAGE_BLK_SIZ;i++)
        {
            buf[n * STORAGE_BLK_SIZ + i] = msc_data[blk_addr + n][i];
        }
    }
  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 */
  uint32_t n, i;
  for (n = 0;n < blk_len;n++) 
    {
         for (i = 0;i < STORAGE_BLK_SIZ;i++) {
         msc_data[blk_addr + n][i] = buf[n * STORAGE_BLK_SIZ + i];
    }
 }
  return (USBD_OK);
  /* USER CODE END 7 */
}

然后编译烧录到单片机中

将单片机的usb端口插入电脑

会弹出提示

接着格式化

 

如果格式化成功会发现多了个盘符

 

在盘内新建txt文档写入内容并保存,如果可以成功保存说明迷你U盘制作成功 

 

 

  • 1
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值