admin管理员组

文章数量:1530058

前言

本文章使用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盘制作成功 

 

 

本文标签: usbflash