stm32开发3D打印机(六)——使用FATFS文件系统读取打印文件 获取信息 执行转换 转换坐标(上)

这篇文章为读取打印文件(后缀为gcode的文件),并添加USMART功能调试
因为TFATFS移植与USMATRT没有什么好写的,而且在下方的链接:正点原子教程已经有详细的教程了,所以跳过了TATFS与USMART。
链接为:https://pan.baidu.com/s/1_S0394ZSRZaNxgz3QIbstA
提取码:6718

那么从这里,我们完成了对TF卡的初始化及其FATFS文件系统初始化。
现在我们可以调用FATFS内的函数。

首先我们需要知道如何打开文件,并读取文件的代码

  1. 首先对SD卡初始化,及上一篇的文章中的SD_Initialize(void)函数。
  2. 随后为FATFS申请内存,使用exfuns_init(void)函数。(其实不使用这个函数也是可以的,只不过这样可以整理内存)
  3. 挂载TF卡,使用f_mount(fs[0],“0:”,1)函数,函数内的相关变量,(是需要设定的,再正点原子教程有指出)。
  4. 挂载成功后便可使用FATFS库内的函数了。

但是还是借鉴正点原子的教程,使用正点原子封装好的一些函数。
如果完成了对FTAFS文件系统的初始化后,你会发现在工程文件中有fattester.c文件。
文件内有许多函数

函数名称 函数功能
mf_scan_files 遍历文件 (通过串口返回目录信息)
mf_mount 为磁盘注册工作区
mf_open 打开目录下的文件
mf_close 关闭文件
mf_read 读取打开文件的数据
mf_write 写入数据
mf_opendir 打开目录
mf_closedir 关闭目录
mf_readdir 打开文件夹
mf_showfree 显示剩余容量

差不多了,大概只需要使用这些

打开这个文件,你会发现这个函数

u8 mf_read(u16 len)
{
    
    
	u16 i,t;
	u8 res=0;
	u16 tlen=0;
	printf("\r\nRead file data is:\r\n");
	for(i=0;i<len/512;i++)
	{
    
    
		res=f_read(file,fatbuf,512,&br);
		if(res)
		{
    
    
			printf("Read Error:%d\r\n",res);
			break;
		}else
		{
    
    
			tlen+=br;
			for(t=0;t<br;t++)printf("%c",fatbuf[t]); 
		}
	}
	if(len%512)
	{
    
    
		res=f_read(file,fatbuf,len%512,&br);
		if(res)	//¶ÁÊý¾Ý³ö´íÁË
		{
    
    
			printf("\r\nRead Error:%d\r\n",res);   
		}else
		{
    
    
			tlen+=br;
			for(t=0;t<br;t++)printf("%c",fatbuf[t]); 
		}	 
	}
	if(tlen)printf("\r\nReaded data len:%d\r\n",tlen);//¶Áµ½µÄÊý¾Ý³¤¶È
	printf("Read data over\r\n");	 
	return res;
}

因为我们需要一个每次读取一个字节的函数,所以还是需要自己写一个读取函数。(注意在fattester.c文件下下下这个函数,因为需要使用该文件内的文件变量)

u8 zf_read(void)
{
    
    
	u16 i,t;
	u8 res=0;
	res=f_read(file,fatbuf,1,&br);
	if(res)
		printf("Read Error:%d\r\n",res);
	return *fatbuf;
}

并在fattester.h头文件声明,增加
u8 zf_read(void);

到此,我们完成了每次读取打开文件的一个字节的函数

在主函数中
完成初始化后,(对USMART初始化后及TF卡、FATFS初始化后)
在串口发送mf_scan_files(“0:”),则会返回目录信息在这里插入图片描述
随后发送mf_open(“0:/aa1.gcode”,1);
打开aa1.gcode文件,随后便可使用函数mf_read读取,或者使用我们写的函数zf_read读取信息。

猜你喜欢

转载自blog.csdn.net/Nico_jion/article/details/108671839