STM32F407ZGT6驱动sd卡+文件夹 并写入多组实时数据 基于cubemx生成

SD卡介绍

SD卡,全称Secure Digital卡,是一种常见的便携式存储设备,通常用于存储和传输数据。它是一种闪存存储卡。
TF卡(TransFlash卡) 又称MicroSD卡,MicroSD卡比SD卡小,通常只有SD卡的1/4大小。
在这里插入图片描述

在使用sd卡时候 十分推荐 以下我的文章会基于大佬的代码 再加上自己需求的代码
STM32CubeMX教程28 SDIO - 使用FatFs文件系统读写SD卡
对sd卡的sdio方式驱动十分清晰

我需要将采集的5000数据 每次写入sd卡 使用一个data_x.txt文件存储

void I2SToSDCard(int i){
		sprintf(filename,"data_%d.txt",file_number1);
		char filepath[64];
        sprintf(filepath, "0:\\%s\\%s", folder, filename);
		HAL_Delay(1);
		if(f_open(&file, filepath, FA_WRITE | FA_OPEN_ALWAYS) != FR_OK)
    {
        printf("创建文件失败\r\n");
        return;
    }
		for(int j=0;j<i;j++)
		{
			f_lseek(&file,f_size(&file));	
			sprintf(str2,"%d\n",va132_array[j]);
			f_puts(str2, &file); 
			//HAL_Delay(1);
		}
		f_close(&file);
}

文件夹在每次上电时会进行创建

	//每次新上电一次 新创建一个文件夹 将一次上电的数据 都存储在当前文件夹内
	sprintf(folder,"file_%d",file_number);
	  
	  if( f_mkdir(folder) != FR_OK)
    {
        printf("创建文件夹失败\r\n");
        
    }
		
		

需要掉电存储变量 当上电一次 file_number++
我使用的是 IIC驱动24C02 eeprom掉电存储
eeprom使用 cubemx STM32F407ZGT6【IIC驱动AT24C02】

当我需要删除文件夹目录内的内容

/*删除文件夹*/

// 递归删除目录中的所有文件和子目录
void DeleteFilesInDirectory(const TCHAR* path) {
    DIR dir;
    FILINFO fno;
    FRESULT res;
    TCHAR fullPath[256];

    // 打开目录
    res = f_opendir(&dir, path);
    if (res != FR_OK) {
        printf("打开目录失败: %d\r\n", res);
        return;
    }

    // 遍历目录中的所有项
    while (1) {
        res = f_readdir(&dir, &fno); // 读取目录项
        if (res != FR_OK || fno.fname[0] == 0) break; // 到达目录末尾

        // 忽略 "." 和 ".."
        if (strcmp(fno.fname, ".") == 0 || strcmp(fno.fname, "..") == 0) continue;

        // 生成文件或目录的完整路径
        snprintf(fullPath, sizeof(fullPath), "%s/%s", path, fno.fname);

        if (fno.fattrib & AM_DIR) {
            // 如果是目录,递归删除目录
            DeleteFilesInDirectory(fullPath);
            f_rmdir(fullPath); // 删除空目录
        } else {
            // 如果是文件,删除文件
            f_unlink(fullPath);
        }
    }

    f_closedir(&dir);
}

// 删除指定目录及其内容
void FatFs_DeleteDirectory(const TCHAR* dirname) {
    printf("\r\n*** Delete Directory: %s ***\r\n", dirname);
    DeleteFilesInDirectory(dirname);

    // 删除目录本身
    FRESULT res = f_rmdir(dirname);
    if (res == FR_OK) {
        printf("The directory was deleted successfully!\r\n");
    } else {
        printf("Directory deletion failed, error code: %d\r\n", res);
    }
}


当在主函数内调用 FatFs_DeleteDirectory(“FILE_1”);
就可以把SD卡 对应的FILE_1文件夹删除

/******************************************************************/


											/*删除目录之前的文件 从FLIE_1开始存储*/



/******************************************************************/

void Delete(uint8_t number){

	uint8_t m;
	for(m=number;m>0;m--){
		
	sprintf(deletename,"file_%d",m);
 
	FatFs_DeleteDirectory(deletename);
	HAL_Delay(200);

	}
	
}

调用上述函数就可以实现将sd卡 内之前创建的文件夹进行删除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值