#include "bsp_fatfs.h" #include "ext_sram.h" #include "interface.h" #include "stm32f4xx.h" #include #include #include FATFS FatFs[_VOLUMES]; /* FatFs文件系统对象 4144字节*/ FIL file_object; /* 文件对象 4132字节*/ /**************************************************** * 函 数 名:get_fattime * 函数功能:文件系统获取时间 * 入口参数: * 返 回 值:时间 *****************************************************/ DWORD get_fattime(void) { RTC_TimeTypeDef RTC_TimeStruct; RTC_DateTypeDef RTC_DateStruct; RTC_GetTime(RTC_Format_BIN, &RTC_TimeStruct); RTC_GetDate(RTC_Format_BIN, &RTC_DateStruct); /* 返回当前时间戳 */ return ((DWORD)(2000 + RTC_DateStruct.RTC_Year - 1980) << 25) /* Year 2019 */ | ((DWORD)RTC_DateStruct.RTC_Month << 21) /* Month */ | ((DWORD)RTC_DateStruct.RTC_Date << 16) /* Mday */ | ((DWORD)RTC_TimeStruct.RTC_Hours << 11) /* Hour */ | ((DWORD)RTC_TimeStruct.RTC_Minutes << 5) /* Min */ | ((DWORD)RTC_TimeStruct.RTC_Seconds >> 1); /* Sec */ } /**************************************************** * 函 数 名:FileSystem_Init * 函数功能:文件系统初始化 * 入口参数: * 说 明:无 *****************************************************/ void fatfs_init(void) { FRESULT res; /* 文件操作结果 */ res = f_mount(&FatFs[0], "0:", 1); // 文件系统挂载时会对TF初始化 /* 如果没有文件系统就格式化创建创建文件系统 */ if (res == FR_NO_FILESYSTEM) // TF 卡没有文件系统 { res = f_mkfs("0:", 0, 0); // 格式化 if (res == FR_OK) { printf("TF format ok\r\n"); res = f_mount(NULL, "0:", 1); /* 格式化后,先取消挂载 */ res = f_mount(&FatFs[0], "0:", 1); /* 重新挂载 */ } else { LED1_RUN_OFF; printf("TF format fail\r\n"); } } else if (res != FR_OK) { LED1_RUN_OFF; printf("!!!TF mount file system fail (%d)\r\n", res); } else { LED1_RUN_ON; printf("File system mount ok !\r\n"); } res = f_mount(&FatFs[1], "1:", 1); // 文件系统挂载时会对NAND初始化 /* 挂载文件系统 */ // if (res == FR_NO_FILESYSTEM) // NAND 没有文件系统 // { // res = f_mkfs("1:", 0, 0); // 格式化 // if (res == FR_OK) // { // printf("TF format ok\r\n"); // res = f_mount(NULL, "1:", 1); /* 格式化后,先取消挂载 */ // res = f_mount(&fs, "1:", 1); /* 重新挂载 */ // } // else // { // // LED_FAULT_ON; // printf("TF format fail\r\n"); // } // } // else /* 如果没有文件系统就格式化创建创建文件系统 */ if (res == FR_NO_FILESYSTEM) // TF 卡没有文件系统 { res = f_mkfs("1:", 0, 0); // 格式化 if (res == FR_OK) { printf("Nand flash format ok\r\n"); res = f_mount(NULL, "1:", 1); /* 格式化后,先取消挂载 */ res = f_mount(&FatFs[1], "1:", 1); /* 重新挂载 */ } else { LED1_RUN_OFF; printf("Nand flash format fail\r\n"); } } if (res != FR_OK) { LED0_RUN_OFF; printf("!!!Nand flash mount file system fail (%d)\r\n", res); } else { LED0_RUN_ON; printf("Nand flash file system mount ok !\r\n"); } }