|
單片機(jī)源程序如下:- /* 包含頭文件 ----------------------------------------------------------------*/
- #include "stm32f10x.h"
- #include "bsp/usart/bsp_debug_usart.h"
- #include "bsp/spi_flash/bsp_spi_flash.h"
- #include "ff.h"
- /* 私有類型定義 --------------------------------------------------------------*/
- /* 私有宏定義 ----------------------------------------------------------------*/
- /* 獲取緩沖區(qū)的長度 */
- /* 私有變量 ------------------------------------------------------------------*/
- FATFS fs; /* FatFs文件系統(tǒng)對象 */
- FIL file; /* 文件對象 */
- FRESULT f_res; /* 文件操作結(jié)果 */
- UINT fnum; /* 文件成功讀寫數(shù)量 */
- BYTE ReadBuffer[1024]={0}; /* 讀緩沖區(qū) */
- BYTE WriteBuffer[] = /* 寫緩沖區(qū)*/
- "歡迎使用硬石STM32開發(fā)板 今天是個好日子,新建文件系統(tǒng)測試文件\n";
- /* 擴(kuò)展變量 ------------------------------------------------------------------*/
- /* 私有函數(shù)原形 --------------------------------------------------------------*/
- static void printf_fatfs_error(FRESULT fresult);
- /* 函數(shù)體 --------------------------------------------------------------------*/
- /**
- * 函數(shù)功能: 主函數(shù).
- * 輸入?yún)?shù): 無
- * 返 回 值: 無
- * 說 明: 無
- */
- int main(void)
- {
- /* 調(diào)試串口初始化配置,115200-N-8-1.使能串口發(fā)送和接受 */
- DEBUG_USART_Init();
- printf("****** 這是一個基于串行FLASH的FatFS文件系統(tǒng)實驗 ******\n");
-
- //在串行Flash掛載文件系統(tǒng),文件系統(tǒng)掛載時會對SPI設(shè)備初始化
- f_res = f_mount(&fs,"1:",1);
- printf_fatfs_error(f_res);
- /*----------------------- 格式化測試 ---------------------------*/
- /* 如果沒有文件系統(tǒng)就格式化創(chuàng)建創(chuàng)建文件系統(tǒng) */
- if(f_res == FR_NO_FILESYSTEM)
- {
- printf("》FLASH還沒有文件系統(tǒng),即將進(jìn)行格式化...\n");
- /* 格式化 */
- f_res=f_mkfs("1:",0,0);
-
- if(f_res == FR_OK)
- {
- printf("》FLASH已成功格式化文件系統(tǒng)。\n");
- /* 格式化后,先取消掛載 */
- f_res = f_mount(NULL,"1:",1);
- /* 重新掛載 */
- f_res = f_mount(&fs,"1:",1);
- }
- else
- {
- printf("《《格式化失敗!贰穃n");
- while(1);
- }
- }
- else if(f_res!=FR_OK)
- {
- printf("!外部Flash掛載文件系統(tǒng)失敗。(%d)\n",f_res);
- printf("!!可能原因:SPI Flash初始化不成功。\n");
- while(1);
- }
- else
- {
- printf("》文件系統(tǒng)掛載成功,可以進(jìn)行讀寫測試\n");
- }
-
- /*----------------------- 文件系統(tǒng)測試:寫測試 -----------------------------*/
- /* 打開文件,如果文件不存在則創(chuàng)建它 */
- printf("****** 即將進(jìn)行文件寫入測試... ******\n");
- f_res = f_open(&file, "1:FatFs讀寫測試文件.txt",FA_CREATE_ALWAYS | FA_WRITE );
- if ( f_res == FR_OK )
- {
- printf("》打開/創(chuàng)建FatFs讀寫測試文件.txt文件成功,向文件寫入數(shù)據(jù)。\n");
- /* 將指定存儲區(qū)內(nèi)容寫入到文件內(nèi) */
- f_res=f_write(&file,WriteBuffer,sizeof(WriteBuffer),&fnum);
- if(f_res==FR_OK)
- {
- printf("》文件寫入成功,寫入字節(jié)數(shù)據(jù):%d\n",fnum);
- printf("》向文件寫入的數(shù)據(jù)為:\n%s\n",WriteBuffer);
- }
- else
- {
- printf("。∥募䦟懭胧。(%d)\n",f_res);
- }
- /* 不再讀寫,關(guān)閉文件 */
- f_close(&file);
- }
- else
- {
- printf("。〈蜷_/創(chuàng)建文件失敗。\n");
- }
-
- /*------------------- 文件系統(tǒng)測試:讀測試 ------------------------------------*/
- printf("****** 即將進(jìn)行文件讀取測試... ******\n");
- f_res = f_open(&file, "1:FatFs讀寫測試文件.txt", FA_OPEN_EXISTING | FA_READ);
- if(f_res == FR_OK)
- {
- printf("》打開文件成功。\n");
- f_res = f_read(&file, ReadBuffer, sizeof(ReadBuffer), &fnum);
- if(f_res==FR_OK)
- {
- printf("》文件讀取成功,讀到字節(jié)數(shù)據(jù):%d\n",fnum);
- printf("》讀取得的文件數(shù)據(jù)為:\n%s \n", ReadBuffer);
- }
- else
- {
- printf("。∥募x取失。(%d)\n",f_res);
- }
- }
- else
- {
- printf("!!打開文件失敗。\n");
- }
- /* 不再讀寫,關(guān)閉文件 */
- f_close(&file);
-
- /* 不再使用文件系統(tǒng),取消掛載文件系統(tǒng) */
- f_mount(NULL,"1:",1);
-
- /* 無限循環(huán) */
- while (1)
- {
- }
- }
- /**
- * 函數(shù)功能: FatFS文件系統(tǒng)操作結(jié)果信息處理.
- * 輸入?yún)?shù): FatFS文件系統(tǒng)操作結(jié)果:FRESULT
- * 返 回 值: 無
- * 說 明: 無
- */
- static void printf_fatfs_error(FRESULT fresult)
- {
- switch(fresult)
- {
- case FR_OK: //(0)
- printf("》操作成功。\n");
- break;
- case FR_DISK_ERR: //(1)
- printf("!!硬件輸入輸出驅(qū)動出錯。\n");
- break;
- case FR_INT_ERR: //(2)
- printf("。嘌藻e誤。\n");
- break;
- case FR_NOT_READY: //(3)
- printf("!物理設(shè)備無法工作。\n");
- break;
- case FR_NO_FILE: //(4)
- printf("。o法找到文件。\n");
- break;
- case FR_NO_PATH: //(5)
- printf("!!無法找到路徑。\n");
- break;
- case FR_INVALID_NAME: //(6)
- printf("!!無效的路徑名。\n");
- break;
- case FR_DENIED: //(7)
- case FR_EXIST: //(8)
- printf("。【芙^訪問。\n");
- break;
- case FR_INVALID_OBJECT: //(9)
- printf("!!無效的文件或路徑。\n");
- break;
- case FR_WRITE_PROTECTED: //(10)
- printf("!邏輯設(shè)備寫保護(hù)。\n");
- break;
- case FR_INVALID_DRIVE: //(11)
- printf("!無效的邏輯設(shè)備。\n");
- break;
- case FR_NOT_ENABLED: //(12)
- printf("!無效的工作區(qū)。\n");
- break;
- case FR_NO_FILESYSTEM: //(13)
- printf("!!無效的文件系統(tǒng)。\n");
- break;
- case FR_MKFS_ABORTED: //(14)
- printf("!因函數(shù)參數(shù)問題導(dǎo)致f_mkfs函數(shù)操作失敗。\n");
- break;
- case FR_TIMEOUT: //(15)
- printf("。〔僮鞒瑫r。\n");
- break;
- case FR_LOCKED: //(16)
- printf("!!文件被保護(hù)。\n");
- break;
- case FR_NOT_ENOUGH_CORE: //(17)
- printf("。¢L文件名支持獲取堆空間失敗。\n");
- break;
- case FR_TOO_MANY_OPEN_FILES: //(18)
- printf("!!打開太多文件。\n");
- break;
- case FR_INVALID_PARAMETER: // (19)
- printf("。(shù)無效。\n");
- break;
- }
- }
- /******************* (C) COPYRIGHT 2015-2020 硬石嵌入式開發(fā)團(tuán)隊 *****END OF FILE****/
復(fù)制代碼
|
評分
-
查看全部評分
|