STM32F103ZET6 - USB_MSC -- 芯片内部FLASH

STM32F103ZET6 - USB_MSC

示例详解: (参考 : https://blog.csdn.net/zhanglifu3601881/article/details/89635151)
基于硬件平台: STM32F103ZET6正点原子的精英板, 使用stm32cubemx 工具自动产生的配置工程,使用KEIL5编译代码。

  1. STM32CubeMX生成代码过程如下:

    1>. 打开SWD - debug调试模式, STM32CubeMX生成的代码默认是没打开debug调试模式的 在这里插入图片描述
    2>. 外部时钟配置, HSE选择为外部晶振在这里插入图片描述
    3>. CLOCK Configuration 配置如下: 选择HSE,PLL倍频为9, USB分频为1.5=48M在这里插入图片描述
    4>. USB功能选中在这里USB插入图片描述
    5>. 选择为Mass Storage Class, 参数配置为默认STM32F103ZET6 - USB_MSC -- 芯片内部FLASH_第1张图片
    STM32F103ZET6 - USB_MSC -- 芯片内部FLASH_第2张图片
    中断配置保持默认 STM32F103ZET6 - USB_MSC -- 芯片内部FLASH_第3张图片
    6>. 生成代码配置在这里插入图片描述

栈大小改为0x1000STM32F103ZET6 - USB_MSC -- 芯片内部FLASH_第4张图片

  1. 点击生成代码,在keil中开始编辑BootLoader代码,用户要编辑的主要是usbd_storage_if.c文件,

1>. 添加准备好的flash驱动. 在这里增加头文件

/* Includes ------------------------------------------------------------------*/
#include "usbd_storage_if.h"

/* USER CODE BEGIN INCLUDE */
#include "flash.h"
/* USER CODE END INCLUDE */
  1. 声明下面宏 (本例中我们用芯片内部的FLAHS来模拟U盘)
#define STORAGE_LUN_NBR                  1          //分区数
#define STORAGE_BLK_NBR                  1024       //块数        1024*512512bytes/sector = 512K
#define STORAGE_BLK_SIZ                  0x200      //每个块大小   512bytes/sector
  1. 在读,写函数内添加如下代码
/**
  * @brief  .
  * @param  lun: .
  * @retval USBD_OK if all operations are OK else USBD_FAIL
  */
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 addr = blk_addr*STORAGE_BLK_SIZ;
	FlashReadBuff(DEVICE_INFO_ADDRESS+addr,buf,blk_len*STORAGE_BLK_SIZ );
    return (USBD_OK);
  /* USER CODE END 6 */
}

/**
  * @brief  .
  * @param  lun: .
  * @retval USBD_OK if all operations are OK else USBD_FAIL
  */
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 addr = blk_addr*STORAGE_BLK_SIZ;
	FlashWriteBuff_Word(DEVICE_INFO_ADDRESS+addr,buf,blk_len*STORAGE_BLK_SIZ );
    return (USBD_OK);
  /* USER CODE END 7 */
}

到此,简单的USB_MSC设备演示demo就完成了,下面我们将程序烧录开发板,然后将将开发板接上电脑,电脑成功识别到U盘并弹同格式化对话框,直接格式化就行了:
STM32F103ZET6 - USB_MSC -- 芯片内部FLASH_第5张图片

我们在U盘新建readme.txt然后在文档中输入一些内容:
STM32F103ZET6 - USB_MSC -- 芯片内部FLASH_第6张图片

重新上电断开后再次打开U盘看里面的内容:
STM32F103ZET6 - USB_MSC -- 芯片内部FLASH_第7张图片

你可能感兴趣的:(STM32F103ZET6 - USB_MSC -- 芯片内部FLASH)