历史上的今天
今天是:2025年01月31日(星期五)
2020年01月31日 | stm32——Fatfs文件系统读写文件
2020-01-31 来源:eefocus
因项目需求需要移植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参数可用以下按需替换

//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之红外接收
史海拾趣
|
万事开头难,初学阶段感到学习无线电这门科学很困难是非常正常的事情,看不懂、记不住等问题是必然会遇到的,但是总有开头、起步的过程。认识到学习电子技术这门科学的难度,树立一定能够学好的信心,运用科学的学习方法,学习中不断总结适合自己的 ...… 查看全部问答> |
|
我是刚开始学习硬件设计的,手上有一块stm32f的板子,工具是IAR EMbedded workbench for arm evaluation。 任务是用这块板子学习arm,求助来位大神帮我指导下学习,下载一些example但是一载入就报错,还不能在板子上debug,只能用一个软件自带的ex ...… 查看全部问答> |
|
承接电子设计(单片机)项目 (一)、PCB LAYOUT(2层 or 4层) 老牛承接专业抄板、画板,质优价廉,可每天查看画板进度,有问题及时沟通。 可加我QQ看画过的样板,因为老牛是个人接活,所以价钱肯定比抄板公司低,希望各位同行有活之余多多照顾。 ...… 查看全部问答> |
|
我听同学说他们公司搞嵌入式的那些人好多都不熟悉linux. 那为什么很多人都说学嵌入式要学linux? 是不是搞嵌入式应用软件开发的跟一般运行于PC机上的软件开发实质上没什么区别? 而搞嵌入式系统软件开发就要熟悉linux? … 查看全部问答> |
|
想用运放做一个降压处理但是要采集非线性的电压中us级的一段电压值 因为采集的电压的超过ADC的输入范围, 现想用运放做一个降压处理,但是要采集非线性的电压中us级的一段电压值。 这样的该如何设计,从哪下手啊?… 查看全部问答> |
|
以为坛友们淘到最便宜,最实用的东西为主旨,为论坛团购计划做坚强后盾,现招兵买马,组织淘货小组。 淘货小组主要负责为论坛搜的团购宝贝,所以需满足一下两点: 1.爱逛淘宝(不仅仅是淘宝哦) 2.爱淘货 3.愿意为坛友淘得宝贝做贡献 ...… 查看全部问答> |
|
/******************************************************************************** 函数名称 : uat_putchr* 描述 : 串口发送字符* 输入 ...… 查看全部问答> |




