4.4、CUBEMX USB之MSC+FATFS(基于外部FLASH(W25Q128))

所需工具

  • CUBEMX5.6
  • STM32F103ZET6开发板(正点原子战舰)
  • LINK及其他线束

1、CUBEMX初始化

  • 设置SYSTEM CORE下的SYS和RCC选项。
  • 设置USB时钟
  • 设置USB
    4.4、CUBEMX USB之MSC+FATFS(基于外部FLASH(W25Q128))_第1张图片- 设置USB_DEVICE
    4.4、CUBEMX USB之MSC+FATFS(基于外部FLASH(W25Q128))_第2张图片MSC_MEDIA_PACKET选择的是512,这里的图片是上个实验的图片。
  • 使能FATFS文件系统,选择为USER DEFINE,如下配置
    4.4、CUBEMX USB之MSC+FATFS(基于外部FLASH(W25Q128))_第3张图片
  • 修改堆栈大小

2、修改usbd_stroge_if.c

3、修改user_diskio.c文件

4、注意事项

  1. 在FATFS系统中对内存读写的最小操作单位是簇,在上次的实验里,把FLASH_BLOCK_SIZE设为了1,所以上次实验的最小读写单位是4KB,但是在USB实验里面,SPI_FLASH_BLK_SIZ的大小是512,所以,两者的单位不一样,会造成一个后果就是U盘读取显示的内容并不是用户自己操作的文件。比如用户通过fopen,fwrite等创建了一个文件名为test.txt,内容为test的文件,但在电脑端却显示空白,甚至是根本没有找到文件系统,所以在修改fatfs和MSC的底层读写函数的时候,需要注意单位大小要保持一致。
  2. 但是在我修改MSC底层容量为如下,并保持FATFS的读写单位一致的时候,却会出现请插入U盘这个现象。
#define     SPI_FLASH_BLK_NBR           ((12*1024*1024)/(SPI_FLASH_BLK_SIZ))
#define     SPI_FLASH_BLK_SIZ           4096
  1. 目前只测试成功了两者皆为512的情况,且通过PC端创建文件后,通过内部程序可以读取到PC端建立的函数。

5、实验结果

今天请假了,这两天有点事情,等周一我在确认一下两者皆为4096的情况后来补充下实验结果。如果有明白的大佬可以好心解惑一下,在下感激不尽。

8-13补充
6、补充测试
  1. 将FATFS和MSC的单位大小修改为4096,两者的扇区计数改为12 * 12 * 1024 / 4096,出现请插入U盘这个提示。
  2. 在1的基础上将MSC的参数改为如下。
    *block_num  = 12*1024*1024/512;
    *block_size = 4096;

之后两者都可以成功,但是U盘在电脑上显示的如下。
4.4、CUBEMX USB之MSC+FATFS(基于外部FLASH(W25Q128))_第4张图片

4.4、CUBEMX USB之MSC+FATFS(基于外部FLASH(W25Q128))_第5张图片且用户可以通过fatfs对U盘内的内容进行读写,U盘和fatfs可以共同操作。
但是还是有问题,就是U盘在电脑上显示的是90+MB。

你可能感兴趣的:(CUBEMX,嵌入式)