STM32利用FATFS读写数组

因为存为TXT可以实现,但是读取TXT里边的数据总是不尽如人意,所以,最终存为bin文件了。

先摘几个观点:

http://www.openedv.com/posts/list/36712.htm “文本文件存储的都是ASCII内容,如果你以16进制格式显示出来,那就是ASCII的内码。

http://www.openedv.com/posts/list/58089.htm“ 你这种不要存.txt了,直接存.bin就是了。你先学会存一个字节数据,... 

stm32 Fatfs 读写SD卡(http://www.ichanging.org/stm32-fatfs-sd.html)

f_openhttp://elm-chan.org/fsw/ff/en/open.html


实现的部分代码(读写bin文件)(其他可以借鉴 原子的FATFS相关实例等 http://www.openedv.com/forums/show/0/2/0/55.htm)

u32 sd_size;
	FIL file;
	FRESULT res;
	UINT bw;
	UINT br;//ʵ¼Ê¶ÁÈ¡µ½µÄ×Ö½ÚÊý

// SD ¿¨
	while(SD_Initialize())//¼ì²â²»µ½SD¿¨
	{
	  
		//LCD_ShowString(60,170,200,16,16,"SD Card Error!");
		printf("\r\nSD Card Error!\r\n");
		delay_ms(500);					
		//LCD_ShowString(60,170,200,16,16,"Please Check! ");
		printf("\r\nSD Card Error!\r\n");
		delay_ms(500);
	}
	printf("\r\nSD Card OKr\n");	
	printf("\r\nSD Card Size:     MB\r\n");
	sd_size=SD_GetSectorCount();//µÃµ½ÉÈÇøÊý
	printf("\r\nsd_size:%d\r\n",sd_size);
	f_mount(fs[0],"0:",1); 					//¹ÒÔØSD¿¨ 
	
	res=f_open(&file,"0:/Test.bin",FA_CREATE_ALWAYS | FA_WRITE  );
	if(res != FR_OK)
	{	
		printf("\r\nOpen file error!\r\n");
	}
	else
	{

		if(res == FR_OK)
		{		
			iTemp=13;
			res = f_write(&file, &iTemp, sizeof(iTemp), &bw);               /* Write it to the dst file */
			//res = f_write(&file, "\r\n",2, &bw);               /* Write it to the dst file */
			iTemp=1;
			res = f_write(&file, &iTemp, sizeof(iTemp), &bw);               /* Write it to the dst file */
			printf("\r\nwrite data ok!\r\n");
		}
		else
		{
			printf("\r\nwrite data error!\r\n");
		}
	 }
	f_close(&file);
	

	 res=f_open(&file,"0:/Test.bin",FA_OPEN_EXISTING|FA_READ);//
	if(res!=FR_OK)
	{
		printf("\r\n f_open() fail .. \r\n");
	}
	else
	{
		printf("\r\n f_open() success .. \r\n");
	}
	while(!f_eof(&file))
	{
		iBuf=0;
		res = f_read(&file, &iTemp, sizeof(u16), &br);//¶ÁÈ¡Ò»¸ö16λµÄÊý¾Ý
		if(res==FR_OK)
		{
			iBuf++;
			printf("%d \r\n",iTemp);
		}
		else
		{
			printf("\r\n f_read() fail .. \r\n");  
		}
	}
	f_close(&file);
  f_mount(fs[0],"0:",NULL);




  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我可以回答这个问题。首先,需要在STM32上配置FATFS文件系统,然后在代码中使用FATFS库函数来文件。下面是一个简单的代码示例,可以将一个数组入文件,并从文件中取该数组。 ```c #include "ff.h" #include "diskio.h" #define ARRAY_SIZE 100 BYTE array[ARRAY_SIZE] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20}; FRESULT res; // FatFs函数返回值 FIL file; // 文件对象 UINT bytes_written; // 已入的字节数 UINT bytes_read; // 已取的字节数 int main(void) { // 初始化FATFS文件系统 FATFS fs; f_mount(&fs, "", 0); // 打开文件,如果不存在则创建 res = f_open(&file, "test.txt", FA_OPEN_ALWAYS | FA_WRITE | FA_READ); if (res != FR_OK) { // 文件打开失败 } // 数组到文件中 res = f_write(&file, array, ARRAY_SIZE, &bytes_written); if (res != FR_OK) { // 入文件失败 } // 将文件指针移到文件开头 f_lseek(&file, 0); // 从文件中数组 BYTE read_array[ARRAY_SIZE]; res = f_read(&file, read_array, ARRAY_SIZE, &bytes_read); if (res != FR_OK) { // 取文件失败 } // 关闭文件 f_close(&file); // 比较入和取的数组 if (memcmp(array, read_array, ARRAY_SIZE) != 0) { // 数组不相等 } while(1); } ``` 在这个示例中,我们首先初始化了FATFS文件系统,然后打开一个名为“test.txt”的文件,如果该文件不存在,则创建一个新文件。接下来,我们将一个大小为100字节的数组入文件,并将文件指针移到文件开头。然后,我们从文件中取100字节,将取的数组入的数组进行比较。最后,我们关闭文件并进入死循环。 希望这个例子可以帮助你了解如何使用FATFS库在STM32上数组

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值