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

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

[复制链接]
STMCU-管管 发布时间:2022-9-30 12:47
! J- j' h" R$ y# L# [) p/ b  I
分享一个STM32移植FAFTS文件系统遍历创建文件夹
) v1 D  n) o* ^( J  ?( Y
  1. FRESULT folder_create(char* path)) F+ X( O& @) K* o& U( g( a
  2. {4 s% _: M& B" ^# T+ r$ C) ~
  3.     FRESULT res;
    1 @+ p* \" V6 b! c
  4.     DIR dir;+ L, Y7 T9 e6 u0 s2 L' F- Z: a
  5.         char *str = path;
    - [% F- _' i' X/ s$ g+ y
  6.         char *pbuf;& _  F! t2 B2 ^$ p
  7.         u16 cnt=0;# j9 S) L6 ]8 E6 m: ^$ E
  8.        
    - R+ p6 P9 _$ k* r
  9.     res = f_opendir(&dir, path);   
    ; u# i8 B7 h' X8 o. z; Q6 R
  10.         if (res == FR_OK) & _7 \; ^% F5 C! ]* |2 ^
  11.         {
    0 M- T0 m# n: N
  12.                 f_closedir(&dir);
    + X' m  R6 H$ V8 w- x
  13.                 return FR_OK;
    , c) m+ M/ o8 s% K1 m
  14.         }
    - J7 A2 H& e! Y0 ?$ r9 f
  15.         else
    : b) }( O8 O& ~3 k9 x
  16.         {0 q: r( D5 b! @! X# O
  17.                 pbuf=mymalloc(SRAMIN,200);
      O% m+ c  V7 L
  18.                 if(pbuf==NULL)
    8 y6 }+ U" ]; A: X
  19.                         return FR_NOT_ENOUGH_CORE;                5 x; x. N4 N9 l
  20.                 while(*str !=0)- I( k# T5 }  v+ j
  21.                 {
    1 @% ?0 x5 \7 @* `/ I; F" {
  22.                         if(*str=='/')+ r# d( R4 a$ g! j( f3 n1 R
  23.                         {7 \+ r8 m9 R; |  i4 o6 o" o' W
  24.                                 memset(pbuf,0x00,200);
    . J6 t/ B, ]+ B3 W
  25.                                 memcpy(pbuf,path,cnt);" ^* ^; C) D/ A# Y) _
  26.                                 printf("%s\r\n",pbuf);
    . o% J1 s6 \/ X5 G2 y
  27. : F1 `0 t, `) @. u' n7 _% W, D
  28.                                 if(f_opendir(&dir, pbuf)==FR_NO_PATH)
    # H3 m  P1 \0 i& y" I% h) n3 R
  29.                                         f_mkdir(pbuf);( u9 \3 q$ a- n, C3 v% [9 O: o
  30.                                 else. \0 }- U, P& z( f* U; ~  U5 |
  31.                                         f_closedir(&dir);       
    * l+ f6 b  F; y- R
  32.                         }
      ?# I6 C: y8 k" l
  33.                         + e- [9 V- \: T, U: `" {
  34.                         cnt++;6 r' }  e: W& d" h3 z5 v/ g
  35.                        
    9 i8 ]6 [, V( i% v' x0 o
  36.                         str++;
    2 C$ a5 P7 s5 u
  37.                 }
    & S7 ?5 z8 T+ u0 M
  38.                 myfree(SRAMIN,pbuf);
    ) @+ m2 _  n/ z" C$ L% z/ T+ ~3 h% o
  39.                 res = f_mkdir(path);//创建最后一级目录
    5 t9 o, K0 Z2 n/ n1 w; L
  40.                 2 d2 D2 z( c0 L# U0 w% ]& u
  41.         }2 c: Q! v7 Q$ t& E
  42.         return res;
    $ y8 v0 y7 _) u2 a2 S  I
  43. }
      ?9 p5 Z2 e5 o2 A/ E/ z
复制代码
调用方法:, g5 F$ U; s& I- [+ X' U* q
  1. folder_create("0:/ccc/x1/x2/x3/x4/x5/x6/x7/x8");
    4 I& B7 ?9 J; L
复制代码

: |$ `; S: S: m- F) @! z- \9 z& [# O6 o- W" _1 {

. m8 m$ ]$ E6 @) k1 T9 e9 n9 Q! Q+ p7 s$ b6 K" ?3 Z
收藏 评论2 发布时间:2022-9-30 12:47

举报

2个回答
至暗时刻 回答时间:2022-9-30 13:30:33
【分享一个基于STM32+FatFs文件系统+Vs1053b制作音乐播放器---Lrc歌词解析】
/ F* `) `# f9 ~- p" N#include <stdlib.h>
9 ^1 |0 N% i- C9 W/ _. x#define LRC_TABLE_MAX 100                          
$ }( V! T6 ~; P& `0 {  m: fstatic uint16_t g_usaLrcTimeTable[LRC_TABLE_MAX];  //记录歌词时间
3 A9 I3 |' n( v  X& n4 V! }9 h# n, \static char g_caLrcTextTable[LRC_TABLE_MAX][100];  //记录歌词文本
! o. z# Y7 J/ pstatic uint8_t g_ucLrcTableIndex;                  //歌词"时间/文件表"的索引值" U' f" x% V* O4 h' I2 W5 w% S
/*****************************************************************************\, L4 P; [6 R# {; f
函数功能:歌词解析
: k( q/ U# p8 A% W/ M8 P* S8 Q 形参说明:_cpLrcPath 歌词路径' h# P3 h1 A, S. ]' F  S+ Q' h
返 回 值:0 - 成功 / 1 - 失败( P/ H2 i$ Q% B$ _5 S
\*****************************************************************************/
* A, I" I; Y7 [! d+ N/ wu8 VS1053B_Parse_MusicLrc(const char *_cpLrcPath)
# v. Q2 o5 A! I{: m) Y2 i6 v3 u- M& u
    //变量定义. O6 V) {# t' v9 y4 }2 {, ?3 ^
    FIL fp;          //文件指针: [1 _) T/ ?% a1 N' J
    FRESULT res;     //文件系统返回值8 P* e- L! ]1 z  ]0 P4 C4 x
    UINT br;         //成功读取的字节数
  L5 V) B0 E" _( y/ f8 v3 u" ?% C: u" S- o- A
    uint16_t usTime = 0;    //用于临时存放转换计算后的时间) r' M! V* h, Y) _- c/ |1 z
    uint32_t ulFileSize;    //歌词文件总大小0 [) k( a8 A, I! g4 d
    uint32_t i = 0, j = 0;  //临时变量
' C2 f3 m# @1 Q' T    char *ptmp = NULL;      //歌词内容指针) y- \1 ]- K) s5 ]3 o6 n& a
    char *pbuff = NULL;     //用于存放所有歌词内容* C. C2 c$ L) @. n

2 I) D( q$ b" T5 c: G  x    //打开文件( m- X% e$ B4 [- V+ c
    res = f_open(&fp, _cpLrcPath, FA_READ);
; l$ t# |* }" h4 w    if (res == FR_OK)( R# e! E! G) ?  Z9 w
    {: M5 H% N0 J$ U. s) v+ F: h
        //计算文件大小
  r0 K3 i' I6 w* [        ulFileSize = f_size(&fp);* L. {' r% }& Q& [) n4 }1 ]
        //申请空间7 d; r& E- R; Y+ F/ m
        pbuff = malloc(ulFileSize);8 Y$ I9 V" \* D: k; ~, _
        if (pbuff != NULL)) `5 E0 g3 g" h9 t, V
        {; y. c# n4 K2 n0 C
            //一次性将总缓冲区读满6 |+ ^$ c! d3 ?7 ^1 R4 Y
            res = f_read(&fp, pbuff, ulFileSize, &br);/ ^+ U9 W1 T' E, W
            if (res == FR_OK && br == ulFileSize)
/ C  ^$ u, ^% f6 B4 ?            {
. Z5 Q! H6 [- I. p; d                //找到歌词的起始位置% j( I; q" O( |! D, O* H. L
                i = 0;
( N- A2 g8 n9 e& K8 z# L                ptmp = strstr(pbuff, "[");  
9 J9 `* m: K0 Z2 B- h" }8 B                while (ptmp[i] != '\0')     //遍历缓冲区中的信息5 s7 t* Z; i; b* c
                {% T4 P" m3 A: t+ x
                    /**********************解析时间**********************/5 R! e2 Q9 {2 D% v
                    //[00:40.452]
+ i% E0 Z5 X2 {! i! z( [                    //[分:秒.毫秒]8 V4 m0 @/ M4 c' ?6 t
                    usTime = 0;
/ Q2 M! A3 y4 W9 V& Y7 N7 o, Z) l8 T                    //计算该行歌词播放时间(秒),毫秒部分四舍五入
, Y; \5 ^3 ?! e6 A1 j                    usTime += (ptmp[i++] - '0') * 60 * 10;  //分(十位)
- I# c" }3 x' E# |8 g- r                    usTime += (ptmp[i++] - '0') * 60 * 1;   //分(个位)
0 Z! s( U# [" @4 _6 o' y% m6 f                    i++;    // ':'. S/ X* [3 y! a8 _+ c* K
                    usTime += (ptmp[i++] - '0') * 10;   //秒(十位)
+ I1 M. v% G% p" J, X0 E8 [                    usTime += (ptmp[i++] - '0') * 1;    //秒(个位)4 a: l: ]  U# K  i# J
                    i++;    // '.'
1 w4 [3 S, ?2 M                    if (ptmp[i++] >= 5)  usTime++;
3 f6 g" `+ [& Z1 y3 q                    //手动调整时间误差3 q' d4 Y* e$ b5 [3 A4 l: k
                    if (usTime > 5) usTime -= (usTime / 10 + 1);
; ^; R5 W7 |* g$ C, z                    //保存时间7 B  Y* X6 x/ u4 g
                    g_usaLrcTimeTable[g_ucLrcTableIndex] = usTime;
# W% x( w8 k( h. {; j  X! \3 t. M                    printf("%02d:%02d ", usTime/60, usTime%60);$ h' L& _+ j9 \

% J4 \- a( C7 d% T                    /**********************拷贝歌词**********************/' M5 u$ ]8 j0 ^0 S
                    j = 0;0 ~1 x, y! e1 P  N
                    //让指针偏移到歌词文本部分
$ K- W$ B4 Z# d8 C5 l3 w- V                    while (ptmp[i++] != ']');
8 H( K+ X+ }6 d+ W2 R                    //拷贝歌词内容
# q& E# X+ }0 f( t- t7 y! z                    while (ptmp[i] != '\0' && ptmp[i] != '[')  & r% o& B3 C4 x8 V+ Q+ Z* u
                    {
9 I% B6 B! S9 O3 l" S3 w                        g_caLrcTextTable[g_ucLrcTableIndex][j++] = ptmp[i++];   
  {6 e& L0 e/ J3 v+ Q- b                    }    5 g3 O! \$ [- p6 c: U
                    //制作成字符串( ?' ]9 ~* o! M* X8 d) H  k
                    g_caLrcTextTable[g_ucLrcTableIndex][j] = '\0';
. p- u8 L: B. ^4 u* B, c0 ?                    printf("%s\r\n", g_caLrcTextTable[g_ucLrcTableIndex]);8 \6 Q- d# p1 P& U
                    g_ucLrcTableIndex++;
. [4 l! M. A# V1 M1 S                }
5 t9 d. @5 [, {) M9 s1 u( l" h            }
4 |# U0 h7 a: C6 j# f            free(pbuff);
( u4 Y% l3 d  t; ~( q1 J        }    ) p: ~7 s9 B# X8 q) O, A- o
        f_close(&fp);3 E* }, }& M' W5 O
    }7 t% B( R: m7 v
    if (i != 0) return 0;
' o0 s. v/ W# L$ B) n9 L    else return 1;
* P. W% x) k  W}. C: i- n2 h3 z( E& r' d

0 }* ~9 ^, ~" b8 r( n# U% x
sealoong 回答时间:2022-9-30 14:28:25
我爱你们
! m. [- Y6 M6 Z0 Y7 e2 j7 P
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版