历史上的今天
返回首页

历史上的今天

今天是:2024年09月16日(星期一)

2018年09月16日 | STM32读写TXT文件(可追加数据)的示例代码

2018-09-16 来源:eefocus

/*

说明:

*    下面的函数是测试在已有的"大海.txt"文件下继续添加数据

*    测试条件在TF卡中建立"大海.txt"文件,并在文件中添加内容,测试过程中可以分别添加<512数据,=512数据,>512数据进行分别测试

*    作者:Flame

*    测试时间:20130711

*/

unsigned int FATFSNumSize;//文件大小存储变量,为了查看方便放到函数外部

void OutPutFile(void)

unsigned int a;

FILINFO finfo;

DIR dirs;

char path[50]={""};                                                            //目录名为空,表示是根目录

//开启长文件名功能时, 要预先初始化文件名缓冲区的长度 

#if _USE_LFN

static char lfn[_MAX_LFN * (_DF1S ? 2 : 1) + 1];

finfo.lfname = lfn;

finfo.lfsize = sizeof(lfn);

#endif

USART_OUT(USART1,"\nSTM32开发板文件系统(Tini-FatFS0.08b)启动成功! \n");

disk_initialize(0);    //fatfs可以管理多个介质的分区, 所以把物理存储介质SST25VF016B标示为0区,相当于磁盘编号

f_mount(0, &fs);        //将文件系统设置到0区 

if (f_opendir(&dirs, path) == FR_OK)      //读取该磁盘的根目录        

{

   while (f_readdir(&dirs, &finfo) == FR_OK)    //循环依次读取文件名

   {         

      if (finfo.fattrib & AM_ARC)        //判断文件属性是否为存档型      TXT文件一般都为存档型

      {

         if(!finfo.fname[0]) break; //如果是文件名为空表示到目录的末尾。退出         

         if(finfo.lfname[0]){USART_OUT(USART1,"\r\n文件名是:\n   %s\n",finfo.lfname);}     //输出长文件名

         else{USART_OUT(USART1,"\r\n文件名是:\n   %s\n",finfo.fname);}       //输出8.3格式文件名                

         if(finfo.lfname[0]){res = f_open(&fsrc, finfo.lfname, FA_OPEN_EXISTING | FA_READ);}//以读的方式打开文件

         else{res = f_open(&fsrc, finfo.fname, FA_OPEN_EXISTING | FA_READ); }     //8.3格式文件名 以读的方式打开文件

         FATFSNumSize = f_size(&fsrc);  //读出文件的大小,说明读取文件大小必须在打开文件后才能读出

         br=1;

         for (;;) 

         {                                                                                                                                //循环读出被打开文件的扇区

             for(a=0; a<512; a++) buffer[a]=0;        //因为可以一次读出512字节,先清空数据缓冲区 

             res = f_read(&fsrc, buffer, sizeof(buffer), &br);    //将文件内容读出到数据缓冲区  br存储此次读出数据的数量,最大512

             USART_OUT(USART1,"%s\n",buffer);         //将缓冲区的内容输出到串口1

             if (res || br == 0) break;   // error or eof      //判断是否到文件结束

         }

         f_close(&fsrc);      //关闭源文件

         res1 = f_open(&fdst, "大海.txt", FA_CREATE_ALWAYS | FA_WRITE);          //以写的方式打开"大海.txt"文件

         if(finfo.lfname[0])                

         {

           res = f_open(&fsrc, finfo.lfname, FA_CREATE_ALWAYS | FA_WRITE); //以写的方式打开文件

         } else {

           res = f_open(&fsrc, finfo.fname,  FA_CREATE_ALWAYS | FA_WRITE); //8.3格式文件名 以写的方式打开文件

         }     

         for(a=0; a<512; a++) buffer[a]=0x36;             //往buffer中写入512个6

         f_lseek(&fsrc,FATFSNumSize);                     //偏移到打开文件内容的后面

         //在这里要重点说明的是如果numSize<512将会把数据覆盖,如果numSize>512切numSize%512得到的余数将会覆盖,所有如果numSize不是512的整倍数,要单独做处理

         //我的方法是读取这不到1个扇区的数据,放到缓冲区,然后将512-numSize%512的数据填入缓冲区,写入TF(SD)卡数据,然后再写剩余的数据

         br=512; //写入512个数据

         res1 = f_write(&fsrc, buffer, br, &bw);                                                                                      f_close(&fsrc);//关闭目标文件 本条函数即时保存写入的数据,又是关闭目标文件,如有很多数据要写入,但不需要现在关闭可以调用f_sync函数,但是调用 f_sync前必把S_READONLY == 0可用

     }

   } 

 } 

}


推荐阅读

史海拾趣

Exar [Exar Corporation]公司的发展小趣事

进入21世纪后,数字视频应用的兴起为Exar提供了新的发展机遇。为了抓住这一机遇,公司在2000年推出了视频处理器和编解码器产品。这些产品不仅满足了市场对高质量视频处理的需求,也进一步巩固了Exar在通信和视频处理领域的地位。

BCD Semi(Diodes)公司的发展小趣事

在电子行业的发展过程中,市场波动和风险挑战是不可避免的。某一年,全球半导体市场出现了严重的产能过剩,导致产品价格大幅下跌。面对这一挑战,BCD Semi(Diodes)公司及时调整生产策略,优化产品结构,降低生产成本,成功度过了这一行业寒冬。

Erocore Enterprise Co Ltd公司的发展小趣事

