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

基于STM32CubeMX FATFS文件系统经验分享二

[复制链接]
攻城狮Melo 发布时间:2023-6-28 14:56
1.硬件设计
D1指示灯用来提示系统运行状态,串口1用来打印调试信息,使用FATFS文件系统对SD卡进行相关操作
D1指示灯
USART1串口
TF卡

( A: a/ `6 }5 S* C  p2 t
微信图片_20230628145607.png

% r2 o+ V8 R$ b) B6 O" g( K
+ q( O2 W' o/ D
2.软件设计
; t8 x: h' ?+ h" k: k+ }$ E
2.1 STM32CubeMX设置

1 |7 Q* f! x8 X, x1 Z
➡️ RCC设置外接HSE,时钟设置为72M
) I( r% g- w  s5 o3 q' u
➡️ PC0设置为GPIO推挽输出模式、上拉、高速、默认输出电平为高电平

" U) j! y$ e. T2 X* ?4 Q3 j
➡️ USART1选择为异步通讯方式,波特率设置为115200Bits/s,传输数据长度为8Bit,无奇偶校验,1位停止位

" H2 V' Y% B' I* r8 t
➡️ 激活SDIO,详细请参考SD卡例程

8 j" R3 I, J2 v8 u+ N6 Q
➡️ 打开FATFS文件系统,按下图配置,其余默认值
$ @+ z! ~3 R( ]$ k
微信图片_20230628145602.png

( ]4 V) b# `1 g; d& i: Y% I! s
微信图片_20230628145558.png
+ A2 P* I5 d' B: d" U+ ^4 T. [+ e
➡️输入工程名,选择路径(不要有中文),选择MDK-ARM V5;勾选Generated periphera initialization as a pair of ‘.c/.h’ files per IP ;点击GENERATE CODE,生成工程代码
2.2 MDK-ARM软件编程
) e+ Q7 U& f4 X8 f
➡️ 在main.c文件下编写FATFS读写SD卡测试代码

