野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11792|回复: 2

SD卡FATFS文件系统移植

[复制链接]
发表于 2017-7-20 10:47:22 | 显示全部楼层 |阅读模式
火哥,我一直在用你编的《库开发实战指南》学习stm32F103,SD卡读写实验成功了,可是文件系统移植失败,无法正常读写,书带光盘里的程序也无法实现SD卡读写,我贴出程序帮我看看呗
#include "stm32f10x.h"
#include "sdio_sdcard.h"
#include "usart1.h"
#include "ff.h"

int res;  
int a;

FIL fsrc,fdst;
FATFS fs;
UINT br, bw;            
BYTE buffer[512];      
BYTE textFileBuffer[] = "感谢您选用 野火STM32开发板 !^_^ \r\n";

int main(void)
{       
        USART1_Config();
          NVIC_Configuration();

        printf("\r\n 这是一个MicroSD卡文件系统实验(FATFS R0.09)\n");

        printf ( "\r\n disk_initialize starting......\n " );

        f_mount(0,&fs);                  

        res = f_open(&fdst,"0:/Demo.TXT",FA_CREATE_NEW | FA_WRITE);
         
        if ( res == FR_OK )
         {
                /* 将缓冲区的数据写到文件中 */
                res = f_write(&fdst, textFileBuffer, sizeof(textFileBuffer), &bw);
                printf( "\r\n 文件创建成功 \n" );   
                   f_close(&fdst);      
          }
        else if ( res == FR_EXIST )
         {
                printf( "\r\n 文件已经存在 \n" );
         }

        /* 以只读的方式打开刚刚创建的文件 */
        res = f_open(&fdst, "0:/Demo.TXT", FA_OPEN_EXISTING | FA_READ); /* 打开文件 */               
        br = 1;
        a = 0;       
        for (;;)
        {
                for ( a=0; a<512; a++ )                                   /* 清缓冲区 */
                        buffer[a]=0;
                         
                  res = f_read( &fdst, buffer, sizeof(buffer), &br ); /* 将文件里面的内容读到缓冲区 */
                printf("\r\n %s ", buffer);                                               
                 if (res || br == 0) break;                          /* 错误或者到了文件尾 */                           
        }
        f_close(&fdst);                                              /* 关闭打开的文件 */       
         
  while (1)
  {}
}

回复

使用道具 举报

发表于 2017-7-20 11:15:18 | 显示全部楼层
看res的值,再看值对应的意思,再来找错误
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-20 14:44:06 | 显示全部楼层
非常感谢你的回复!

经调试当程序运行到第一个f_open()函数时 res=3, 3对应的值是 FR_NOT_READY,                /* (3) The physical drive cannot work */
接着往下运行,res=9, 9对应的值是FR_INVALID_OBJECT,                /* (9) The file/directory object is invalid */

可我不知道要去哪里修改错误
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-1-16 13:33 , Processed in 0.031993 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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