stm32——Fatfs文件系统读写文件

发布者:玉米哥哥最新更新时间:2020-01-31 来源: eefocus关键字:stm32  Fatfs  文件系统  读写文件 手机看文章 扫描二维码
随时随地手机看文章

因项目需求需要移植fatfs文件系统,参考了正点原子的战舰例程。 

使用mcu为stm32f103zet6,spi的sd卡模块,8Gsd卡。例程为mini板(mcu:stm32f103rct6)的 ALIENTEK MINISTM32 实验29 FATFS文件系统实验,zet6的例程由于是sdio模式所以没有选用。


初始化 

这里只初始化sd卡.e2prom部分删除了


    mem_init();                     //初始化内存池


    //SD卡检测及初始化

    while(SD_Initialize())          //检测不到SD卡

    {

        delay_ms(500);                  

    }


    exfuns_init();                  //为fatfs相关变量申请内存                 

    f_mount(fs[0],"0:",1);          //挂载SD卡,并分配盘符“0:”


    //以下不是必须

    while(exf_getfree("0",&total,&free))        //得到SD卡的总容量和剩余容量

    {

        LCD_ShowString(4,4,200,16,16,"Fatfs Error!");

        delay_ms(500);

        clearTopInfo(WHITE);              

        delay_ms(500);

    }   


创建文件(.txt) 

FA_CREATE_ALWAYS | FA_WRITE参数可用以下按需替换 

f_open函数相关参数

    //sprintf中的内容是从rtc中获取的时间,并放入newfilepath中。0:/是盘符(驱动器号)

    sprintf(newfilepath,"0:/%04d%02d%02d_%02d%02d%02d.txt",calendar.w_year,calendar.w_month,calendar.w_date,calendar.hour,calendar.min,calendar.sec);

    //

    res_ad=f_open(&fil_ad,newfilepath,FA_CREATE_ALWAYS|FA_WRITE);


写入文件(.txt) 

由于f_write只能写入char型数据,ad采样的int型数据(或其他的int/float/double等)必须转换为char才能正确保存,否则会出现乱码。 

f_write中的参数如下: 

&fil_ad为f_open中使用过的路径文件; 

write_buff为写的数据; 

6是要写入的字节数,具体看需求,如果想写入“1234567”但给的是6则‘7’将写不进去 

&bww_ad为实际写入的字节(待求证);


sprintf(write_buff,"%04drn",ad_value[i]*3300/4096);

res_ad=f_lseek(&fil_ad,f_size(&fil_ad));

res_ad=f_write(&fil_ad,write_buff,6,&bww_ad);


其中f_lseek(&fil_ad,f_size(&fil_ad));函数用于把文件读写指针移动到文件末尾。


读取文件


        f_open(&fil0,filepath,FA_READ);     //以只读方式打开文件


        for(i=0;i<232;i++)                  //由于知道文件里有232组数据所以设置232个循环

        {

            f_lseek(&fil0,i*6);             //每次读取之前先移动读写指针达到读写不同数据的目的

            f_gets(filedata[i],5,&fil0);    //读5个字节的数据


            printf("#S0000%sENn",filedata[i]);     //通过串口发送


        }


类似的,如果要读取某文件中的特定字符,比如‘A’,则可以:


    f_open(&fil0,filepath,FA_READ);

    while(1)

    {

        if(br == 0)                 //判断是否到达文件结尾

            break;                  //如果是,则退出


        f_read (&fil0, &readbuff, 1, br);   //每次读1字节

        if(readbuff == 'A')         //判断是否是A

        {

            //todo:your code

        }

    }

关键字:stm32  Fatfs  文件系统  读写文件 引用地址:stm32——Fatfs文件系统读写文件

上一篇:STM32之红外接收
下一篇:STM32把SD卡内容搬运到内部FLASH之一

推荐阅读最新更新时间:2024-10-26 10:20

