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

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

[复制链接]
STMCU-管管 发布时间:2022-9-30 12:47
7 N3 U3 ?. V! B5 e& o* I8 X
分享一个STM32移植FAFTS文件系统遍历创建文件夹
; s: T: s$ y; L) B# F* ]
  1. FRESULT folder_create(char* path)
    ) Q9 S0 ~1 J! z5 K2 ~3 y: K
  2. {# h. N/ N! O0 B+ s& u7 e$ d
  3.     FRESULT res;
    ) Q$ F1 S1 q& d! s
  4.     DIR dir;
    8 S4 R/ \  U* w
  5.         char *str = path;
    : J% E0 [- ?8 t! O& U8 y6 x
  6.         char *pbuf;
    & i+ |- w6 b6 T* \
  7.         u16 cnt=0;; b, G4 H5 h2 R# H% m+ G  q
  8.        
    % I: N' g! ^: o
  9.     res = f_opendir(&dir, path);   
    " T( m& J/ }* r( s) K( P( l7 ^( M
  10.         if (res == FR_OK)
    1 f! T& W2 ^/ M8 ]
  11.         {
    ; f7 \& s6 S, r& m, {
  12.                 f_closedir(&dir);
      e8 v- w8 e+ h8 t/ d- n
  13.                 return FR_OK;
    2 n: a" B. V: u" K
  14.         }
    % x' A# J4 g, _9 X
  15.         else$ N9 P, `" T; N' ~. G6 ?
  16.         {- [/ ^' S# y1 t* a2 W
  17.                 pbuf=mymalloc(SRAMIN,200); - p! b2 G8 S$ \, X0 R$ p+ G
  18.                 if(pbuf==NULL)
    5 Z7 z3 Z) P; R4 J% J2 ~
  19.                         return FR_NOT_ENOUGH_CORE;               
    3 Y  ~: v9 K: e$ t* t
  20.                 while(*str !=0)0 G& |' ]" a1 l$ S- \. B3 h' D, ^
  21.                 {5 n! ^/ ?! J8 J( @/ ~
  22.                         if(*str=='/')! j6 M: w$ l; S9 u3 d- @* Y
  23.                         {* O" \( F4 @$ s7 f0 ]
  24.                                 memset(pbuf,0x00,200);
    * O% K8 l( J1 {* K$ `3 d
  25.                                 memcpy(pbuf,path,cnt);  a+ M9 h9 b9 e. Y
  26.                                 printf("%s\r\n",pbuf);1 T, F- _$ |6 G+ F! Z1 N8 c# v" V

  27. 5 K" X# G4 q2 Y& E. A: ?
  28.                                 if(f_opendir(&dir, pbuf)==FR_NO_PATH)
    * Z% p) y) p# S- s* a
  29.                                         f_mkdir(pbuf);5 Q- q3 E' ^* s6 Y1 y) c
  30.                                 else
    / }  k# H4 G& W/ N( t2 @( h- N
  31.                                         f_closedir(&dir);        & D* M+ N8 V% w/ w! V* h
  32.                         }
    $ l* ]2 z  m* \+ k; O2 j
  33.                        
    , ?) H/ [) l6 O
  34.                         cnt++;1 C/ C/ T! ?( F/ ]" {
  35.                         8 z" }, _' N+ m- C" m6 e- O
  36.                         str++;
    ) u% X: w# m; v, @/ N
  37.                 }! s3 j; l7 d2 X! A1 Y  K
  38.                 myfree(SRAMIN,pbuf); ! F. p, c5 F" I% E' N
  39.                 res = f_mkdir(path);//创建最后一级目录
    % u' {0 e  Z  i- S+ [/ c; j
  40.                
    7 D9 R6 \; c" N. v0 I! [
  41.         }
    5 i* X5 d$ W# Q0 v; r" J
  42.         return res;& w) p3 P5 ?+ c' f+ G# h
  43. }6 s' _% c2 n' P6 N2 o7 n* \. G
