F429挂载FATFS挂载NAND时换变量挂载失败

2019-07-20 06:09发布

FATFS sd,ex_flash,exnand;
f_mount(&sd,"0:",1);                                         //挂载SD卡
res=f_mount(&ex_flash,"1:",1);                                 //挂载FLASH.
res=f_mount(&exnand,"2:",1);         //挂载NAND FLASH.
将原子哥的实验代码里变量换掉  挂载失败   显示挂载结果时候    只显示FLSH挂载成功 返回结果是0    但程序死到NAND挂载函数里出不来   显示不了返回值



奇怪的是  
f_mount(&sd,"0:",1);                                         //挂载SD卡
res=f_mount(&ex_flash,"1:",1);                                 //挂载FLASH.
res=f_mount(fs[2],"2:",1);         //挂载NAND FLASH.
挂载成功   fs[2]  是 exfuns.c里定义的指针   

更奇怪的是
f_mount(&sd,"0:",1);                                         //挂载SD卡
res=f_mount(&ex_flash,"1:",1);                                 //挂载FLASH.
把NAND挂载删掉时候挂载成功     

更更奇怪的是
f_mount(&sd,"0:",1);                                         //挂载SD卡
res=f_mount(&exnand,"2:",1);         //挂载NAND FLASH.
删掉外部闪存后NAND挂载成功      显示NAND挂载返回值是0


难道是  内存不够 只能挂载2个disk??


工程文件太大   只复制了主函数
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "key.h"
#include "lcd.h"
//#include "string.h"
#include "sdram.h"
#include "malloc.h"
#include "w25qxx.h"
#include "ff.h"
//#include "exfuns.h"
//#include "string.h"
#include "usmart.h"
#include "sdio_sdcard.h"
#include "ftl.h"
/************************************************
ALIENTEK 阿波罗STM32F429开发板实验41
FATFS实验-HAL库函数版
技术支持:www.openedv.com
淘宝店铺:http://eboard.taobao.com  
关注微信公众平台微信号:"正点原子",免费获取STM32资料。
广州市星翼电子科技有限公司  
作者:正点原子 @ALIENTEK
************************************************/

       
        FIL flie;
        FRESULT re;
        char ch[255];  
        u8 size;
        UINT brs=0;
void printffile(u8 *filepath)
{

    re=f_open (&flie,(const TCHAR*)filepath, FA_READ);
       
        if(re==FR_OK)
        {
                size=f_size(&flie);
                f_read (&flie, ch, size,&brs);       
                LCD_ShowString(30,240,200,16,16,ch);
                f_close(&flie);
               
    }


}

