当前位置: 代码迷 >> 综合 >> 4.4、CUBEMX USB之MSC+FATFS(基于外部FLASH(W25Q128))
  详细解决方案

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

热度:87   发布时间:2024-02-08 01:52:31.0

所需工具

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

1、CUBEMX初始化

  • 设置SYSTEM CORE下的SYS和RCC选项。
  • 设置USB时钟
  • 设置USB
    USB设置- 设置USB_DEVICE
    USBD_MSCMSC_MEDIA_PACKET选择的是512,这里的图片是上个实验的图片。
  • 使能FATFS文件系统,选择为USER DEFINE,如下配置
    插入图片描述
  • 修改堆栈大小

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端建立的函数。

实验结果

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

  相关解决方案