移植篇-存储介质外部SRAM
STM32F407基于外部SRAM的FATFS
软件
- keil5
- STM32CubeMX
硬件
- 正点原子STM32F407探索者
底部提供有Demo工程下载。
STM32CubeMX的配置图如下
- FSMC配置
片选号、地址位、数据位要根据实际的情况来设置,具体看原理图。
记得要 写操作要使能,否则会出现HardFault错误
时序使用默认的就行,之前网上看到有一个设置为0时序,翻车了…
- FATFS的配置
USB Device是我实际工程用到的,可以忽略。
修改Keil工程
用STM32CubeMX生成工程之后,默认生成的SRAM设备地址和大小需要根据实际情况修改。
以上配置就完成了,下面就可以试下创建文件系统进行操作了。
/* 全局变量 */
FRESULT f_result;
FIL myfile;
uint32_t br,bw;
uint8_t msg[] = "hello world";
uint8_t buff[20];
uint8_t work[4096];
f_result = f_mkfs(SRAMDISKPath, FM_FAT|FM_SFD, 512, work, 4096); /* 创建文件系统 */
if(f_result != FR_OK)
{
//printf("f_mkfs() allocated failed\r\n");
while(1);
}
f_result = f_mount(&SRAMDISKFatFS, SRAMDISKPath, 0); /* 挂载文件系统 */
if(f_result != FR_OK)
{
//printf("f_mkfs() allocated failed\r\n");
while(1);
}
/* 创建测试文件并写入内容 */
f_open(&myfile, "test.txt", FA_WRITE|FA_CREATE_ALWAYS);
f_write(&myfile,msg,11,&bw);
f_close(&myfile);
/* 读出测试文件的内容 */
f_open(&myfile, "test.txt", FA_READ);
f_read(&myfile,buff,11,&br);
f_close(&myfile);
/* 大家可以打断点看buff数组的内容,也可以用串口打印出来,
注意要初始化串口,否则会卡死在printf()哦 */
//printf("buff content:[%s] \r\n",buff);