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

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

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

1 X3 G7 a- p/ ]' x- }: K分享一个STM32移植FAFTS文件系统遍历创建文件夹" N! {3 z2 D% ~* e1 c+ Z
  1. FRESULT folder_create(char* path)
    . W: B" ?# S2 G1 f# v- t- x: {
  2. {& r, L8 _5 Q' z. k$ x/ D% Z
  3.     FRESULT res;
    . O( l" @8 p" H- f
  4.     DIR dir;- Y3 d) `, b$ ~# f' C
  5.         char *str = path;
    . ~* b7 S  T, g4 d
  6.         char *pbuf;
      O6 Y# i" r+ D  e4 c+ J
  7.         u16 cnt=0;* ]& V6 i0 r% B7 c! P
  8.        
    ) E) @: H1 r7 N$ X: w
  9.     res = f_opendir(&dir, path);    ; J! M4 C! @& B0 R; u4 b/ o0 q. r
  10.         if (res == FR_OK)
    2 n( u- v3 Y: W8 H8 @
  11.         {0 b& I, B# k' ~. S, D  V9 a+ V7 W) _
  12.                 f_closedir(&dir);/ `- _/ [, Z% j! ^9 w" r) e
  13.                 return FR_OK;- c, c2 _2 h/ h( R
  14.         }+ K9 k) n4 V7 T, {5 _- m+ _$ o3 P* e& d
  15.         else+ d" p$ c% \) P- n& ?3 r- f2 I( o
  16.         {
    0 o* U  U& o6 ~- E
  17.                 pbuf=mymalloc(SRAMIN,200);
    8 c' m3 b) ~, b( G$ D
  18.                 if(pbuf==NULL). v& A( |  E5 E5 [6 v2 W
  19.                         return FR_NOT_ENOUGH_CORE;               
    0 l( z. Y1 |0 I% A
  20.                 while(*str !=0)7 C$ U2 V9 Q# ]
  21.                 {
    8 d% w" v/ P. b6 c7 O
  22.                         if(*str=='/')
    8 m4 J$ K: i9 i7 t% q. v
  23.                         {5 ]& \8 H1 i/ X1 L9 a2 _1 P6 y4 z
  24.                                 memset(pbuf,0x00,200);4 x9 }- @3 Z" i4 M
  25.                                 memcpy(pbuf,path,cnt);
    ) x) q% {) x; J0 X+ `
  26.                                 printf("%s\r\n",pbuf);
    4 c9 n' F* y/ P+ z# M+ t9 B0 u

  27. 0 Q# V+ [# S) A1 }; @: |! ]
  28.                                 if(f_opendir(&dir, pbuf)==FR_NO_PATH)7 F; I' Q! n" X" q& t8 v7 o
  29.                                         f_mkdir(pbuf);
    % ]! E* f. C, o, l+ k1 b
  30.                                 else/ J6 }" d4 y% G3 D* X
  31.                                         f_closedir(&dir);        . n/ f/ o4 n: _2 Y
  32.                         }+ G' U) Z2 v7 Z2 f2 [
  33.                        
    1 i) d: ~: u# P  w
  34.                         cnt++;
    8 z) d; b4 R, w8 d/ `
  35.                        
      g' D# N# s* C2 F2 r8 y' \# M
  36.                         str++;
    9 i& m1 y  A* _8 B7 l: t
  37.                 }
    8 E0 R9 }: o( x
  38.                 myfree(SRAMIN,pbuf); ( [  x+ G; ]+ ^! x
  39.                 res = f_mkdir(path);//创建最后一级目录# K. K1 g. `/ h- N1 {) I2 @5 t
  40.                
    . {; |7 e) X/ {
  41.         }: ~$ T: N( s! V7 O$ w: e1 h" e
  42.         return res;
    ' \# _. z) f1 A$ W+ p- c
  43. }0 j2 g) l0 r0 `8 h/ J6 ~8 z
复制代码
调用方法:) c& U+ j  T) z( \6 Z) O
  1. folder_create("0:/ccc/x1/x2/x3/x4/x5/x6/x7/x8");6 [$ K9 s8 _0 [4 L) Z3 b+ \1 [0 J
复制代码

1 T+ n( s( t1 f7 [; ]) \
2 M+ `2 u1 e, k% [2 U
* B3 j# |0 |( h  w& f5 i6 K; W7 h) `2 A* F2 k5 f6 i0 M- r4 T# R( d
收藏 评论2 发布时间:2022-9-30 12:47

举报

2个回答
至暗时刻 回答时间:2022-9-30 13:30:33
【分享一个基于STM32+FatFs文件系统+Vs1053b制作音乐播放器---Lrc歌词解析】# h( N0 q" J0 f8 W2 v  H
#include <stdlib.h>0 J! \( F- s+ K( u
#define LRC_TABLE_MAX 100                          
5 r. o4 C9 C% a1 k- Mstatic uint16_t g_usaLrcTimeTable[LRC_TABLE_MAX];  //记录歌词时间0 a- ]- p* A! P. i
static char g_caLrcTextTable[LRC_TABLE_MAX][100];  //记录歌词文本( I7 y. T* R2 j, O% @2 V" P
static uint8_t g_ucLrcTableIndex;                  //歌词"时间/文件表"的索引值
5 g. }: U7 |- l6 A  w% B2 h7 [& d/*****************************************************************************\$ ]- q" {/ O  n* r$ y; J! w
函数功能:歌词解析
$ s1 [5 z8 z3 h* B" k8 [- @ 形参说明:_cpLrcPath 歌词路径# q& n- w  {5 h6 s
返 回 值:0 - 成功 / 1 - 失败
5 S8 {, j9 |+ L% t( N2 E+ C6 P\*****************************************************************************/
' U1 ~5 o8 M( A' R8 bu8 VS1053B_Parse_MusicLrc(const char *_cpLrcPath)
& T& {! s. y4 K9 l{
* X1 U3 F( c5 a# p8 k    //变量定义0 r' f+ r0 i! y
    FIL fp;          //文件指针+ D) Z2 g% E) L: W# T3 G
    FRESULT res;     //文件系统返回值
7 Z, l4 |0 c4 c    UINT br;         //成功读取的字节数
9 B% C% f3 s: w" m+ \5 C3 @; ]. ]) S& e
    uint16_t usTime = 0;    //用于临时存放转换计算后的时间: Z& ^$ o; u4 L" e$ }- c
    uint32_t ulFileSize;    //歌词文件总大小
6 O# ^- ^- ^+ x    uint32_t i = 0, j = 0;  //临时变量9 w" H& ?! c3 q  N1 ?
    char *ptmp = NULL;      //歌词内容指针
7 a7 f& Z* [9 K6 T: _2 i3 l" ~    char *pbuff = NULL;     //用于存放所有歌词内容- ]; @  e, G) D( f! J
. ]+ V, F! i) F
    //打开文件( B1 }& G# P4 `3 |/ C
    res = f_open(&fp, _cpLrcPath, FA_READ);- B# `) W, R6 D9 M, a
    if (res == FR_OK)5 L6 \  {7 D# p' l- U
    {; c- q' M. I) y. A- M
        //计算文件大小
- C3 ^0 G. I+ q7 o5 R1 H$ r" o        ulFileSize = f_size(&fp);
8 ~( x0 N. O$ F9 D        //申请空间+ d5 F. b6 [, b/ }2 {3 T" v
        pbuff = malloc(ulFileSize);
! Q2 @2 M2 K* A0 f; v7 N5 x# b        if (pbuff != NULL)
* I( W  |  g+ h  }9 D2 [        {
  w7 ]8 ~- P/ \# Q            //一次性将总缓冲区读满
. n4 w" s2 j/ I/ J6 d            res = f_read(&fp, pbuff, ulFileSize, &br);. ?9 h& j2 V# {+ g4 @; j
            if (res == FR_OK && br == ulFileSize)" x, Z8 K# ^2 W3 K9 F0 @  _( T
            {. w" Z' \# g5 d4 ^: l
                //找到歌词的起始位置& f& w, r3 _5 V( }, f
                i = 0;8 D0 ^+ B9 b1 |% y7 f
                ptmp = strstr(pbuff, "[");    {3 ~9 ?3 g/ A* I7 E# Y1 I9 _
                while (ptmp[i] != '\0')     //遍历缓冲区中的信息  I- F( j8 s  N2 V) G1 ^  A
                {6 E: L$ l3 Y' E
                    /**********************解析时间**********************/
" r( \7 k6 V8 T                    //[00:40.452]* R0 K7 A' ~( U
                    //[分:秒.毫秒]# x5 \5 g1 _! L% K: a" ]
                    usTime = 0;! j3 C. p& C$ F( O' }+ N
                    //计算该行歌词播放时间(秒),毫秒部分四舍五入" Q2 b0 N- c$ E& Q& z) u
                    usTime += (ptmp[i++] - '0') * 60 * 10;  //分(十位)
& B6 |+ I  r4 E5 ?7 j                    usTime += (ptmp[i++] - '0') * 60 * 1;   //分(个位)
* l0 c2 x( ^' b- {* G) J                    i++;    // ':'
5 c8 F1 S# b6 m9 {, ?                    usTime += (ptmp[i++] - '0') * 10;   //秒(十位)
8 s. @, I& l* y) `. o0 w                    usTime += (ptmp[i++] - '0') * 1;    //秒(个位)/ @2 W, j+ ?0 K; y/ N
                    i++;    // '.'% g! _6 z' }5 ]- l' Z+ m
                    if (ptmp[i++] >= 5)  usTime++;
& ?# E' a. ]: b: q                    //手动调整时间误差
0 Y- C# ?5 J+ \% x3 M                    if (usTime > 5) usTime -= (usTime / 10 + 1);
/ a0 `7 o8 F! ?' ]                    //保存时间  K! N/ |# z7 M. @  v8 T6 @6 b/ g
                    g_usaLrcTimeTable[g_ucLrcTableIndex] = usTime;- L& I8 _/ f7 ]: _
                    printf("%02d:%02d ", usTime/60, usTime%60);
5 s" A" }$ k! q) _% E# G, Z6 ^9 Q8 k# V: a! |4 Q: r( L* V
                    /**********************拷贝歌词**********************/
' |" s8 M* W6 G0 `                    j = 0;( j; }, ^  }& e. A# E& _
                    //让指针偏移到歌词文本部分 3 s4 M) c8 J2 U  {4 E; x: s
                    while (ptmp[i++] != ']'); # i) H) X9 C6 p0 K( {: L7 r" ^/ Z" I, T
                    //拷贝歌词内容- N6 G  ]3 z$ F
                    while (ptmp[i] != '\0' && ptmp[i] != '[')  , v* O$ z/ Z9 V! x1 e' j8 d
                    {
/ e2 @& p- m' y: b& g! l0 n                        g_caLrcTextTable[g_ucLrcTableIndex][j++] = ptmp[i++];    1 @7 ~) x9 b% ]0 t$ X9 m  E
                    }   
- r3 e$ A3 H: f; j                    //制作成字符串: m( E: [9 |" d/ e& c4 l
                    g_caLrcTextTable[g_ucLrcTableIndex][j] = '\0';
  `2 k( ~" B" k7 E, n# w% F                    printf("%s\r\n", g_caLrcTextTable[g_ucLrcTableIndex]);
9 o& ]( x" Y' x! E. ?4 t1 D                    g_ucLrcTableIndex++;& }5 f, o& I6 Y
                }
% a5 }! d  x% h# W7 ~2 J7 M2 e; T- H            }5 [4 q, L4 @1 |' \4 M# f5 P
            free(pbuff);
# v3 {$ l1 P9 U* `3 l. r5 p7 L        }   
2 N) {. ?! I( a        f_close(&fp);* b" C: C/ I& _$ c7 f2 H
    }
; e3 }; `" X5 q& F    if (i != 0) return 0;+ G0 Q6 ?& [  K$ W4 O/ N; S
    else return 1;% f/ k; E1 J+ `0 ]
}7 L7 q+ H' ]# E9 H
: y9 ~% v8 _* i2 t5 b: m8 f
sealoong 回答时间:2022-9-30 14:28:25
我爱你们/ O% C: E# T) A- |9 v  C# d
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版