找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2105|回复: 0
打印 上一主题 下一主题
收起左侧

STM32 SPI基于串行Flash的FatFS文件系统 硬石代码,很实用

[复制链接]
跳转到指定楼层
楼主
ID:866526 发表于 2020-12-23 19:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机源程序如下:
  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. /* 获取缓冲区的长度 */
  9. /* 私有变量 ------------------------------------------------------------------*/
  10. FATFS fs;                                                                                                        /* FatFs文件系统对象 */
  11. FIL file;                                                                                                        /* 文件对象 */
  12. FRESULT f_res;                    /* 文件操作结果 */
  13. UINT fnum;                                                      /* 文件成功读写数量 */
  14. BYTE ReadBuffer[1024]={0};        /* 读缓冲区 */
  15. BYTE WriteBuffer[] =              /* 写缓冲区*/
  16. "欢迎使用硬石STM32开发板 今天是个好日子,新建文件系统测试文件\n";  

  17. /* 扩展变量 ------------------------------------------------------------------*/
  18. /* 私有函数原形 --------------------------------------------------------------*/
  19. static void printf_fatfs_error(FRESULT fresult);
  20. /* 函数体 --------------------------------------------------------------------*/

  21. /**
  22.   * 函数功能: 主函数.
  23.   * 输入参数: 无
  24.   * 返 回 值: 无
  25.   * 说    明: 无
  26.   */
  27. int main(void)
  28. {   
  29.   /* 调试串口初始化配置,115200-N-8-1.使能串口发送和接受 */
  30.   DEBUG_USART_Init();   
  31.   printf("****** 这是一个基于串行FLASH的FatFS文件系统实验 ******\n");
  32.   
  33.         //在串行Flash挂载文件系统,文件系统挂载时会对SPI设备初始化
  34.         f_res = f_mount(&fs,"1:",1);  
  35.         printf_fatfs_error(f_res);
  36. /*----------------------- 格式化测试 ---------------------------*/  
  37.         /* 如果没有文件系统就格式化创建创建文件系统 */
  38.         if(f_res == FR_NO_FILESYSTEM)
  39.         {
  40.                 printf("》FLASH还没有文件系统,即将进行格式化...\n");
  41.     /* 格式化 */
  42.                 f_res=f_mkfs("1:",0,0);                                                       
  43.                
  44.                 if(f_res == FR_OK)
  45.                 {
  46.                         printf("》FLASH已成功格式化文件系统。\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挂载文件系统失败。(%d)\n",f_res);
  61.     printf("!!可能原因:SPI Flash初始化不成功。\n");
  62.                 while(1);
  63.   }
  64.   else
  65.   {
  66.     printf("》文件系统挂载成功,可以进行读写测试\n");
  67.   }
  68.   
  69. /*----------------------- 文件系统测试:写测试 -----------------------------*/
  70.         /* 打开文件,如果文件不存在则创建它 */
  71.         printf("****** 即将进行文件写入测试... ******\n");       
  72.         f_res = f_open(&file, "1:FatFs读写测试文件.txt",FA_CREATE_ALWAYS | FA_WRITE );
  73.         if ( f_res == FR_OK )
  74.         {
  75.                 printf("》打开/创建FatFs读写测试文件.txt文件成功,向文件写入数据。\n");
  76.     /* 将指定存储区内容写入到文件内 */
  77.                 f_res=f_write(&file,WriteBuffer,sizeof(WriteBuffer),&fnum);
  78.     if(f_res==FR_OK)
  79.     {
  80.       printf("》文件写入成功,写入字节数据:%d\n",fnum);
  81.       printf("》向文件写入的数据为:\n%s\n",WriteBuffer);
  82.     }
  83.     else
  84.     {
  85.       printf("!!文件写入失败:(%d)\n",f_res);
  86.     }   
  87.                 /* 不再读写,关闭文件 */
  88.     f_close(&file);
  89.         }
  90.         else
  91.         {       
  92.                 printf("!!打开/创建文件失败。\n");
  93.         }
  94.        
  95. /*------------------- 文件系统测试:读测试 ------------------------------------*/
  96.         printf("****** 即将进行文件读取测试... ******\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("》文件读取成功,读到字节数据:%d\n",fnum);
  105.       printf("》读取得的文件数据为:\n%s \n", ReadBuffer);       
  106.     }
  107.     else
  108.     {
  109.       printf("!!文件读取失败:(%d)\n",f_res);
  110.     }               
  111.         }
  112.         else
  113.         {
  114.                 printf("!!打开文件失败。\n");
  115.         }
  116.         /* 不再读写,关闭文件 */
  117.         f_close(&file);       
  118.   
  119.         /* 不再使用文件系统,取消挂载文件系统 */
  120.         f_mount(NULL,"1:",1);
  121.   
  122.   /* 无限循环 */
  123.   while (1)
  124.   {   
  125.   }
  126. }

  127. /**
  128.   * 函数功能: FatFS文件系统操作结果信息处理.
  129.   * 输入参数: FatFS文件系统操作结果: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("!!硬件输入输出驱动出错。\n");
  142.     break;
  143.     case FR_INT_ERR:              //(2)
  144.       printf("!!断言错误。\n");
  145.     break;
  146.     case FR_NOT_READY:            //(3)
  147.       printf("!!物理设备无法工作。\n");
  148.     break;
  149.     case FR_NO_FILE:              //(4)
  150.       printf("!!无法找到文件。\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("!!逻辑设备写保护。\n");
  167.     break;
  168.     case FR_INVALID_DRIVE:        //(11)
  169.       printf("!!无效的逻辑设备。\n");
  170.     break;
  171.     case FR_NOT_ENABLED:          //(12)
  172.       printf("!!无效的工作区。\n");
  173.     break;
  174.     case FR_NO_FILESYSTEM:        //(13)
  175.       printf("!!无效的文件系统。\n");
  176.     break;
  177.     case FR_MKFS_ABORTED:         //(14)
  178.       printf("!!因函数参数问题导致f_mkfs函数操作失败。\n");
  179.     break;
  180.     case FR_TIMEOUT:              //(15)
  181.       printf("!!操作超时。\n");
  182.     break;
  183.     case FR_LOCKED:               //(16)
  184.       printf("!!文件被保护。\n");
  185.     break;
  186.     case FR_NOT_ENOUGH_CORE:      //(17)
  187.       printf("!!长文件名支持获取堆空间失败。\n");
  188.     break;
  189.     case FR_TOO_MANY_OPEN_FILES:  //(18)
  190.       printf("!!打开太多文件。\n");
  191.     break;
  192.     case FR_INVALID_PARAMETER:    // (19)
  193.       printf("!!参数无效。\n");
  194.     break;
  195.   }
  196. }
  197. /******************* (C) COPYRIGHT 2015-2020 硬石嵌入式开发团队 *****END OF FILE****/
复制代码


YSF1-047. SPI-基于串行Flash的FatFS文件系统.7z

1.32 MB, 下载次数: 61, 下载积分: 黑币 -5

基于串行Flash的FatFS文件系统

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏5 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表