Erocore Enterprise Co Ltd公司自XXXX年在电子行业中创立之初,就专注于电子元件的研发和生产。公司创始人深知技术是企业发展的核心,因此投入大量资源用于技术研究和人才引进。在初创期,Erocore通过不断的技术创新,积累了一定的技术储备和行业经验,为其在后续的市场竞争中奠定了坚实的基础。

Easy Magnet Corp公司的发展小趣事

Easy Magnet Corp公司最初由几位热衷于磁性材料研究的科学家和工程师创立。他们发现了一种新型磁性材料,具有极高的磁导率和稳定性。基于这一发现,他们开始研发适用于电子产品的磁性元件。最初的产品虽然简单,但因其高性能和可靠性,很快在市场中获得了认可。随着订单的增加,公司逐渐扩大了生产规模,并开始了技术研发的深入探索。

Headland Technology Product Group公司的发展小趣事

在电子行业中,产品质量是企业生存和发展的基石。HBControls深知这一点,因此始终将品质管理放在首位。公司建立了完善的质量管理体系,从原材料采购、生产加工到成品检验,每一个环节都严格把关。此外,HBControls还定期对员工进行质量意识培训,确保每一位员工都能将品质理念融入到日常工作中。正是凭借卓越的产品质量和优质的服务,HBControls赢得了众多客户的信赖和好评。

COMPUTAR公司的发展小趣事

进入90年代,电动变焦镜头逐渐成为市场的新宠。CBC株式会社紧跟时代潮流,于1992年成功推出电动6倍系列镜头。这款镜头采用电动变焦设计,操作简便、速度快捷,极大地提高了拍摄效率。电动6倍系列镜头的全球上市,不仅进一步扩大了CBC的市场影响力,也为公司的未来发展奠定了坚实的基础。

通过以上五个故事,我们可以看到COMPUTAR公司(前身为CBC株式会社)在电子行业中的发展历程。从创立之初的艰苦创业,到逐步拓展国际市场;从手动变焦镜头的研制成功,到非球面高速镜头和电动6倍系列镜头的诞生与上市,每一步都凝聚着COMPUTAR人的智慧和汗水。正是这些不懈的努力和持续的创新,使得COMPUTAR在电子行业中脱颖而出,成为一家备受尊敬的企业。

问答坊 | AI 解惑

Lyrtech LSP快速原型开发平台提供了全套系统级开发流程

加拿大Lyrtech公司推出的LSP快速原型开发平台集成了MATLAB/Simulink软件仿真环境和DSP+FPGA的快速原型开发板,为用户提供了一个从软件仿真到硬件测试的系统级开发流程。这套平台的软件环境是工程师们熟悉的MATLAB/Simulink,开发人员不需要花太多时 ...…

查看全部问答>

利用光纤收发器实现长距离组网

在以前的工程施工中使用了大量光纤收发器进行组网,祥子对于这一类设备还是比较了解的,因此结合这次组网(也有以前组网)的经验,向大家介绍一下光纤收发器在网络组建过程中的使用。 最近这一个月以来一直在忙一个大工程,即市至县的数字电视传输 ...…

查看全部问答>

每次都要发帖 然后才能下载

本帖最后由 paulhyde 于 2014-9-15 08:58 编辑 每次都要发帖 然后才能下载  …

查看全部问答>

MSCAN相关编程资料求助!!感激不尽!!

毕设在做一个用freescale的DSP56F8037做的CAN多点通信协议(主要内容就是收发程序加上上层网络协议),但是外网半天找不到可以参考的程序(太久没有写程序,完全SB了),就把官网上的DSP用户手册下下来看了半天 不知道这里有没有好心人指点下哪里 ...…

查看全部问答>

西思科技诚聘Windows Mobile/CE 应用软件工程师

工作职责 1、编写基于Windows Mobile/Wince平台的手机应用程序,实现2D/3D人机交互、数据库访问、与互联网服务器交互数据等功能。 2、编写PC客户端程序,实现与手机数据同步,与互联网服务器交互数据等功能。 3、对部分模块化的代码或算法基 ...…

查看全部问答>

关于S3C2410的UART接收中断

我所做的是用S3C2410驱动ZLG500B读卡模块 以实现读卡功能 之间为UART通信 问: 在wince下 用 EVC 4 如何用C编写 arm的中断初始化 以及uart接收中断服务程序…

查看全部问答>

捕获按键

现在打开了2个Dialog,一个是CMain,一直打开不会关闭,还有一个CXXX窗体,是在CMain上方,这个是不确定的。当CXXX打开的时候,如何捕获硬键(上下左右这四个键)的消息呢?…

查看全部问答>

ucos ii 下GPRS模块通过拨号方式进行tcp连接,不知如何下手?

    现在mcu是stm32 芯片,gprs模块是华为gtm900 ,通过查找资料如果不用模块内部的协议栈的话,自己得在ucos ii上实现ppp协议与tcp/ip协议栈,现在在网上下载了ucip1-0-3,里面就是src 目录下,有相关代码,里面还有makefile,似乎应该在li ...…

查看全部问答>

STM32FLASH读保护测试,片子挂了,高手帮忙请进!

int main(void){   ....   FLASH_ReadOutProtection(ENABLE);   while(1)   {    ....   }}现在通过J-Link下载不了程序了。Debug  ...…

查看全部问答>

【MSP430共享】智能涡街流量计的设计与实现

涡街流量计众多的优点使其跻身通用流量计之一,但是当流速较低时。会存在测量不稳定的缺点。针对涡街流量传感器的非线性特性, 本系统采用16位微处理器MSP430F435为核心, 将传感器特性曲线存储在F l a s h存储器中. 实现了对涡街传感器的非 ...…

查看全部问答>