OpenEdv-开源电子网

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

用stm32转存TF卡上的照片然后重命名写在TF卡上

[复制链接]

4

主题

9

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2016-6-26
在线时间
9 小时
发表于 2016-7-13 09:40:48 | 显示全部楼层 |阅读模式
本帖最后由 勇哥二代 于 2016-7-13 09:47 编辑

int main(void)
{       
        u8 PicBuf[1024];
        u8 zhang[20];
        u8 zhangyong[20];
        u8 ret = 1;       
        u32                a,b=0,c=0;
  u8 capnumber=1;
        u8 sapnumber=0;
        ret = MSD_Init();
        SD_Card_Ready = ret;//ret=0 £» Ö¤Ã÷Ready
        rat=f_mount(0, &fs);//res=0 £» Ö¤Ã÷OK
while(1)
        {
                memset(zhang,0,20);
                memset(zhangyong,0,20);
               
                if (capnumber<20)
                   {
                       sprintf(zhang, "%0d.jpg", capnumber);
                                   capnumber++;  
                         }   
    else
                        {
                                  f_mount(0, NULL);
                                  return 0 ;
                  }                         
                         sapnumber=capnumber+19;
                         
                if (sapnumber<40)
                   {
                       sprintf(zhangyong, "%0d.jpg", sapnumber);
                         }          
                                          
                        rat=f_open(&fsrc,zhang, FA_OPEN_EXISTING | FA_READ);//res=0 £&#187; &#214;¤&#195;÷OK
                       
            res=f_open(&fdst,zhangyong, FA_CREATE_ALWAYS | FA_WRITE);
                         
         while(1)
           {       
                        rat=f_read(&fsrc,PicBuf,1023,&br);
                       
                        a=br;
                       
            if(a==1023)
                                
            {
                           res=f_write(&fdst,PicBuf,1023,&bw);
                           memset(PicBuf,0,1024);
                  }
       
            else
                  {
                           res=f_write(&fdst,PicBuf,a,&bw);
                           f_close(&fsrc);
                     f_close(&fdst);
                                 break;
                  }
               
          }       
  }


       
}
调试现象:TF卡上本来有20张图片,分别从1.JPG、2.JPG、直到20.JPG,现在我把着20张图片通过stm32,不断读入图片数据让后写在TF卡上,分别命名为21.jpg、22.JPG、直到40.JPG,现在调试出了些问题就是能新建这些文件,但是文件写不上数据,只是一些空的文件,但是缓冲区PicBuf能读到图片数据,就是写不进去,求大神指教,最近刚上路的新手,求各位大神指点!!!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

347

帖子

3

精华

金牌会员

Rank: 6Rank: 6

积分
2078
金钱
2078
注册时间
2014-12-19
在线时间
710 小时
发表于 2016-7-13 09:51:47 | 显示全部楼层
给你个文件复制的参考,你也可以不用里面的内存分配,将它们定义为全局变量即可。
[mw_shl_code=c,true]//将文件 psrc 复制到 pdst,mode:0,不覆盖;1,覆盖
FRESULT fil_copy(const TCHAR *psrc, const TCHAR *pdst, uint8_t mode)
{
        FRESULT res = FR_OK;
        UINT br = 0;
        UINT bw = 0;
        FIL *fsrc = NULL;
        FIL *fdst = NULL;
        uint8_t *fbuf = NULL;

        fsrc = (FIL*)xmalloc(sizeof(FIL)); //申请内存
        fdst = (FIL*)xmalloc(sizeof(FIL));
        fbuf = (uint8_t*)xmalloc(512);
        if (fsrc == NULL || fdst == NULL || fbuf == NULL)
        {
                res = FR_NOT_ENOUGH_CORE;
        }
        else
        {
                if (mode == 0)
                {
                        mode = FA_CREATE_NEW; //不覆盖
                }
                else
                {
                        mode = FA_CREATE_ALWAYS; //覆盖存在的文件
                }

                res = f_open(fsrc, psrc, FA_READ|FA_OPEN_EXISTING); //打开只读文件
                if (res == FR_OK) res = f_open(fdst, pdst, FA_WRITE|mode); //第一个打开成功,才开始打开第二个
                if (res == FR_OK) //两个都成功打开
                {
                        for(;;) //不断复制
                        {
                                res = f_read(fsrc, fbuf, 512, &br); //从源文件读取数据
                                if (res || br == 0) break; //出错或到达文件尾
                                res = f_write(fdst, fbuf, br, &bw); //将数据写入目的文件
                                if (res || bw < br) break; //出错或磁盘满
                        }
                }
                f_close(fsrc);
                f_close(fdst);
        }
        xfree(fsrc); //释放内存
        xfree(fdst);
        xfree(fbuf);
        return res;
}
[/mw_shl_code]

回复 支持 反对

使用道具 举报

4

主题

9

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2016-6-26
在线时间
9 小时
 楼主| 发表于 2016-7-13 10:32:31 | 显示全部楼层
lvehe 发表于 2016-7-13 09:51
给你个文件复制的参考,你也可以不用里面的内存分配,将它们定义为全局变量即可。
[mw_shl_code=c,true]// ...

太感谢你了,你能帮我看看我上面代码有什么问题吗?
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-27 17:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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