int main(void)
{
        u32 total,free;
        u8 t=0;       
        u8 res=0;
       
        FATFS sd,ex_flash,exnand;
       
       
    HAL_Init();                     //初始化HAL库   
    Stm32_Clock_Init(360,25,2,8);   //设置时钟,180Mhz
    delay_init(180);                //初始化延时函数
    uart_init(115200);              //初始化USART
    usmart_dev.init(90);
    LED_Init();                     //初始化LED
    KEY_Init();                     //初始化按键
    SDRAM_Init();                   //SDRAM初始化
    LCD_Init();                     //LCD初始化
        W25QXX_Init();                                    //初始化W25Q256
        my_mem_init(SRAMIN);                    //初始化内部内存池
        my_mem_init(SRAMEX);                    //初始化外部内存池
        my_mem_init(SRAMCCM);                    //初始化CCM内存池
           POINT_COLOR=RED;
        LCD_ShowString(30,50,200,16,16,"Apollo STM32F4/F7");
        LCD_ShowString(30,70,200,16,16,"FATFS TEST");       
        LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");
        LCD_ShowString(30,110,200,16,16,"2016/1/16");                  
        LCD_ShowString(30,130,200,16,16,"Use USMART for test");       

        while(SD_Init())//检测不到SD卡
        {
                LCD_ShowString(30,150,200,16,16,"SD Card Error!");
                delay_ms(500);                                       
                LCD_ShowString(30,150,200,16,16,"Please Check! ");
                delay_ms(500);
                LED0=!LED0;//DS0闪烁
        }

    FTL_Init();

//         exfuns_init();                                                        //为fatfs相关变量申请内存                                 
          f_mount(&sd,"0:",1);                                         //挂载SD卡
        res=f_mount(&ex_flash,"1:",1);                                 //挂载FLASH.
    LCD_ShowNum(30+5*14,190,res,2,16);
        if(res==0X0D)//FLASH磁盘,FAT文件系统错误,重新格式化FLASH
        {
                LCD_ShowString(30,150,200,16,16,"Flash Disk Formatting...");        //格式化FLASH
                res=f_mkfs("1:",1,4096);//格式化FLASH,1,盘符;1,不需要引导区,8个扇区为1个簇
                if(res==0)
                {
                        f_setlabel((const TCHAR *)"1:ALIENTEK");        //设置Flash磁盘的名字为:ALIENTEK
                        LCD_ShowString(30,150,200,16,16,"Flash Disk Format Finish");        //格式化完成
                }else LCD_ShowString(30,150,200,16,16,"Flash Disk Format Error ");        //格式化失败
                delay_ms(1000);
        }

        res=f_mount(&exnand,"2:",1);         //挂载NAND FLASH.       
         LCD_ShowNum(30+8*14,190,res,2,16);  
//        if(res==0X0D)//NAND FLASH磁盘,FAT文件系统错误,重新格式化NAND FLASH
//        {
//                LCD_ShowString(30,150,200,16,16,"NAND Disk Formatting...");//格式化NAND
//                res=f_mkfs("2:",1,4096);//格式化FLASH,2,盘符;1,不需要引导区,8个扇区为1个簇
//                if(res==0)
//                {
//                        f_setlabel((const TCHAR *)"2:NANDDISK");        //设置Flash磁盘的名字为:NANDDISK
//                        LCD_ShowString(30,150,200,16,16,"NAND Disk Format Finish");                //格式化完成
//                }else LCD_ShowString(30,150,200,16,16,"NAND Disk Format Error ");        //格式化失败
//                delay_ms(1000);
//        }   
        LCD_Fill(30,150,240,150+16,WHITE);                //清除显示                          
//        while(exf_getfree("0:",&total,&free))        //得到SD卡的总容量和剩余容量
//        {
//                LCD_ShowString(30,150,200,16,16,"SD Card Fatfs Error!");
//                delay_ms(200);
//                LCD_Fill(30,150,240,150+16,WHITE);        //清除显示                          
//                delay_ms(200);
//                LED0=!LED0;//DS0闪烁
//        }                                                                                                                                      
//         POINT_COLOR=BLUE;//设置字体为蓝 {MOD}          
//        LCD_ShowString(30,150,200,16,16,"FATFS OK!");         
//        LCD_ShowString(30,170,200,16,16,"SD Total Size:     MB");         
//        LCD_ShowString(30,190,200,16,16,"SD  Free Size:     MB");             
//         LCD_ShowNum(30+8*14,170,total>>10,5,16);        //显示SD卡总容量 MB
//         LCD_ShowNum(30+8*14,190,free>>10,5,16);     //显示SD卡剩余容量 MB       

        printffile("0:/ww.txt");









       
        while(1)
        {
                t++;
                delay_ms(200);                                           
                LED0=!LED0;
        }
}



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
Kinglkf2R
1楼-- · 2019-07-20 10:04
为题找到了   主要是应为定义  FATFS sd,ex_flash,exnand; 的时候放到了main函数里边   成为了局部变量   所以导致初始化失败   如果放到main函数的外边 作为全局变量   问题解决    至于上边所叙述的现象大概是应为调用变量时候出现的错误    具体的解释留给大家解答
Kinglkf2R
2楼-- · 2019-07-20 10:43
 精彩回答 2  元偷偷看……
Kinglkf2R
3楼-- · 2019-07-20 16:31
顶顶顶顶

一周热门 更多>