OpenEdv-开源电子网

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

STM32 FATS 0.13a移植可用代码

[复制链接]

4

主题

116

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4089
金钱
4089
注册时间
2017-11-15
在线时间
331 小时
发表于 2018-3-1 17:25:15 | 显示全部楼层 |阅读模式
本帖最后由 IdeaMing 于 2018-3-1 17:26 编辑

使用STM32F103ZET6,SDIO接口读写TF卡,完成后测试了一下读文件,读文件列表,文件追加等功能。
测试完美读出bin文件,感觉以后可以做个自动升级的IAP程序了。
部分代码
[mw_shl_code=c,true]void SD_ReadTest(void)
{
    unsigned int offset = 0;
    disk_initialize(DEV_MMC);
    res = f_mount(&fs,"1:",0);    // 挂载
    res = f_open(&fsrc,"1:/KILLL.BAT",FA_OPEN_EXISTING | FA_READ); // 打开文件
    if(res != FR_OK)
    {
        printf("%d ",res);
        printf("open error\r\n");
    }
    else
    {               
        file_size = f_size(&fsrc);               
        printf("filesize:%d\r\n",file_size);
        do{
            res = f_lseek(&fsrc,offset);   // 指针往后推128
            res = f_read(&fsrc,buffer,sizeof(buffer),&br);   
            if(res == FR_OK)
            {                     
                USART1_SendBuf(buffer,br);
                printf("\r\n");        
            }
            else
            {
                printf("read fils err\r\n");
            }
            offset += 128;            
            file_size -= 128;
        }while(file_size>128);
        if(file_size>0)
        {
            res = f_read(&fsrc,buffer,file_size,&br);   
            if(res == FR_OK)
            {                     
                USART1_SendBuf(buffer,br);               
                printf("EndOfFile\r\n");        
            }
            else
            {
                printf("read fils err\r\n");
            }
        }
        f_close(&fsrc);// 关闭文件
    }
    f_mount(NULL,"1:",0); //卸载磁盘
}  [/mw_shl_code]
以上是读取文件,文件名自己定义。
[mw_shl_code=c,true]void SD_WriteTest(void)
{
    unsigned char write_f[20]={"ming write file test"};
    disk_initialize(0);
    res = f_mount(&fs,"1:",0);  
    res = open_append(&fdst,"1:/testa.txt");
   
  //  res = f_open(&fdst, "1:/testa.txt", FA_CREATE_ALWAYS | FA_WRITE);   
    if(res != FR_OK)
    {
        printf("open error\r\n");
    }
    else
    {
        f_printf(&fdst, "%d\n", runtime);  
        //res = f_write(&fdst,write_f,sizeof(write_f),&bw);
        //res = f_puts("hello",&fdst);
        if(res <0)
        {
            printf("write err! %d\r\n",res);                       
        }
        else
        {
            printf("write ok! %d\r\n",res);   
        }
        f_close(&fdst);
    }
    f_mount(NULL,"1:",0);// 卸载
    printf("write test passed! \r\n");
}[/mw_shl_code]
以上是追加文件,还需要下面这段
[mw_shl_code=c,true]FRESULT open_append (
    FIL* fp,            /* [OUT] File object to create */
    const char* path    /* [IN]  File name to be opened */
)
{
    FRESULT fr;

    /* Opens an existing file. If not exist, creates a new file. */
    fr = f_open(fp, path, FA_WRITE | FA_OPEN_ALWAYS);
    if (fr == FR_OK) {
        /* Seek to end of the file to append data */
        fr = f_lseek(fp, f_size(fp));
        if (fr != FR_OK)
            f_close(fp);
    }
    return fr;
}[/mw_shl_code]
下面是读文件列表
[mw_shl_code=c,true]void ReadSDFile(void)
{
//  FIL file;
  FILINFO finfo;
  DIR dirs;
  int i_name=0;
//  char *fn;
  f_mount(&fs,"1:",1);
  res =  f_opendir(&dirs, "1:/");
  if (res == FR_OK)
  {
    while (f_readdir(&dirs, &finfo) == FR_OK)
        {
          if (finfo.fattrib & AM_ARC)
      {
        if(!finfo.fname[0])        break;  //文件名不为空,如果为空,则表明该目录下面的文件已经读完了                           
                stringcopy(buff_filename[i_name], (BYTE*)finfo.fname);
                i_name++;
        file_cnt = i_name;        
          }
        }
    f_close(&fsrc);
    i_name = 0;
    do{        
        //USART1_SendBuf(buff_filename[i_name],br);               
        printf("%s\r\n",buff_filename[i_name]);           
        i_name++;
        file_cnt--;
    }while(file_cnt);
  }
  f_mount(NULL,"1:",1);
}[/mw_shl_code]
STM32_SDIO_FAT13.zip (1.44 MB, 下载次数: 124)
www.littlebutler.top
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
103
金钱
103
注册时间
2017-7-1
在线时间
23 小时
发表于 2018-3-8 15:32:26 | 显示全部楼层
回复 支持 反对

使用道具 举报

4

主题

116

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4089
金钱
4089
注册时间
2017-11-15
在线时间
331 小时
 楼主| 发表于 2018-3-9 09:42:01 | 显示全部楼层

就在论坛吧,方便大家解决问题。
www.littlebutler.top
回复 支持 反对

使用道具 举报

8

主题

185

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2019-7-15
在线时间
47 小时
发表于 2019-8-16 16:01:28 | 显示全部楼层
触类旁通,点赞
回复 支持 反对

使用道具 举报

8

主题

47

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
498
金钱
498
注册时间
2018-6-27
在线时间
85 小时
发表于 2019-8-16 18:31:18 | 显示全部楼层
读取文件名,中文乱码
回复 支持 反对

使用道具 举报

4

主题

116

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4089
金钱
4089
注册时间
2017-11-15
在线时间
331 小时
 楼主| 发表于 2019-8-19 16:47:37 | 显示全部楼层
七火 发表于 2019-8-16 18:31
读取文件名,中文乱码

这个我没有注意,会不会是解码不对
www.littlebutler.top
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-28 04:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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