找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2969|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

STM32 SPI基于串行Flash的FatFS文件系統(tǒng) 硬石代碼,很實用

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:866526 發(fā)表于 2020-12-23 19:03 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
單片機(jī)源程序如下:
  1. /* 包含頭文件 ----------------------------------------------------------------*/
  2. #include "stm32f10x.h"
  3. #include "bsp/usart/bsp_debug_usart.h"
  4. #include "bsp/spi_flash/bsp_spi_flash.h"
  5. #include "ff.h"

  6. /* 私有類型定義 --------------------------------------------------------------*/
  7. /* 私有宏定義 ----------------------------------------------------------------*/
  8. /* 獲取緩沖區(qū)的長度 */
  9. /* 私有變量 ------------------------------------------------------------------*/
  10. FATFS fs;                                                                                                        /* FatFs文件系統(tǒng)對象 */
  11. FIL file;                                                                                                        /* 文件對象 */
  12. FRESULT f_res;                    /* 文件操作結(jié)果 */
  13. UINT fnum;                                                      /* 文件成功讀寫數(shù)量 */
  14. BYTE ReadBuffer[1024]={0};        /* 讀緩沖區(qū) */
  15. BYTE WriteBuffer[] =              /* 寫緩沖區(qū)*/
  16. "歡迎使用硬石STM32開發(fā)板 今天是個好日子,新建文件系統(tǒng)測試文件\n";  

  17. /* 擴(kuò)展變量 ------------------------------------------------------------------*/
  18. /* 私有函數(shù)原形 --------------------------------------------------------------*/
  19. static void printf_fatfs_error(FRESULT fresult);
  20. /* 函數(shù)體 --------------------------------------------------------------------*/

  21. /**
  22.   * 函數(shù)功能: 主函數(shù).
  23.   * 輸入?yún)?shù): 無
  24.   * 返 回 值: 無
  25.   * 說    明: 無
  26.   */
  27. int main(void)
  28. {   
  29.   /* 調(diào)試串口初始化配置,115200-N-8-1.使能串口發(fā)送和接受 */
  30.   DEBUG_USART_Init();   
  31.   printf("****** 這是一個基于串行FLASH的FatFS文件系統(tǒng)實驗 ******\n");
  32.   
  33.         //在串行Flash掛載文件系統(tǒng),文件系統(tǒng)掛載時會對SPI設(shè)備初始化
  34.         f_res = f_mount(&fs,"1:",1);  
  35.         printf_fatfs_error(f_res);
  36. /*----------------------- 格式化測試 ---------------------------*/  
  37.         /* 如果沒有文件系統(tǒng)就格式化創(chuàng)建創(chuàng)建文件系統(tǒng) */
  38.         if(f_res == FR_NO_FILESYSTEM)
  39.         {
  40.                 printf("》FLASH還沒有文件系統(tǒng),即將進(jìn)行格式化...\n");
  41.     /* 格式化 */
  42.                 f_res=f_mkfs("1:",0,0);                                                       
  43.                
  44.                 if(f_res == FR_OK)
  45.                 {
  46.                         printf("》FLASH已成功格式化文件系統(tǒng)。\n");
  47.       /* 格式化后,先取消掛載 */
  48.                         f_res = f_mount(NULL,"1:",1);                       
  49.       /* 重新掛載        */                       
  50.                         f_res = f_mount(&fs,"1:",1);
  51.                 }
  52.                 else
  53.                 {
  54.                         printf("《《格式化失敗!贰穃n");
  55.                         while(1);
  56.                 }
  57.         }
  58.   else if(f_res!=FR_OK)
  59.   {
  60.     printf("!外部Flash掛載文件系統(tǒng)失敗。(%d)\n",f_res);
  61.     printf("!!可能原因:SPI Flash初始化不成功。\n");
  62.                 while(1);
  63.   }
  64.   else
  65.   {
  66.     printf("》文件系統(tǒng)掛載成功,可以進(jìn)行讀寫測試\n");
  67.   }
  68.   
  69. /*----------------------- 文件系統(tǒng)測試:寫測試 -----------------------------*/
  70.         /* 打開文件,如果文件不存在則創(chuàng)建它 */
  71.         printf("****** 即將進(jìn)行文件寫入測試... ******\n");       
  72.         f_res = f_open(&file, "1:FatFs讀寫測試文件.txt",FA_CREATE_ALWAYS | FA_WRITE );
  73.         if ( f_res == FR_OK )
  74.         {
  75.                 printf("》打開/創(chuàng)建FatFs讀寫測試文件.txt文件成功,向文件寫入數(shù)據(jù)。\n");
  76.     /* 將指定存儲區(qū)內(nèi)容寫入到文件內(nèi) */
  77.                 f_res=f_write(&file,WriteBuffer,sizeof(WriteBuffer),&fnum);
  78.     if(f_res==FR_OK)
  79.     {
  80.       printf("》文件寫入成功,寫入字節(jié)數(shù)據(jù):%d\n",fnum);
  81.       printf("》向文件寫入的數(shù)據(jù)為:\n%s\n",WriteBuffer);
  82.     }
  83.     else
  84.     {
  85.       printf("。∥募䦟懭胧。(%d)\n",f_res);
  86.     }   
  87.                 /* 不再讀寫,關(guān)閉文件 */
  88.     f_close(&file);
  89.         }
  90.         else
  91.         {       
  92.                 printf("。〈蜷_/創(chuàng)建文件失敗。\n");
  93.         }
  94.        
  95. /*------------------- 文件系統(tǒng)測試:讀測試 ------------------------------------*/
  96.         printf("****** 即將進(jìn)行文件讀取測試... ******\n");
  97.         f_res = f_open(&file, "1:FatFs讀寫測試文件.txt", FA_OPEN_EXISTING | FA_READ);          
  98.         if(f_res == FR_OK)
  99.         {
  100.                 printf("》打開文件成功。\n");
  101.                 f_res = f_read(&file, ReadBuffer, sizeof(ReadBuffer), &fnum);
  102.     if(f_res==FR_OK)
  103.     {
  104.       printf("》文件讀取成功,讀到字節(jié)數(shù)據(jù):%d\n",fnum);
  105.       printf("》讀取得的文件數(shù)據(jù)為:\n%s \n", ReadBuffer);       
  106.     }
  107.     else
  108.     {
  109.       printf("。∥募x取失。(%d)\n",f_res);
  110.     }               
  111.         }
  112.         else
  113.         {
  114.                 printf("!!打開文件失敗。\n");
  115.         }
  116.         /* 不再讀寫,關(guān)閉文件 */
  117.         f_close(&file);       
  118.   
  119.         /* 不再使用文件系統(tǒng),取消掛載文件系統(tǒng) */
  120.         f_mount(NULL,"1:",1);
  121.   
  122.   /* 無限循環(huán) */
  123.   while (1)
  124.   {   
  125.   }
  126. }

  127. /**
  128.   * 函數(shù)功能: FatFS文件系統(tǒng)操作結(jié)果信息處理.
  129.   * 輸入?yún)?shù): FatFS文件系統(tǒng)操作結(jié)果:FRESULT
  130.   * 返 回 值: 無
  131.   * 說    明: 無
  132.   */
  133. static void printf_fatfs_error(FRESULT fresult)
  134. {
  135.   switch(fresult)
  136.   {
  137.     case FR_OK:                   //(0)
  138.       printf("》操作成功。\n");
  139.     break;
  140.     case FR_DISK_ERR:             //(1)
  141.       printf("!!硬件輸入輸出驅(qū)動出錯。\n");
  142.     break;
  143.     case FR_INT_ERR:              //(2)
  144.       printf("。嘌藻e誤。\n");
  145.     break;
  146.     case FR_NOT_READY:            //(3)
  147.       printf("!物理設(shè)備無法工作。\n");
  148.     break;
  149.     case FR_NO_FILE:              //(4)
  150.       printf("。o法找到文件。\n");
  151.     break;
  152.     case FR_NO_PATH:              //(5)
  153.       printf("!!無法找到路徑。\n");
  154.     break;
  155.     case FR_INVALID_NAME:         //(6)
  156.       printf("!!無效的路徑名。\n");
  157.     break;
  158.     case FR_DENIED:               //(7)
  159.     case FR_EXIST:                //(8)
  160.       printf("。【芙^訪問。\n");
  161.     break;
  162.     case FR_INVALID_OBJECT:       //(9)
  163.       printf("!!無效的文件或路徑。\n");
  164.     break;
  165.     case FR_WRITE_PROTECTED:      //(10)
  166.       printf("!邏輯設(shè)備寫保護(hù)。\n");
  167.     break;
  168.     case FR_INVALID_DRIVE:        //(11)
  169.       printf("!無效的邏輯設(shè)備。\n");
  170.     break;
  171.     case FR_NOT_ENABLED:          //(12)
  172.       printf("!無效的工作區(qū)。\n");
  173.     break;
  174.     case FR_NO_FILESYSTEM:        //(13)
  175.       printf("!!無效的文件系統(tǒng)。\n");
  176.     break;
  177.     case FR_MKFS_ABORTED:         //(14)
  178.       printf("!因函數(shù)參數(shù)問題導(dǎo)致f_mkfs函數(shù)操作失敗。\n");
  179.     break;
  180.     case FR_TIMEOUT:              //(15)
  181.       printf("。〔僮鞒瑫r。\n");
  182.     break;
  183.     case FR_LOCKED:               //(16)
  184.       printf("!!文件被保護(hù)。\n");
  185.     break;
  186.     case FR_NOT_ENOUGH_CORE:      //(17)
  187.       printf("。¢L文件名支持獲取堆空間失敗。\n");
  188.     break;
  189.     case FR_TOO_MANY_OPEN_FILES:  //(18)
  190.       printf("!!打開太多文件。\n");
  191.     break;
  192.     case FR_INVALID_PARAMETER:    // (19)
  193.       printf("。(shù)無效。\n");
  194.     break;
  195.   }
  196. }
  197. /******************* (C) COPYRIGHT 2015-2020 硬石嵌入式開發(fā)團(tuán)隊 *****END OF FILE****/
復(fù)制代碼


YSF1-047. SPI-基于串行Flash的FatFS文件系統(tǒng).7z

1.32 MB, 下載次數(shù): 62, 下載積分: 黑幣 -5

基于串行Flash的FatFS文件系統(tǒng)

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏5 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表