12--SD

在电脑上先把SD卡格式化为FAT32格式,最高支持32G的TF卡(使用Class1的SD卡)

image.png

image.png

image.png

image.png

image.png

测试代码

//int main()函数外


FATFS fs;                                                   /* FatFs文件系统对象 */
FIL fnew;                                                   /* 文件对象 */
FRESULT res_sd;                /* 文件操作结果 */
UINT fnum;                        /* 文件成功读写数量 */
BYTE ReadBuffer[1024]={0};        /* 读缓冲区 */
BYTE WriteBuffer[] =              /* 写缓冲区*/
"欢迎使用野火STM32 F429开发板 今天是个好日子,新建文件系统测试文件\r\n";  

extern FATFS flash_fs;


//int main()函数内


    
    
   printf("****** 这是一个SD卡文件系统实验 ******\r\n");
   //链接驱动器,创建盘符
   FATFS_LinkDriver(&SD_Driver, SDPath);
   //在外部SD卡挂载文件系统,文件系统挂载时会对SD卡初始化
   res_sd = f_mount(&fs,"0:",1);  


   /*----------------------- 格式化测试 ---------------------------*/  
   /* 如果没有文件系统就格式化创建创建文件系统 */
   if(res_sd == FR_NO_FILESYSTEM)
   {
      printf("》SD卡还没有文件系统,即将进行格式化...\r\n");
      /* 格式化 */
//f_mkfs (const TCHAR* path, BYTE opt, DWORD au, void* work, UINT len);  
       
      if(res_sd == FR_OK)
      {
        printf("》SD卡已成功格式化文件系统。\r\n");
        /* 格式化后,先取消挂载 */
        res_sd = f_mount(NULL,"0:",1);          
        /* 重新挂载 */          
        res_sd = f_mount(&fs,"0:",1);
      }
      else
      {
        LED_RED;
        printf("《《格式化失败。》》\r\n");
        while(1);
      }
   }
   else if(res_sd!=FR_OK)
   {
      printf("!!SD卡挂载文件系统失败。(%d)\r\n",res_sd);
      printf("!!可能原因:SD卡初始化不成功。\r\n");
      while(1);
   }
   else
   {
      printf("》文件系统挂载成功,可以进行读写测试\r\n");
   }    
    /*----------------------- 文件系统测试:写测试 -----------------------------*/
    /* 打开文件,如果文件不存在则创建它 */
    printf("\r\n****** 即将进行文件写入测试... ******\r\n");  
    res_sd = f_open(&fnew, "0:FatFs读写测试文件.txt",FA_CREATE_ALWAYS | FA_WRITE );
    if ( res_sd == FR_OK )
    {
      printf("》打开/创建FatFs读写测试文件.txt文件成功,向文件写入数据。\r\n");
      /* 将指定存储区内容写入到文件内 */
      res_sd=f_write(&fnew,WriteBuffer,sizeof(WriteBuffer),&fnum);
      if(res_sd==FR_OK)
      {
        printf("》文件写入成功,写入字节数据:%d\n",fnum);
        printf("》向文件写入的数据为:\r\n%s\r\n",WriteBuffer);
      }
      else
      {
        printf("!!文件写入失败:(%d)\n",res_sd);
      }    
      /* 不再读写,关闭文件 */
      f_close(&fnew);
    }
    else
    {   
      LED_RED;
      printf("!!打开/创建文件失败。\r\n");
    }
    
  /*------------------- 文件系统测试:读测试 ------------------------------------*/
    printf("****** 即将进行文件读取测试... ******\r\n");
    res_sd = f_open(&fnew, "0:FatFs读写测试文件.txt", FA_OPEN_EXISTING | FA_READ);     
    if(res_sd == FR_OK)
    {
      LED_GREEN;
      printf("》打开文件成功。\r\n");
      res_sd = f_read(&fnew, ReadBuffer, sizeof(ReadBuffer), &fnum); 
      if(res_sd==FR_OK)
      {
        printf("》文件读取成功,读到字节数据:%d\r\n",fnum);
        printf("》读取得的文件数据为:\r\n%s \r\n", ReadBuffer);   
      }
      else
      {
        printf("!!文件读取失败:(%d)\n",res_sd);
      }     
    }
    else
    {
      LED_RED;
      printf("!!打开文件失败。\r\n");
    }
    /* 不再读写,关闭文件 */
    f_close(&fnew); 
    
    /* 不再使用文件系统,取消挂载文件系统 */
    f_mount(NULL,"0:",1);
    
    /* 操作完成,停机 */



最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。