所需工具
- CUBEMX5.6
- STM32F103ZET6开发板(正点原子战舰)
- LINK及其他线束
1、CUBEMX初始化
- 设置SYSTEM CORE下的SYS和RCC选项。
- 设置USB时钟
- 设置USB
- 设置USB_DEVICE
MSC_MEDIA_PACKET选择的是512,这里的图片是上个实验的图片。 - 使能FATFS文件系统,选择为USER DEFINE,如下配置
- 修改堆栈大小
2、修改usbd_stroge_if.c
3、修改user_diskio.c文件
4、注意事项
- 在FATFS系统中对内存读写的最小操作单位是簇,在上次的实验里,把FLASH_BLOCK_SIZE设为了1,所以上次实验的最小读写单位是4KB,但是在USB实验里面,SPI_FLASH_BLK_SIZ的大小是512,所以,两者的单位不一样,会造成一个后果就是U盘读取显示的内容并不是用户自己操作的文件。比如用户通过fopen,fwrite等创建了一个文件名为test.txt,内容为test的文件,但在电脑端却显示空白,甚至是根本没有找到文件系统,所以在修改fatfs和MSC的底层读写函数的时候,需要注意单位大小要保持一致。
- 但是在我修改MSC底层容量为如下,并保持FATFS的读写单位一致的时候,却会出现请插入U盘这个现象。
#define SPI_FLASH_BLK_NBR ((12*1024*1024)/(SPI_FLASH_BLK_SIZ))
#define SPI_FLASH_BLK_SIZ 4096
- 目前只测试成功了两者皆为512的情况,且通过PC端创建文件后,通过内部程序可以读取到PC端建立的函数。
实验结果
今天请假了,这两天有点事情,等周一我在确认一下两者皆为4096的情况后来补充下实验结果。如果有明白的大佬可以好心解惑一下,在下感激不尽。