STM32——USB 内部FLASH模拟U盘

前言

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

操作步骤

1.选择单片机型号

我使用的是STM32f103RCT6

STM32——USB 内部FLASH模拟U盘_第1张图片

2.设置外部高速时钟

STM32——USB 内部FLASH模拟U盘_第2张图片


 3.设置Debug

STM32——USB 内部FLASH模拟U盘_第3张图片

 4.配置USB

STM32——USB 内部FLASH模拟U盘_第4张图片

STM32——USB 内部FLASH模拟U盘_第5张图片

 选择Mass Storage Class

5.配置时钟树

STM32——USB 内部FLASH模拟U盘_第6张图片

USB设备时钟设为48MHz 

6.改变堆栈大小

STM32——USB 内部FLASH模拟U盘_第7张图片

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

然后生成代码

7.代码修改 

STM32——USB 内部FLASH模拟U盘_第8张图片

打开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端口插入电脑

会弹出提示

STM32——USB 内部FLASH模拟U盘_第9张图片

接着格式化

STM32——USB 内部FLASH模拟U盘_第10张图片 

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

STM32——USB 内部FLASH模拟U盘_第11张图片 

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

STM32——USB 内部FLASH模拟U盘_第12张图片

STM32——USB 内部FLASH模拟U盘_第13张图片 

 

你可能感兴趣的:(stm32,arm,嵌入式硬件)