OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9829|回复: 8

STM32F407 移植FATFS文件系统操作SD卡时 f_open() 返回12的问题

[复制链接]

2

主题

5

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2017-10-17
在线时间
3 小时
发表于 2017-10-17 21:10:14 | 显示全部楼层 |阅读模式
5金钱
各位大神,小弟用STM32F407移植FATFS时,f_mount返回值为0,SD卡初始也成功,但是在调用f_open却返回12(FR_NOT_ENABLED),请问怎么解决啊!贴出main 函数代码。。
int main(void)
{        
       
//        u8 res=0;       
        unsigned int i;
         BYTE buffer[1024];    // file copy buffer           // Work area (file system object) for logical drive   
   FIL fsrc;            // file objects   
   FRESULT res=1;         // FatFs function common result code  
         FATFS fatfs;
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//
        delay_init(168);  //
        uart_init(115200);                //
        LED_Init();                               
        while(SD_Init()){
                printf("Please Check!");
        }
        disk_initialize(0);
        printf("Now, I'll read file 'test.txt'.\n");   
        res =f_mount(&fatfs,"0:/",1);
        printf("%d\n",res);
        res = f_open(&fsrc,"test.txt",FA_OPEN_ALWAYS|FA_READ|FA_WRITE);  
                printf("%d",res);
         if (res)   
   {
       printf("Can't open test.txt for read.\n");  
                         f_mount(NULL,"0:/",1);
         }else
                {
                        for (;;) {   
       res = f_read(&fsrc, buffer, sizeof(buffer), &br);   
       if (res || br == 0) break;   // error or eof   
       for( i = 0; i < br; ++i )   
                   putchar(buffer);   
   }   

   f_close(&fsrc);   
                }
        }

最佳答案

查看完整内容[请看2#楼]

解决了,谢谢原子哥,把buffer[512]定义成全局变量就可以了,这是为啥呢。。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

5

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2017-10-17
在线时间
3 小时
 楼主| 发表于 2017-10-17 21:10:15 | 显示全部楼层
正点原子 发表于 2017-10-18 00:06
不要那么大的局部变量!!

解决了,谢谢原子哥,把buffer[512]定义成全局变量就可以了,这是为啥呢。。
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2017-10-10
在线时间
1 小时
发表于 2017-10-17 21:22:30 | 显示全部楼层
文件路径错了, f_open(&fsrc,"0:/test.txt",FA_OPEN_ALWAYS|FA_READ|FA_WRITE);
回复

使用道具 举报

2

主题

5

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2017-10-17
在线时间
3 小时
 楼主| 发表于 2017-10-17 21:44:03 | 显示全部楼层
周永帅 发表于 2017-10-17 21:22
文件路径错了, f_open(&fsrc,"0:/test.txt",FA_OPEN_ALWAYS|FA_READ|FA_WRITE);

这样也试过了,不行
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2017-10-18 00:06:39 | 显示全部楼层
不要那么大的局部变量!!
回复

使用道具 举报

2

主题

5

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2017-10-17
在线时间
3 小时
 楼主| 发表于 2017-10-18 10:38:54 | 显示全部楼层
正点原子 发表于 2017-10-18 00:06
不要那么大的局部变量!!

把buffer改成512了。。还是不行啊
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2020-4-30
在线时间
2 小时
发表于 2020-4-30 10:52:51 | 显示全部楼层
正点原子 发表于 2017-10-18 00:06
不要那么大的局部变量!!

我也是stm32f407的开发板 移植发现挂载sd卡的时候f_open都正常,建立txt  pdf文档都可以,(用读卡器历程可以看结果)当我挂载外部flash的时候,用f_open()        函数时候   就返回           FR_NOT_ENABLED   
             我弄了好几天,就是这个地方过不去:                                   
         fs = FatFs[vol];                                        /* Get pointer to the file system object */
        if (!fs) return FR_NOT_ENABLED;                /* Is the file system object available? */


我用的是视频播放器的历程,用 f_mount(fs[1],"1:",1);和f_mount(fs[0],"0:",1);切换 第一次学习,希望原子哥能帮帮忙
回复

使用道具 举报

2

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2020-3-15
在线时间
29 小时
发表于 2020-7-11 12:39:09 | 显示全部楼层
15140497862 发表于 2020-4-30 10:52
我也是stm32f407的开发板 移植发现挂载sd卡的时候f_open都正常,建立txt  pdf文档都可以,(用读卡器历程 ...

一样的问题 您解决了没
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2020-4-30
在线时间
2 小时
发表于 2021-8-5 15:51:37 | 显示全部楼层
Lxy1592762658 发表于 2020-7-11 12:39
一样的问题 您解决了没

解决了
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-27 05:28

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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