你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【STM32小技巧】STM32移植FAFTS文件系统遍历创建文件夹

[复制链接]
STMCU-管管 发布时间:2022-9-30 12:47

分享一个STM32移植FAFTS文件系统遍历创建文件夹
  1. FRESULT folder_create(char* path)
  2. {
  3.     FRESULT res;
  4.     DIR dir;
  5.         char *str = path;
  6.         char *pbuf;
  7.         u16 cnt=0;
  8.        
  9.     res = f_opendir(&dir, path);   
  10.         if (res == FR_OK)
  11.         {
  12.                 f_closedir(&dir);
  13.                 return FR_OK;
  14.         }
  15.         else
  16.         {
  17.                 pbuf=mymalloc(SRAMIN,200);
  18.                 if(pbuf==NULL)
  19.                         return FR_NOT_ENOUGH_CORE;               
  20.                 while(*str !=0)
  21.                 {
  22.                         if(*str=='/')
  23.                         {
  24.                                 memset(pbuf,0x00,200);
  25.                                 memcpy(pbuf,path,cnt);
  26.                                 printf("%s\r\n",pbuf);

  27.                                 if(f_opendir(&dir, pbuf)==FR_NO_PATH)
  28.                                         f_mkdir(pbuf);
  29.                                 else
  30.                                         f_closedir(&dir);       
  31.                         }
  32.                        
  33.                         cnt++;
  34.                        
  35.                         str++;
  36.                 }
  37.                 myfree(SRAMIN,pbuf);
  38.                 res = f_mkdir(path);//创建最后一级目录
  39.                
  40.         }
  41.         return res;
  42. }
复制代码
调用方法:
  1. folder_create("0:/ccc/x1/x2/x3/x4/x5/x6/x7/x8");
复制代码




收藏 评论2 发布时间:2022-9-30 12:47

举报

2个回答
至暗时刻 回答时间:2022-9-30 13:30:33
【分享一个基于STM32+FatFs文件系统+Vs1053b制作音乐播放器---Lrc歌词解析】
#include <stdlib.h>
#define LRC_TABLE_MAX 100                          
static uint16_t g_usaLrcTimeTable[LRC_TABLE_MAX];  //记录歌词时间
static char g_caLrcTextTable[LRC_TABLE_MAX][100];  //记录歌词文本
static uint8_t g_ucLrcTableIndex;                  //歌词"时间/文件表"的索引值
/*****************************************************************************\
函数功能:歌词解析
形参说明:_cpLrcPath 歌词路径
返 回 值:0 - 成功 / 1 - 失败
\*****************************************************************************/
u8 VS1053B_Parse_MusicLrc(const char *_cpLrcPath)
{
    //变量定义
    FIL fp;          //文件指针
    FRESULT res;     //文件系统返回值
    UINT br;         //成功读取的字节数

    uint16_t usTime = 0;    //用于临时存放转换计算后的时间
    uint32_t ulFileSize;    //歌词文件总大小
    uint32_t i = 0, j = 0;  //临时变量
    char *ptmp = NULL;      //歌词内容指针
    char *pbuff = NULL;     //用于存放所有歌词内容

    //打开文件
    res = f_open(&fp, _cpLrcPath, FA_READ);
    if (res == FR_OK)
    {
        //计算文件大小
        ulFileSize = f_size(&fp);
        //申请空间
        pbuff = malloc(ulFileSize);
        if (pbuff != NULL)
        {
            //一次性将总缓冲区读满
            res = f_read(&fp, pbuff, ulFileSize, &br);
            if (res == FR_OK && br == ulFileSize)
            {
                //找到歌词的起始位置
                i = 0;
                ptmp = strstr(pbuff, "[");  
                while (ptmp[i] != '\0')     //遍历缓冲区中的信息
                {
                    /**********************解析时间**********************/
                    //[00:40.452]
                    //[分:秒.毫秒]
                    usTime = 0;
                    //计算该行歌词播放时间(秒),毫秒部分四舍五入
                    usTime += (ptmp[i++] - '0') * 60 * 10;  //分(十位)
                    usTime += (ptmp[i++] - '0') * 60 * 1;   //分(个位)
                    i++;    // ':'
                    usTime += (ptmp[i++] - '0') * 10;   //秒(十位)
                    usTime += (ptmp[i++] - '0') * 1;    //秒(个位)
                    i++;    // '.'
                    if (ptmp[i++] >= 5)  usTime++;
                    //手动调整时间误差
                    if (usTime > 5) usTime -= (usTime / 10 + 1);
                    //保存时间
                    g_usaLrcTimeTable[g_ucLrcTableIndex] = usTime;
                    printf("%02d:%02d ", usTime/60, usTime%60);

                    /**********************拷贝歌词**********************/
                    j = 0;
                    //让指针偏移到歌词文本部分
                    while (ptmp[i++] != ']');
                    //拷贝歌词内容
                    while (ptmp[i] != '\0' && ptmp[i] != '[')  
                    {
                        g_caLrcTextTable[g_ucLrcTableIndex][j++] = ptmp[i++];   
                    }   
                    //制作成字符串
                    g_caLrcTextTable[g_ucLrcTableIndex][j] = '\0';
                    printf("%s\r\n", g_caLrcTextTable[g_ucLrcTableIndex]);
                    g_ucLrcTableIndex++;
                }
            }
            free(pbuff);
        }   
        f_close(&fp);
    }
    if (i != 0) return 0;
    else return 1;
}

sealoong 回答时间:2022-9-30 14:28:25
我爱你们
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版