1 R$ v5 S3 Z8 `9 L1 ~
  1. int main(void){
    3 L. f* t& y2 {4 Q# f
  2.   HAL_Init();
    - i/ l+ I/ H, g, z
  3.   SystemClock_Config();+ S* ?  ?: c  S3 r% q( |# {2 K
  4.   /* Initialize all configured peripherals */# z8 N* D; q; _; S2 e( m& T
  5.   MX_GPIO_Init();
    ; ?7 q) a, M' ]% j& V$ K: H
  6.   MX_CRC_Init();3 ?) X/ Y' u0 {0 e/ j- w
  7.   MX_FSMC_Init();
    - z: {4 y  A' w  R# N% B
  8.   MX_SDIO_SD_Init();
    / G9 g* K; B2 f$ H
  9.   MX_USART1_UART_Init();3 j( k1 Z: r8 e( B1 c' m
  10.   MX_FATFS_Init();( Z* u+ Q5 Z: r8 F
  11.   /* USER CODE BEGIN 2 */
    & @" B. K, @0 O$ r$ E" A2 W
  12.   uint32_t byteswritten;               
    : |% {8 e! N2 a- X
  13.   uint32_t bytesread;                   ' E! v- y9 ]. \, u, x' m- g7 i
  14.   uint8_t wtext[] = "This is STM32 working with FatFs";
    ; J8 P7 E. J& o4 d3 K: r; s$ h
  15.   uint8_t rtext[100];                  
    $ ]2 P" b: X( J
  16.   char filename[] = "STM32cube.txt";" I, C% ~6 i6 f0 g8 E
  17.   char SensorBuff[100];
    % W+ i7 K, ]: s
  18.   printf("********* STM32CubeMX FatFs Example *********\r\n\r\n");        . e& R9 R) c' I+ M
  19.   if(f_mount(&SDFatFS,SDPath,1) == FR_OK){
    ' U" u* v" z) _4 ]1 Z4 W
  20.     printf("f_mount sucess!!! \r\n");
    ! Y2 {6 \! m, t/ D
  21.     if(f_open(&SDFile,filename,FA_CREATE_ALWAYS|FA_WRITE) == FR_OK){
    ) {( |5 H% `' ?. d
  22.       printf("f_open file sucess!!! \r\n");
    * n4 C3 k& d* b; [/ P# N! A
  23.         if(f_write(&SDFile,wtext,sizeof(wtext),&byteswritten) == FR_OK){1 S( |" @5 P# C( @8 D2 v) A+ s
  24.           printf("f_write file sucess!!! \r\n");
    ( J4 l6 W. l9 Q  B, X
  25.           printf("f_write Data : %s\r\n",wtext);
    5 e5 h- p7 ?0 y) d" D7 O8 c
  26.           if(f_close(&SDFile) == FR_OK)2 R# d5 J# H/ R" ~
  27.             printf("f_close sucess!!! \r\n");
    ' T9 G. e% _9 O- k% n5 q0 |1 ~+ ~
  28.           else, @$ e5 j( H1 F9 w$ I, o3 \
  29.             printf("f_close error : %d\r\n",retSD);/ _+ j6 L8 u( k
  30.               }
    ( I+ X) R: j! e! T2 n
  31.         else
    1 v) i9 y0 L' U6 W" d
  32.           printf("f_write file error\r\n");    ( [6 L% [& O/ j( _5 |- A
  33.     }8 W5 V+ ?6 ~7 ^
  34.     else& N) N2 i" u( E" m  n2 s% E" X
  35.       printf("f_open file error\r\n");  # ?1 q0 w* j3 R( v3 p: D/ {
  36.   }else
    ( n- L4 t8 z- t7 |' h
  37.     printf("f_mount error : %d \r\n",retSD);, v/ Z/ \5 Q5 b2 R6 w
  38.                 ) m% g5 s9 h4 m: [/ E& M$ f
  39.   retSD = f_open(&SDFile, filename, FA_READ);+ B) C& a( _1 K+ `& o
  40.   if(retSD)
    # Q$ t2 H( B6 f6 [8 E7 \" u' g6 }
  41.     printf("f_open file error : %d\r\n",retSD);, G: D! Q& }) f0 a% P9 {7 l; K
  42.   else
    4 L$ J: m+ g( J1 ]; ^0 j5 P) c. a
  43.     printf("f_open file sucess!!! \r\n");
    ( {" X3 x$ p9 l; b/ ^

  44. % S' T0 }- I+ }8 e
  45.   retSD = f_read(&SDFile, rtext, sizeof(rtext), (UINT*)&bytesread);
    % P, P/ l0 O3 Q. p9 P' I
  46.   if(retSD)6 X" Q: ^, b+ i4 O
  47.     printf("f_read error!!! %d\r\n",retSD);3 @" g) J" E$ z9 H3 n7 C9 u* e7 t
  48.   else{
    : P. B# L2 \: }4 m
  49.     printf("f_read sucess!!! \r\n");% I6 u( p+ _+ X0 f" X( x
  50.     printf("f_read Data : %s\r\n",rtext);
    ' |- E9 \9 C2 N5 r0 r# o  i4 S
  51.   }
    ' ~3 s8 Z7 Q; k

  52. . f2 h: R" z- E/ h
  53.   retSD = f_close(&SDFile);/ _8 c' D; _2 n( Z
  54.   if(retSD)# q( N& ]: ]" y* Y1 \
  55.     printf("f_close error!!! %d\r\n",retSD);& Z' U0 }9 T# y3 Q% V, o
  56.   else  ]6 D, G1 e+ [6 r9 |. o' X
  57.     printf("f_close sucess!!! \r\n");
    * p6 B# U+ I5 U  C# [1 m
  58. # t  Q% F/ U6 L0 U& q2 \  P3 `" m7 F
  59.   if(bytesread == byteswritten)
    $ k! T& [, U1 e6 Z0 H
  60.     printf("FatFs is working well!!!\r\n");
    * G6 M' ^2 }+ O: y- m
  61.   if(f_open(&SDFile,(const char*)"Sensor.csv",FA_CREATE_ALWAYS|FA_WRITE) == FR_OK){  p- K9 c: |& A! I. }# y; E
  62.     printf("Sensor.csv was opened/created!!!\r\n");+ [. _3 H) ]0 P9 n
  63.     sprintf(SensorBuff, "Item,Temp,Humi,Light\r\n");
    ( q+ {0 O0 \1 T! ~
  64.     f_write(&SDFile,SensorBuff,strlen(SensorBuff),&byteswritten);: K5 e+ e8 b& d0 L; p$ B
  65.     for(int i = 0; i < 10; i++){9 X& f0 t2 J. G" s
  66.       sprintf(SensorBuff, "%d,%d,%d,%d\r\n",i + 1, i + 20, i + 30, i + 40);( x" V1 j9 O. s0 i
  67.       f_write(&SDFile,SensorBuff,strlen(SensorBuff),&byteswritten);
    7 Y% `6 b) X9 {# {# m' i
  68.       f_sync(&SDFile);3 o, ^5 t- p/ D3 h' g' c
  69.     }2 T( C5 m. M9 r3 @
  70.     f_close(&SDFile);2 h( g* G# m7 `# C
  71.   }) Y7 c9 Y7 I! d- o" g4 [" _6 ]
  72.   while (1){, l) a7 p' M. l4 }/ ^
  73.     HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_0);- F" q  z0 c& s% k7 ^
  74.     HAL_Delay(500);2 W/ H9 x4 b4 M
  75.   }& G) }# v6 f! R5 L( N( z! v
  76. }
复制代码
3.下载验证
如果使用的是新SD卡,需要在电脑上进行格式化,建立FAT文件系统,FATFS才能识别并操作SD卡

8 K& I- x7 r; y7 a; e4 \5 a
微信图片_20230628145550.png

9 E+ N6 N1 s4 ]0 O4 v4 ~
编译无误下载到开发板后,可以看到D1指示灯不断闪烁,串口打印出如下信息:
( u% ]3 g3 W, M. l
微信图片_20230628145547.png
) D% z  o* p. e  [
将SD卡插入PC后,可以看到SD卡里建立了2个文件:Sensor.csv和STM32cube.txt,打开文件后可以看到写入的数据
) X% _8 P1 ~  Z- z" W
微信图片_20230628145544.png

. u, C( j& }( K* z* P1 M- Q
微信图片_20230628145541.png

& F8 S. i, j: v7 G/ a
微信图片_20230628145845.png
3 W' e" R4 S2 R
转载自: 嵌入式攻城狮
如有侵权请联系删除

7 q' f. O5 j: S5 a8 b
收藏 评论0 发布时间:2023-6-28 14:56

举报

0个回答

所属标签

相似技术帖

官网相关资源

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