stm32专题十九:FatFs文件系统简单读写
首先,我们需要向FatFs来提供一些硬件接口,包括储存设备的初始化,读 / 写函数,硬件参数等,这些在diskio.c中实现: diskio.c /*-----------------------------------------------------------------------*/ /* Low level disk I/O module skeleton for FatFs (C)ChaN, 2014 */ /*-----------------------------------------------------------------------*/ /* If a working sto
[单片机]
<font color='red'>stm32</font>专题十九:<font color='red'>FatFs</font><font color='red'>文件系统</font>简单<font color='red'>读写</font>
stm32——Fatfs文件系统读写文件
因项目需求需要移植fatfs文件系统,参考了正点原子的战舰例程。 使用mcu为stm32f103zet6,spi的sd卡模块,8Gsd卡。例程为mini板(mcu:stm32f103rct6)的 ALIENTEK MINISTM32 实验29 FATFS文件系统实验,zet6的例程由于是sdio模式所以没有选用。 初始化 这里只初始化sd卡.e2prom部分删除了 mem_init(); //初始化内存池 //SD卡检测及初始化 while(SD_Initialize()) //检测不到SD卡 { delay_ms(500); } e
[单片机]
<font color='red'>stm32</font>——<font color='red'>Fatfs</font><font color='red'>文件系统</font><font color='red'>读写</font><font color='red'>文件</font>
STM32笔记SD卡的读写FatFS文件系统
因为要用,学习了一下SPI操作SD卡,同时移植了一个免费开源的FAT文件系统:FatFS。感觉挺好,在单片机上实现了读写文件的操作,接下来就可以解释我的G代码咯!   我的SD卡底层操作参考了网上几种常见的代码,但又对其结构做了一定的优化,至少看起来用起来比较方便。既可以作为文件系统的diskio使用,也可以直接使用底层函数,把SD卡作为一块flash读写。   FatFs文件系统体积蛮小,6-7K足矣,对于128Kflash的STM32来说很合适,代价不大。同时可移植性很高,最少只需要4个函数修改既可以实现文件系统的移植。相关文件系统的介绍 请看这里 。   这里给一套比较完整的参考资料,包括fatfs文件系统的原版资料、几个重
[单片机]
<font color='red'>STM32</font>笔记SD卡的<font color='red'>读写</font>和<font color='red'>FatFS</font><font color='red'>文件系统</font>
MSP430 SD卡SPI读写操作(4) —— FatFs文件系统实现
本节介绍MSP430F5438A FatFs文件系统的移植。 FatFs是一个通用的文件系统模块,用于在小型嵌入式系统中实现FAT文件系统。FatFs模块与IO是分开的,因此移植时需要实现下面几个底层函数: DSTATUS disk_initialize (BYTE drv); //初始化存储器 DSTATUS disk_status (BYTE drv); //获取存储器状态 DRESULT disk_read (BYTE drv, BYTE* buff, DWORD sector, UINT count); //读存储器 DRESULT disk_write (BYTE drv, const BYTE* buff,
[单片机]
MSP430 SD卡SPI读写操作(4) —— FatFs文件系统实现
本节介绍MSP430F5438A FatFs文件系统的移植。 FatFs是一个通用的文件系统模块,用于在小型嵌入式系统中实现FAT文件系统。FatFs模块与IO是分开的,因此移植时需要实现下面几个底层函数: DSTATUS disk_initialize (BYTE drv); //初始化存储器 DSTATUS disk_status (BYTE drv); //获取存储器状态 DRESULT disk_read (BYTE drv, BYTE* buff, DWORD sector, UINT count); //读存储器 DRESULT disk_write (BYTE drv, const BYTE* buff,
[单片机]
STM32入门学习笔记之文件系统FatFs的移植3
21.2.2 ffsystem.c文件的修改 (1)内存分配ff_memalloc void* ff_memalloc( UINT msize ) { return ( void* )mymalloc( SRAMIN, msize ) ; } (2)内存释放ff_memfree void ff_memfree( void* mblock ) { myfree( SRAMIN, mblock ) ; } 21.2.3 exfuns.c与exfuns.h文件的创建 (1)创建exfuns.h文件,并输入以下代码。 #ifndef _EXFUNS_H #define _EXFUNS_H #i
[单片机]
<font color='red'>STM32</font>入门学习笔记之<font color='red'>文件系统</font><font color='red'>FatFs</font>的移植3
stm32专题十九:FatFs文件系统整体架构
在标准C语言中,有专门对文件进行操作的函数,如下所示。这些函数在windows或者linux系统中,都可以直接方便地使用。但是,在stm32中,这些函数不能直接使用。因为,windows和linux系统,都已经在平台上支持了这些c语言函数,类似于之前重定向printf到串口操作。 FatFs是面向小型嵌入式系统的一种通用的 FAT 文件系统。它完全是由ANSI C语言编写并且完全独立于底层的 I/O 介质。因此它可以很容易地不加修改地移植到其他的处理器当中,如8051、PIC、AVR、SH、Z80、H8、ARM 等。FatFs 支持 FAT12、FAT16、FAT32 等格式,所以我们利用前面写好的SPI Flash芯片驱动,
[单片机]
<font color='red'>stm32</font>专题十九:<font color='red'>FatFs</font><font color='red'>文件系统</font>整体架构
stm32专题十九:FatFs文件系统简介
在上一篇博客中,是使用SPI-FLASH存储整数、小数和字符串等,通过调用SPI_FLASH_BufferWrite函数,把数组内容写入到SPI Flash芯片的指定地址上,在需要的时候从该地址把数据读取出来,再对读出来的数据以ASCII码的格式进行解读。 但是,这样直接存储数据会带来极大的不便,如难以记录有效数据的位置,难以确定存储介质的剩余空间,以及应以何种格式来解读数据。就如同一个巨大的图书馆无人管理,杂乱无章地存放着各种书籍,难以查找所需的文档。对于SPI Flash芯片或者SD卡之类的大容量设备,我们需要一种高效的方式来管理它的存储内容。 这些管理方式即为文件系统,它是为了存储和管理数据,而在存储介质建立的一种组
[单片机]
<font color='red'>stm32</font>专题十九:<font color='red'>FatFs</font><font color='red'>文件系统</font>简介
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved