|
單片機源程序如下:- /* 包含頭文件 ----------------------------------------------------------------*/
- #include "stm32f10x.h"
- #include "bsp/usart/bsp_debug_usart.h"
- #include "bsp/spi_flash/bsp_spi_flash.h"
- #include "ff.h"
- /* 私有類型定義 --------------------------------------------------------------*/
- /* 私有宏定義 ----------------------------------------------------------------*/
- /* 獲取緩沖區的長度 */
- /* 私有變量 ------------------------------------------------------------------*/
- FATFS fs; /* FatFs文件系統對象 */
- FIL file; /* 文件對象 */
- FRESULT f_res; /* 文件操作結果 */
- UINT fnum; /* 文件成功讀寫數量 */
- BYTE ReadBuffer[1024]={0}; /* 讀緩沖區 */
- BYTE WriteBuffer[] = /* 寫緩沖區*/
- "歡迎使用硬石STM32開發板 今天是個好日子,新建文件系統測試文件\n";
- /* 擴展變量 ------------------------------------------------------------------*/
- /* 私有函數原形 --------------------------------------------------------------*/
- static void printf_fatfs_error(FRESULT fresult);
- /* 函數體 --------------------------------------------------------------------*/
- /**
- * 函數功能: 主函數.
- * 輸入參數: 無
- * 返 回 值: 無
- * 說 明: 無
- */
- int main(void)
- {
- /* 調試串口初始化配置,115200-N-8-1.使能串口發送和接受 */
- DEBUG_USART_Init();
- printf("****** 這是一個基于串行FLASH的FatFS文件系統實驗 ******\n");
-
- //在串行Flash掛載文件系統,文件系統掛載時會對SPI設備初始化
- f_res = f_mount(&fs,"1:",1);
- printf_fatfs_error(f_res);
- /*----------------------- 格式化測試 ---------------------------*/
- /* 如果沒有文件系統就格式化創建創建文件系統 */
- if(f_res == FR_NO_FILESYSTEM)
- {
- printf("》FLASH還沒有文件系統,即將進行格式化...\n");
- /* 格式化 */
- f_res=f_mkfs("1:",0,0);
-
- if(f_res == FR_OK)
- {
- printf("》FLASH已成功格式化文件系統。\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掛載文件系統失敗。(%d)\n",f_res);
- printf("!!可能原因:SPI Flash初始化不成功。\n");
- while(1);
- }
- else
- {
- printf("》文件系統掛載成功,可以進行讀寫測試\n");
- }
-
- /*----------------------- 文件系統測試:寫測試 -----------------------------*/
- /* 打開文件,如果文件不存在則創建它 */
- printf("****** 即將進行文件寫入測試... ******\n");
- f_res = f_open(&file, "1:FatFs讀寫測試文件.txt",FA_CREATE_ALWAYS | FA_WRITE );
- if ( f_res == FR_OK )
- {
- printf("》打開/創建FatFs讀寫測試文件.txt文件成功,向文件寫入數據。\n");
- /* 將指定存儲區內容寫入到文件內 */
- f_res=f_write(&file,WriteBuffer,sizeof(WriteBuffer),&fnum);
- if(f_res==FR_OK)
- {
- printf("》文件寫入成功,寫入字節數據:%d\n",fnum);
- printf("》向文件寫入的數據為:\n%s\n",WriteBuffer);
- }
- else
- {
- printf("!!文件寫入失敗:(%d)\n",f_res);
- }
- /* 不再讀寫,關閉文件 */
- f_close(&file);
- }
- else
- {
- printf("!!打開/創建文件失敗。\n");
- }
-
- /*------------------- 文件系統測試:讀測試 ------------------------------------*/
- printf("****** 即將進行文件讀取測試... ******\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("》文件讀取成功,讀到字節數據:%d\n",fnum);
- printf("》讀取得的文件數據為:\n%s \n", ReadBuffer);
- }
- else
- {
- printf("!!文件讀取失敗:(%d)\n",f_res);
- }
- }
- else
- {
- printf("!!打開文件失敗。\n");
- }
- /* 不再讀寫,關閉文件 */
- f_close(&file);
-
- /* 不再使用文件系統,取消掛載文件系統 */
- f_mount(NULL,"1:",1);
-
- /* 無限循環 */
- while (1)
- {
- }
- }
- /**
- * 函數功能: FatFS文件系統操作結果信息處理.
- * 輸入參數: FatFS文件系統操作結果:FRESULT
- * 返 回 值: 無
- * 說 明: 無
- */
- static void printf_fatfs_error(FRESULT fresult)
- {
- switch(fresult)
- {
- case FR_OK: //(0)
- printf("》操作成功。\n");
- break;
- case FR_DISK_ERR: //(1)
- printf("!!硬件輸入輸出驅動出錯。\n");
- break;
- case FR_INT_ERR: //(2)
- printf("!!斷言錯誤。\n");
- break;
- case FR_NOT_READY: //(3)
- printf("!!物理設備無法工作。\n");
- break;
- case FR_NO_FILE: //(4)
- printf("!!無法找到文件。\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("!!邏輯設備寫保護。\n");
- break;
- case FR_INVALID_DRIVE: //(11)
- printf("!!無效的邏輯設備。\n");
- break;
- case FR_NOT_ENABLED: //(12)
- printf("!!無效的工作區。\n");
- break;
- case FR_NO_FILESYSTEM: //(13)
- printf("!!無效的文件系統。\n");
- break;
- case FR_MKFS_ABORTED: //(14)
- printf("!!因函數參數問題導致f_mkfs函數操作失敗。\n");
- break;
- case FR_TIMEOUT: //(15)
- printf("!!操作超時。\n");
- break;
- case FR_LOCKED: //(16)
- printf("!!文件被保護。\n");
- break;
- case FR_NOT_ENOUGH_CORE: //(17)
- printf("!!長文件名支持獲取堆空間失敗。\n");
- break;
- case FR_TOO_MANY_OPEN_FILES: //(18)
- printf("!!打開太多文件。\n");
- break;
- case FR_INVALID_PARAMETER: // (19)
- printf("!!參數無效。\n");
- break;
- }
- }
- /******************* (C) COPYRIGHT 2015-2020 硬石嵌入式開發團隊 *****END OF FILE****/
復制代碼
|
評分
-
查看全部評分
|