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卡 内之前创建的文件夹进行删除