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

【经验分享】STM32移植FAFTS文件系统遍历设备中的所有文件和文件夹

[复制链接]
STMCU小助手 发布时间:2022-4-20 20:40
一、效果展示( U$ Y! d) n2 R
; o/ A6 q+ t$ M  P9 C! ^
ONDCZ9]5R]E9EX6IP(4E_XT.png
! r5 R% ?2 ^  h8 L5 N% b9 G2 T
! o" R, ]. H8 p2 k0 |, F! O一、测试代码" \$ f  Q- T/ Y" K0 e3 S

0 y; o! i4 o4 K0 L. M, c: e
  1. #include "sys.h"+ i- i/ O. g1 e* T# r* W8 m, }
  2. #include "delay.h"- P+ e9 G) B& G5 A& f
  3. #include "usart.h" 5 T. D. F1 @( V& R
  4. #include "led.h"
    " t" i4 r5 _. G- M
  5. #include "sdram.h"2 q/ s# a" {  ]  ^) e  t
  6. #include "mpu.h"
    5 f0 d* p: W/ X$ W- @) S
  7. #include "malloc.h"
    8 J+ g$ t- J# i" c4 ^/ f6 b
  8. #include "nand.h"  5 K3 l+ a; \/ [6 _& q
  9. #include "ftl.h"  & f/ @9 I/ f5 r. l. W, p& s
  10. #include "ff.h"  
    / U) [6 a0 o) a+ @
  11. #include "exfuns.h" 5 D" t4 k- ]- w9 m- [
  12. #include "string.h"$ A6 }6 E" Y3 ?( Q0 Y# y4 x
  13. & o( S/ C. c& t6 b" @# `* }
  14. . n0 u9 j4 R8 H
  15. FRESULT scan_files (char* path)
    ( c0 Q0 R7 @4 l5 H0 s: ]0 w8 n
  16. {. v! n2 {, ~7 e
  17.     FRESULT res;
    / O( {. w1 {) g  h" r( ~, r! r- @
  18.     DIR dir;) x' N3 f1 k7 g. Q
  19.     UINT i;
    ' K# |! p6 O% Q% P5 ^/ u
  20.     static FILINFO fno;
    1 Z+ i1 _' h( @8 [- E7 r; Z
  21.         static u8 layerDeeph=0;0 ?& ~/ \7 D2 a, p
  22.         u8 j;
    - R. w6 l  w% x, a1 S9 m- A
  23. - }! R8 [- D- V
  24.         
    ' B6 s1 I" |5 q& D* L3 F- W
  25.     res = f_opendir(&dir, path);                     $ V: I. {9 E, a3 z; o5 z  [
  26.     if (res == FR_OK) ( @1 ~/ D9 k! Z$ L  b7 f
  27.         {4 t5 C, }' s9 n$ i4 X0 ]4 W# ^) ?2 H
  28.                 layerDeeph+=4;7 y4 M, p, J$ n$ O* ]* y, b, B6 ?
  29.         for (;;)
    4 T! m  V2 u' N1 z7 a  ~$ }
  30.                 {, Q( `7 \9 _4 ~8 \( D
  31.             res = f_readdir(&dir, &fno);                  
    9 K" t$ t2 e& w
  32.             if (res != FR_OK || fno.fname[0] == 0)
    6 p3 ]5 k4 |/ Q+ y/ I
  33.                                 break;  " l$ p' N9 b4 P/ F! m; m2 |
  34.             if (fno.fattrib & AM_DIR)
    ! i3 \+ c1 r/ G# \
  35.                         {                    ( N* a1 u) g# V4 ~2 f  f9 D
  36.                 i = strlen(path);- s3 Q7 W& [4 X2 C' K6 p
  37.                 sprintf(&path, "/%s", fno.fname);4 |2 |! Y; c$ F
  38.                                 for(j=0;j<layerDeeph;j++); y9 c5 f4 z  {; @9 w  d
  39.                                         printf(" ");
    4 N' V9 Q0 o7 i8 K8 U/ f4 t9 W
  40.                                 printf("%s%s%s%s%s%s\r\n", "\033[","33;","22m",fno.fname,"  <DIR>","\033[0m");- _# N+ g1 @; A/ O
  41.                 res = scan_files(path);                   1 y+ Y% C$ J0 O: n5 V* d) D( c' U) O+ z
  42.                 if (res != FR_OK) break;
    # q4 ]+ @( R5 N6 s
  43. path = 0;
    $ d/ t# @- m! g& M' Q8 Q; J
  44.             } , F0 v8 Z- M$ v- ^  ]2 |; [
  45.                         else
    2 ?1 B1 K* {  o4 O) L4 J
  46.                         {             # j( m  u( @) ^7 U3 Z4 L7 R% C, o
  47.                                 for(j=0;j<layerDeeph;j++)
    ; ]: v7 A) @; Q' l) s2 {9 ?9 D& S
  48.                                         printf(" ");                                & I! F/ I* h- J# v0 a
  49.                 printf("%s%s%s%s%s\r\n","\033[","32;","22m",fno.fname,"\033[0m");
    : z" G- c5 y- u8 ?; B$ C3 [" U; H0 g
  50.             }
    & b3 Y$ q. k  }1 u3 r
  51.         }
    2 |* ~! x2 F4 I8 P% D. w/ t5 u
  52.         f_closedir(&dir);
    $ [% d, ^  T* E6 D' K$ f4 T
  53.                 layerDeeph-=4;; b' |% c8 e) s$ f$ H1 \% h, Z- a2 D
  54.     }
    8 q% B" S9 q* y) H

  55. $ j4 v' K. [0 ~2 z6 v1 o. m
  56.     return res;
    8 L7 n+ |/ |1 ]) \3 D6 ~* A
  57. }
    + @+ t1 E3 {: Q0 U8 C) J
  58. 9 T" u4 d' @0 ~- b  Y% M2 \

  59. 5 \) W7 s4 }( c5 V5 S4 {( i

  60. , }, W5 l1 [0 {1 R1 w2 V; i
  61. 0 N! N- Q% D7 u) u
  62. int main(void)4 z0 D& M0 O! d
  63. {3 t1 `" U5 ~7 W6 o/ ~% T
  64.         char buff[256];
    + @" t% P. b! q3 V2 c$ {
  65.         u8 t=0;          u8 r6 g2 `0 W. ?$ P, v
  66.         u8 res=0;
    ; P5 {: G: L- W
  67.         FIL file;
    ( Z1 `, G7 t) i  m; w
  68.         % R$ o8 [0 _% ?8 h0 t+ N" ^; k
  69.         Cache_Enable();                                        //打开L1-Cache
    4 M- Y7 E; i" A8 a  S
  70.         HAL_Init();                                                        //初始化HAL库* {, ^) J1 D6 [3 C1 A* C" g9 {5 W
  71.         Stm32_Clock_Init(160,5,2,4);                      //设置时钟,400Mhz
    + j. e& u: \6 R
  72.         delay_init(400);                                                //延时初始化! M; ^1 T' e/ `3 [8 \# w! F8 F9 |
  73.         uart_init(115200);                                                //串口初始化
    ( F1 U& @, t. M' F+ R; m3 m5 `
  74.         LED_Init();                                                                //初始化LED
    + C. Y( a! x' H( m
  75.         SDRAM_Init();                                   //初始化SDRAM8 s3 o$ v5 R3 [, Y& ~$ |8 S
  76.         my_mem_init(SRAMIN);                        //初始化内部内存池(AXI)2 }* a9 I8 U* p8 s+ u1 y
  77.         my_mem_init(SRAMEX);                        //初始化外部内存池(SDRAM)
    0 I: i3 e9 {- g9 P; z
  78.         my_mem_init(SRAM12);                        //初始化SRAM12内存池(SRAM1+SRAM2)
    ) x3 u2 y% A+ h1 N% h0 z
  79.         my_mem_init(SRAM4);                                //初始化SRAM4内存池(SRAM4)  Y$ f: o' g+ P
  80.         my_mem_init(SRAMDTCM);                        //初始化DTCM内存池(DTCM)
    " F' F/ k& \3 m5 B9 o
  81.         my_mem_init(SRAMITCM);                        //初始化ITCM内存池(ITCM)
    * v( \( |, s6 ]
  82. 1 v% Q( R3 L7 e! T) S, b1 Z
  83.         FTL_Init();" I: V4 N& r9 z3 y8 }
  84.         exfuns_init();                                //为fatfs相关变量申请内存                                                         
    ! N6 }* A; F/ F) K' k) J
  85.         res=f_mount(fs[0],"0:",1);        //挂载NAND FLASH.        
    + q/ Z/ y) F) D% Y5 [% T
  86.         if(res==0X0D)                                //NAND FLASH磁盘,FAT文件系统错误,重新格式化NAND FLASH4 Y9 X7 `/ k& A! `
  87.         {
    ! }. l- k1 ~1 t9 J; N
  88.                 printf("NAND Disk Formatting...\r\n");//格式化NAND. t" g- ~' A3 N
  89.                 res=f_mkfs("0:",FM_ANY,0,fatbuf,FF_MAX_SS);        //格式化NAND FLASH,1:,盘符;FM_ANY,自动选择文件系统类型,0,自动选择簇大小
      J! J" i" U% X
  90.                 if(res==0)% ?& T$ j3 r5 j. e- j
  91.                 {( I8 ~) {( n8 N
  92.                         f_setlabel((const TCHAR *)"0:NANDDISK");//设置Flash磁盘的名字为:NANDDISK
    ' M9 N! i' T& e7 ?6 v3 Y
  93.                         printf("NAND Disk Format Finish\r\n");                //格式化完成
    ' i' D% m2 x6 e# r/ S7 N
  94.                 }' [1 t+ w, q. [
  95.                 else
    4 R+ b# X& A5 O+ E
  96.                         printf("NAND Disk Format Error\r\n");        //格式化失败
    ( A; s2 Z6 @5 e& c6 G4 d. x! C" _1 a
  97.                 delay_ms(1000);
    ) ]/ }; [0 ~7 J# i. M1 H8 X
  98.         }5 S0 C# }2 K, O; O1 T+ L
  99.         
    # m* l, ^1 q/ e# m. D7 f
  100.         4 B/ U, }( K# g  w2 @0 P
  101.         printf("*********************************\r\n");6 ]6 _% _% J6 v4 H2 D/ ?* Y% I" m
  102.         f_mkdir("/HDC");7 [' q# ?) u3 l, ]# x
  103.                 f_open(&file,"/HDC/1.txt",FA_OPEN_ALWAYS|FA_WRITE);; P6 A6 J- z( m$ O: o4 X  k
  104.                 f_close(&file);
    7 e* `- Y8 j+ o: l. |! [- G
  105.                 f_open(&file,"/HDC/2.txt",FA_OPEN_ALWAYS|FA_WRITE);3 s) W. w5 B8 r. e
  106.                 f_close(&file);               
      ?1 W- [3 z  z9 \: ^$ l7 O
  107.                 f_mkdir("/HDC/A");        4 _( C( Y8 c5 V; c
  108.                         f_open(&file,"/HDC/A/A1.txt",FA_OPEN_ALWAYS|FA_WRITE);
      B# c/ M' S1 i  L! P7 `$ G
  109.                         f_close(&file);        
    . ^4 y: P# J4 I- Y0 g
  110.                         f_open(&file,"/HDC/A/A2.txt",FA_OPEN_ALWAYS|FA_WRITE);
    & Y; q7 _* ]& I: q- m% J1 o
  111.                         f_close(&file);        
    ; F* `, T. I& C7 l" f) q& V- }8 c
  112.                         f_open(&file,"/HDC/A/A3.txt",FA_OPEN_ALWAYS|FA_WRITE);  y0 S4 E) |& \+ X: o$ L$ L
  113.                         f_close(&file);                ! H  u* A8 r% N. d5 }# y: p
  114.                 f_mkdir("/HDC/B");
    & f# [% u$ a. H
  115.                         f_open(&file,"/HDC/B/B1.txt",FA_OPEN_ALWAYS|FA_WRITE);
    ) a5 ]3 s. B0 J" d
  116.                         f_close(&file);        & p; n1 S" v! W, U
  117.                         f_open(&file,"/HDC/B/B2.txt",FA_OPEN_ALWAYS|FA_WRITE);! ~$ X4 d( E/ m& H/ K% s
  118.                         f_close(&file);        : h9 v- Q$ `* d7 \+ F6 f( y
  119.                         f_open(&file,"/HDC/B/B3.txt",FA_OPEN_ALWAYS|FA_WRITE);$ Q* F4 H$ f5 L' e& ~! [
  120.                         f_close(&file);                  R2 B0 g5 z4 Z9 J8 [% X
  121.                 f_mkdir("/HDC/C");! L& n3 ]( ]7 b; e/ M% o
  122.                         f_open(&file,"/HDC/C/C1.txt",FA_OPEN_ALWAYS|FA_WRITE);
    * g! a+ O  m; F6 |  I$ _% i
  123.                         f_close(&file);        & Y' X% b1 l- @
  124.                         f_open(&file,"/HDC/C/C2.txt",FA_OPEN_ALWAYS|FA_WRITE);
    5 l; a& R! K3 Z! C
  125.                         f_close(&file);        ( Q9 @" O# p) w- N( F- G0 D
  126.                         f_open(&file,"/HDC/C/C3.txt",FA_OPEN_ALWAYS|FA_WRITE);
    3 [) P0 ?7 b! W0 R
  127.                         f_close(&file);                        
    " }* @. D4 m+ J
  128.         
    8 D% H3 m, B) {0 l  m, D
  129.         % ^+ @( k/ _, T
  130.         
    # w8 \; h8 j. N% R* u! c2 H7 W
  131.         
    ! w9 F) Y# L$ F
  132.         
    ! j: H* f: Z" e
  133.         strcpy(buff, "/");
    / F7 \$ z5 l4 j4 C: i
  134.         res = scan_files(buff);* K- B1 \. `" `" J

  135. 7 c" j9 Z7 O( [) E) w
  136.         7 [* M/ o! C) |6 s& O6 d" R
  137.         while(1)  `9 _6 h! y6 U2 l0 z
  138.         {9 G: i) a1 k$ y5 X, L* w4 z% s
  139.                 t++;
    * R% \4 G0 W% V
  140.                 delay_ms(200);                4 p- [; S9 w% Y& c: f. O( s  W  S
  141.                 LED0_Toggle;//DS0闪烁
    2 i2 s% I, \5 q8 Q$ }+ C
  142.         }
    , E$ \( d8 e( Y5 H8 C9 q0 p
  143. }6 U  E) q! S: m- |! v, w

  144. " d1 ~& @9 Z* T
  145. 0 g/ N) |' j4 `

  146. * V% L% z( b! s2 ?; j" G
复制代码

$ C! V8 O9 s, L- m) d  c: U: e! H9 B  k
赞 收藏 评论0 发布时间:2022-4-20 20:40

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版