复制代码
调用方法:
1 f4 F+ t% s2 _
  1. folder_create("0:/ccc/x1/x2/x3/x4/x5/x6/x7/x8");
    ) `: L/ G5 W% c% i  u. P5 F
复制代码
, f) h9 o& o' f5 b0 h
! o! r7 N; p" L& ]& F" T3 y  Q% g
1 r6 ~% g- Y. t

% }% K* C7 ^* b& F% C( [
收藏 评论2 发布时间:2022-9-30 12:47

举报

2个回答
至暗时刻 回答时间:2022-9-30 13:30:33
【分享一个基于STM32+FatFs文件系统+Vs1053b制作音乐播放器---Lrc歌词解析】' m, _& C$ c7 B# W: H6 a
#include <stdlib.h>
- ~+ o. H& L- p) g$ @# p#define LRC_TABLE_MAX 100                          
+ g. A3 S6 V9 r& istatic uint16_t g_usaLrcTimeTable[LRC_TABLE_MAX];  //记录歌词时间& P4 t. j3 m# ?0 ?5 Y# K
static char g_caLrcTextTable[LRC_TABLE_MAX][100];  //记录歌词文本) y( C% D' s2 L1 {1 o2 d
static uint8_t g_ucLrcTableIndex;                  //歌词"时间/文件表"的索引值
& j. `% b0 G8 p3 x2 Q/*****************************************************************************\5 I4 ~$ c+ ?4 D+ q# J6 c+ k
函数功能:歌词解析
% m" q" M* E, {5 p, u: C2 F 形参说明:_cpLrcPath 歌词路径
* ]  P' V- ~- E5 K 返 回 值:0 - 成功 / 1 - 失败) Y& w' `$ u$ R
\*****************************************************************************/- L2 `% v. V; l! o9 S
u8 VS1053B_Parse_MusicLrc(const char *_cpLrcPath)
. @$ ]9 M: q% E9 o6 ~{  q( L7 e- C& }. c
    //变量定义' U! Z9 x6 G0 r) w. U  {
    FIL fp;          //文件指针% C) m/ H3 S  P0 Y, t/ R* j4 h
    FRESULT res;     //文件系统返回值
( t) x8 m% q' O: s* O7 Z    UINT br;         //成功读取的字节数
. ?4 @* O; k" H/ g/ ?  w2 z' A6 T% x
    uint16_t usTime = 0;    //用于临时存放转换计算后的时间0 l& p9 s$ A& k) t! H0 U" R
    uint32_t ulFileSize;    //歌词文件总大小3 f* J4 P" G# Z# B9 }* o
    uint32_t i = 0, j = 0;  //临时变量
" S7 P, c1 O+ B  B4 F    char *ptmp = NULL;      //歌词内容指针
  j! d/ m" L" f- W* ~+ b  d    char *pbuff = NULL;     //用于存放所有歌词内容
! L) E, @# t# {* [7 b
# _; B& N) {% m' T  ]    //打开文件
4 I5 q+ z! z" V4 ]2 W    res = f_open(&fp, _cpLrcPath, FA_READ);( k: t  ~/ R8 P  F- h7 h
    if (res == FR_OK)
- A* @) z/ j+ I; g. M# V    {1 ^! ]5 h$ S6 B# f: t! V) \' ?
        //计算文件大小9 x  x' p) v" T9 A
        ulFileSize = f_size(&fp);% n3 ?8 ], o6 w2 h
        //申请空间+ l  l: O- k: X7 g. {  J1 X
        pbuff = malloc(ulFileSize);
1 ^! Y! M5 [- J        if (pbuff != NULL). A; F1 F- _8 A5 A1 j
        {
  K( h$ B/ I" T            //一次性将总缓冲区读满
: \4 B1 T0 _$ b2 |1 S            res = f_read(&fp, pbuff, ulFileSize, &br);
' x0 k# `% }) L+ p6 _! d, l            if (res == FR_OK && br == ulFileSize)& Z- `/ g- J" }2 f
            {6 \% r# N: f% l
                //找到歌词的起始位置
* ]+ A+ G& ^( j                i = 0;* V! X" D% r3 X/ a" g2 X% g
                ptmp = strstr(pbuff, "[");  9 o* Y5 a$ ?# W  l, o4 r
                while (ptmp[i] != '\0')     //遍历缓冲区中的信息, I, ]7 J% x( ~- F
                {! P4 ?. T2 _5 s, p! Q; E
                    /**********************解析时间**********************/
" V" ]; P8 ?8 D0 W& p                    //[00:40.452]
, \1 @* _( n3 u0 v: }, V/ f                    //[分:秒.毫秒]
) c8 S: M& K+ ?: A) l! f                    usTime = 0;( n; X0 d- g! a/ K, C
                    //计算该行歌词播放时间(秒),毫秒部分四舍五入, y8 O, C/ e% _
                    usTime += (ptmp[i++] - '0') * 60 * 10;  //分(十位)
# T5 f6 y2 }" B; I7 w4 T                    usTime += (ptmp[i++] - '0') * 60 * 1;   //分(个位)) L1 ]; T) a8 |$ V( M# y
                    i++;    // ':'- C4 z9 c& h: l+ {  u
                    usTime += (ptmp[i++] - '0') * 10;   //秒(十位)' ~5 r8 `; J8 N! U- B
                    usTime += (ptmp[i++] - '0') * 1;    //秒(个位)$ T* S0 y6 t: S3 q) H$ `' X, m
                    i++;    // '.'
