OpenEdv-开源电子网

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

往sd卡写东西 ,f_open成功,用f_write写不进去东西,而且返回值是0.!???

[复制链接]

5

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2014-8-29
在线时间
11 小时
发表于 2015-8-7 16:01:46 | 显示全部楼层 |阅读模式
5金钱
 买了原子的摄像头,想把采集的像素存放到sd卡里面去,240*360*2个字节的数据..一张图片

然后在FATFS上面移植了摄像头的文件,0v7670.h哪几个.

现在写了两个函数,问题很多啊
 
void textsd(void)
{
    const u8 *pname="0:/picture/picture.bin";    
    FIL* fsrc; //用来存储文件对象的空结构体的指针
    u8 res;
    u16 br,num;
    u8 buffer[512];                                    //存放摄像头颜色的数组
    u32 j;
     u16 color;    
    fsrc=(FIL*)mymalloc(sizeof(FIL));//申请内存
//**********************************移植的摄像头寄存器版本的**************************/
    LCD_Scan_Dir(U2D_L2R);        //从上到下,从左到右
    LCD_SetCursor(0x00,0x0000);    //设置光标位置
    LCD_WriteRAM_Prepare();     //开始写入GRAM    
     OV7670_CS=0;    
     OV7670_RRST=0;                //开始复位读指针
    OV7670_RCK=0;
    OV7670_RCK=1;
    OV7670_RCK=0;
    OV7670_RRST=1;                //复位读指针结束
    OV7670_RCK=1;
    num=0;
/************************************************************************************/
    res = f_open(fsrc,(const TCHAR*)pname,FA_OPEN_ALWAYS|FA_WRITE);//打开SD卡里面的文件
    if(res==0)                                                                //打开成功
    {       
            for(j=0;j<76800;j++)
            {    
                GPIOB->CRL=0X88888888;           
                OV7670_RCK=0;
                buffer[num++]=OV7670_DATA;        //读数据
                color<<=8;    
                OV7670_RCK=1;     
                delay_ms(5);
                OV7670_RCK=0;                //读低八位的时钟信号
                buffer[num++]=OV7670_DATA;        //读数据        
                OV7670_RCK=1;
                GPIOB->CRL=0X33333333;    
                if((num>511)||(j>76799))
                {
                    num=0;
                    res = f_write(fsrc,buffer,sizeof(buffer),(UINT*)&br);
                    if(res!=0)printf("wrong");
                    LED0=!LED0;
                    printf("go on");
                }
            }
            OV7670_CS=1;                             
            OV7670_RCK=0;
            OV7670_RCK=1;
            LCD_Scan_Dir(DFT_SCAN_DIR);    //恢复默认扫描方向                      
    }
    f_close(fsrc);
    delay_ms(500);
    LED0=0;
}

void texttext(void)
{
    const u8 *pppname="0:/picture/text.bin";    
    FIL* fsrc; //用来存储文件对象的空结构体的指针
    u8 i,res=1;
    UINT br;
    DIR dir;
    FILINFO fno; //指向文件信息结构体,用来存储读取到的文件信息
    unsigned char buffer1[]={"hello!"};
    fsrc=(FIL*)mymalloc(sizeof(FIL));//申请内存
    res = f_open(fsrc,(const TCHAR*)pppname,FA_OPEN_ALWAYS| FA_WRITE);    
    if(res==0)
    {
        for(;;)
        {
             for(i=0;i<10;i++)
            {
               res = f_write(fsrc,buffer1,sizeof(buffer1),(UINT*)&br);    
               printf("xie le  yi ci ");
            }
            if(res== 0)    
            {          
                 delay_ms(500);
                printf("oken");
                break;
            }
        }
        f_close(fsrc);
        delay_ms(500);
    }
}



textsd(void) 只能创建一个文件,完全写不进去东西,
res = f_write(fsrc,buffer,sizeof(buffer),(UINT*)&br);
调试之后是,res=0,不是res=0说明f_write就写成功了吗?,串口就是没打印wrong,但是打开SD卡也没数据写进去..


第二个函数texttext(void)能写的进去, 但他是乱码!!!!??why


大虾们求助

最佳答案

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

问题解决了,自己手贱,红色代码部分加了个 delay_ms(5); 和文档的时序对不上,现在搞定
有深圳的大牛带我飞吗?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2014-8-29
在线时间
11 小时
 楼主| 发表于 2015-8-7 16:01:47 | 显示全部楼层
问题解决了,自己手贱,红色代码部分加了个

delay_ms(5);

和文档的时序对不上,现在搞定
有深圳的大牛带我飞吗?
回复

使用道具 举报

42

主题

358

帖子

0

精华

高级会员

Rank: 4

积分
890
金钱
890
注册时间
2014-8-16
在线时间
193 小时
发表于 2015-8-7 17:00:04 | 显示全部楼层
你看看是不是你fatfs移植的有问题?
回复

使用道具 举报

5

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2014-8-29
在线时间
11 小时
 楼主| 发表于 2015-8-7 17:03:29 | 显示全部楼层
回复【2楼】Theone:
---------------------------------
直接拿了原子的例程,移植的是0v7670,fatfs应该没问题的
有深圳的大牛带我飞吗?
回复

使用道具 举报

42

主题

358

帖子

0

精华

高级会员

Rank: 4

积分
890
金钱
890
注册时间
2014-8-16
在线时间
193 小时
发表于 2015-8-7 17:05:59 | 显示全部楼层
回复【3楼】放狼的爷们:
---------------------------------
慢着!你直接写入的读出来的值?你用winhex打开看一下是不是写进去了
第二个函数,你试试往txt文件里写hello试试
回复

使用道具 举报

5

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2014-8-29
在线时间
11 小时
 楼主| 发表于 2015-8-18 14:01:41 | 显示全部楼层
for(j=0;j<76800;j++)
            {    
                GPIOB->CRL=0X88888888;           
                OV7670_RCK=0;
                buffer[num]=OV7670_DATA;        //读数据
                color<<=8;    
                OV7670_RCK=1;     
                num++;
                OV7670_RCK=0;                //读低八位的时钟信号
                buffer[num++]=OV7670_DATA;        //读数据        
                OV7670_RCK=1;
                GPIOB->CRL=0X33333333;    
                if((num>511)||(j>76799))
                {
                    num=0;
                    res = f_write(fsrc,buffer,sizeof(buffer),(UINT*)&br);
                    if(res!=0)printf("wrong");
                    LED0=!LED0;
                    printf("go on");
                }
            }
有深圳的大牛带我飞吗?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-16 21:09

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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