stm32 cd 卡操作 csv读写

stm32 读写csv

sd卡驱动和文件系统

FatFs文件

http://elm-chan.org/fsw/ff/00index_e.html
api 说明url

在这里插入图片描述

f_open 的操作 很重要,读写之前都 有对权限的操作 ,
这个过程 有问题非常麻烦


int32 putString2Csv(char str[], char filename[], int mode)
{

f_open(&fil,filename,FA_OPEN_ALWAYS|FA_WRITE );
_mode = mode;
switch (_mode)
{
case ECWM_ONELINE:
{
		
		  f_lseek(&fil,fil.fsize);

      f_puts(str, &fil);   // str 就是有写入的数据
		    f_puts(",", &fil);// ,是单元格的分格了,
		
		//字符串
   
}break;
case ECWM_OTHERLINE:
{
		  f_lseek(&fil,FileSize);
		  f_lseek(&fil,sizeof(fil));
    f_puts("\n", &fil);   // 写入回车,就是换一行,在csv 文件就是第二行
}break;
default:break;
}
if (f_close(&fil) != 0)
{
   // ERR_RETURN("fclose called error", -1);
}
return 1;

}

main.c

这种打开写是因为我有重写进去,FA_CREATE_ALWAYS

enum eCsvWriteMode
{
ECWM_ONELINE = 1,
ECWM_OTHERLINE, //换行
};
f_open(&fil,filenames,FA_CREATE_ALWAYS | FA_WRITE );

putString2Csv(strtemp1,filenames,ECWM_ONELINE);
putString2Csv(strtemp1,filenames,ECWM_OTHERLINE); //换行

读,
读取时有建一个二维数据,如果stm32 的内存少了,就会出现读不出来,
如果内存少,建议修大点动态内存
在这里插入图片描述
char line[1024];
int ** data;
int row, col;
row = 1;
col = 6;
// 如果数据是浮点,那么这个地方的内存申请修成浮点数
data =(int *) malloc(row * sizeof(int));
for (int i = 0; i < row; ++i) {
data[i] =(int *) malloc(col * sizeof(int));
}//动态申请二维数组

 get_two_dimension(line, data, filenames);

print_two_dimension(data, row, col);

void get_two_dimension(char* line, int** data, char* filename) //读取单元格数据 主要读取数据并处理数据,print_two_dimension是数据输出,
{
char* tmp;
int i;
i=0;
fr=f_open(&fil, filename, FA_OPEN_ALWAYS|FA_READ);

while (f_gets(line,1024,&fil))//逐行读取
{
    int j = 0;
    char * tok;
		 int32 value;
      printf("dddd %s\t", line);					
    for (tok = strtok(line, ","); tok && *tok; j++, tok = strtok(NULL, ",\n")) 
	  	{
				
				  sscanf(tok,"%ld",&value);
				
        data[i][j] = value;                                          //转换成浮点数
     }                                                                  //字符串拆分操作
    i++;

}

f_close(&fil); //文件打开后要进行关闭操作
}
void print_two_dimension(int ** data, int row, int col) //读取单元格数据 输出数据
{
int i, j;
for (i = 0; i < row; i++) {
for (j = 0; j < col; j++)
{
printf(“cc %d\t”, data[i][j]);
//data[i][j];
}

}//打印的时候不打印第一行,第一行全是字符
	
}

初次接触 sd卡读写

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值