- I' \; Z! q' t                    if (ptmp[i++] >= 5)  usTime++;6 D4 C! c' V" M) g) Z5 W: G
                    //手动调整时间误差
# m$ [+ P5 B4 F2 o+ G$ q. |  Q                    if (usTime > 5) usTime -= (usTime / 10 + 1);
$ Y1 n% W1 G& R                    //保存时间
. y) w; l" I$ Q% ~                    g_usaLrcTimeTable[g_ucLrcTableIndex] = usTime;) Y; g( Q- \8 f3 A
                    printf("%02d:%02d ", usTime/60, usTime%60);! D% d% F# l/ C( G. i
& L& `+ _# g; H" h2 H/ K2 t, l
                    /**********************拷贝歌词**********************/
: s: S+ Y8 H# o3 r) E2 U" o                    j = 0;- J. |6 n% F9 S2 H* j
                    //让指针偏移到歌词文本部分
, k0 c, u$ e* s2 I' N! z                    while (ptmp[i++] != ']');
  w' A4 c! A- f- e& P- W" Q9 z                    //拷贝歌词内容
/ o4 `1 B) @" K                    while (ptmp[i] != '\0' && ptmp[i] != '[')  - p- Z% T3 q  R  n
                    {
5 M9 ^4 |, ~) C; s                        g_caLrcTextTable[g_ucLrcTableIndex][j++] = ptmp[i++];   
2 q! n8 t% H& {+ T* [" f. w/ E" n" f                    }   
* ]4 K# @" E* ?                    //制作成字符串% N* q( L( K( ~
                    g_caLrcTextTable[g_ucLrcTableIndex][j] = '\0';  r+ G, V8 f1 H/ I4 x( J* D
                    printf("%s\r\n", g_caLrcTextTable[g_ucLrcTableIndex]);
# h8 z1 }/ X! c8 j# J% S& R8 G                    g_ucLrcTableIndex++;7 g: F5 a8 g4 S6 v% Y6 `( s9 a( k
                }( G) B5 g6 ~' Z( z, Y$ t; G
            }
2 Q9 q' ]5 G( n0 z% L            free(pbuff);" j7 l- z6 O, y% i0 W
        }   
+ s% ~2 u: w: i' ^- ]5 _4 x' n: `  j        f_close(&fp);. e. n3 @. P3 E/ ?7 t# Z
    }
/ V; G6 R6 z# U  z1 L/ H    if (i != 0) return 0;
' K) `( r2 O# u  x5 m( F5 ?    else return 1;
+ ^  L9 x3 I5 T6 p% [}2 \, W9 c5 N9 ~& m
7 z3 r2 R7 R0 ~8 h
sealoong 回答时间:2022-9-30 14:28:25
我爱你们1 R  N3 F$ s2 n  B+ _: @
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版