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

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

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

, R: R( O7 c4 p) x
微信图片_20230628145607.png
) w' d# W5 ~7 l+ @
0 U' t; y) _6 `) Y; `  v# h. q
2.软件设计

; D& z5 `  h+ K# _' M1 @
2.1 STM32CubeMX设置

3 Y$ i0 C7 g7 ~4 ^. j( K; F
➡️ RCC设置外接HSE,时钟设置为72M
& r5 K( v# z  [7 x; Q0 W
➡️ PC0设置为GPIO推挽输出模式、上拉、高速、默认输出电平为高电平

4 u. v6 U( F2 V5 {, K6 m9 M% `
➡️ USART1选择为异步通讯方式,波特率设置为115200Bits/s,传输数据长度为8Bit,无奇偶校验,1位停止位
2 k! q; I, v( P5 f: y, ]# N
➡️ 激活SDIO,详细请参考SD卡例程
0 D+ ~8 [0 V4 i5 [
➡️ 打开FATFS文件系统,按下图配置,其余默认值

/ F- P1 Q1 j4 ?$ K* K
微信图片_20230628145602.png
: x& C( E  D* l4 g3 a
微信图片_20230628145558.png

( G* x3 P0 I; X3 E
➡️输入工程名,选择路径(不要有中文),选择MDK-ARM V5;勾选Generated periphera initialization as a pair of ‘.c/.h’ files per IP ;点击GENERATE CODE,生成工程代码
2.2 MDK-ARM软件编程
* D0 s/ p8 w  ~: q
➡️ 在main.c文件下编写FATFS读写SD卡测试代码
8 J, P6 u: d; y7 R- P
  1. int main(void){
    8 a9 x( _- T) E. {7 B0 f- b- b
  2.   HAL_Init();, Z0 y( o! b+ f: i  [8 k. ^) V9 S
  3.   SystemClock_Config();4 |2 c' M+ L4 u" B1 ]. ]* y8 ?4 H
  4.   /* Initialize all configured peripherals */
    , y) m3 Y: v9 ], g1 ?: s4 f* f) w
  5.   MX_GPIO_Init();# g6 L5 Z# r+ u% _$ A; ~! b' z- I
  6.   MX_CRC_Init();
    5 f9 w# v) l- o, S$ a
  7.   MX_FSMC_Init();
    3 I3 k( f' P( y% a1 c$ m' O
  8.   MX_SDIO_SD_Init();, g4 a5 w) u. A
  9.   MX_USART1_UART_Init();
    0 Q* e6 m- P1 O' @9 I
  10.   MX_FATFS_Init();6 `% G. d1 m$ O/ C, n
  11.   /* USER CODE BEGIN 2 */8 V4 `# s: S0 B; ?
  12.   uint32_t byteswritten;               
    9 T9 V+ q' s# {& o! u7 l
  13.   uint32_t bytesread;                  
    / L! I( f" b) k7 W, h
  14.   uint8_t wtext[] = "This is STM32 working with FatFs";
    ; k- t5 v) U5 r4 `; a
  15.   uint8_t rtext[100];                  
    5 `8 R+ K' y; L! Q
  16.   char filename[] = "STM32cube.txt";$ R  v9 h- M$ z8 X% T- A5 a- s( ^9 ~
  17.   char SensorBuff[100];
    ( o5 N& y+ `" Z8 J  D! n4 t, d5 S
  18.   printf("********* STM32CubeMX FatFs Example *********\r\n\r\n");       
    * m, c1 }8 R2 N4 O1 _
  19.   if(f_mount(&SDFatFS,SDPath,1) == FR_OK){
    $ Q0 Z) F3 ]- P3 @. G7 h# A& E
  20.     printf("f_mount sucess!!! \r\n");/ q5 z. s; }7 {( e9 d. l6 M6 }% F$ c
  21.     if(f_open(&SDFile,filename,FA_CREATE_ALWAYS|FA_WRITE) == FR_OK){
    ) w* _# X9 v6 r
  22.       printf("f_open file sucess!!! \r\n");+ r' l. W' _0 f* V3 y% r9 ~/ m
  23.         if(f_write(&SDFile,wtext,sizeof(wtext),&byteswritten) == FR_OK){
    + x8 t; V$ x) B3 i+ p
  24.           printf("f_write file sucess!!! \r\n");  f% m4 k" B: @* \  E( _0 w- {- S! @' L
  25.           printf("f_write Data : %s\r\n",wtext);
    * I" _2 y+ k0 ?7 N, \& c+ C: h
  26.           if(f_close(&SDFile) == FR_OK)
    1 }/ U! Y% m5 C, c" w6 O( d5 {  n! s) l
  27.             printf("f_close sucess!!! \r\n");
    ; F& A: w* j3 k* V+ c
  28.           else( o, m, d* a4 J$ O0 z. u
  29.             printf("f_close error : %d\r\n",retSD);3 x4 S, U6 R. J: o1 R5 W( m
  30.               }
    ( s' z) w, U" I3 k1 c" ]) ^
  31.         else
    ( f$ ]* {0 J- G6 `8 s+ w, n
  32.           printf("f_write file error\r\n");   
    6 E7 p& I3 r- I( R
  33.     }
    3 h& n0 W4 h/ j! }2 M0 T, x  E$ a, N
  34.     else
    2 r  M. P' B& L9 S+ D( `
  35.       printf("f_open file error\r\n");  1 Z) [8 {" J; p; F
  36.   }else
    4 G& l. G) h1 [- n  r
  37.     printf("f_mount error : %d \r\n",retSD);) d0 j+ @6 ?( j% _" J
  38.                   m' s. h# a% X& W% j% r
  39.   retSD = f_open(&SDFile, filename, FA_READ);/ A: y# s6 e, |# e8 `0 J- a
  40.   if(retSD)9 {  z" n) r9 B! N  T7 `, K
  41.     printf("f_open file error : %d\r\n",retSD);
    6 H7 Q  E% c( M* y2 @- h; }
  42.   else& b# J) y. W2 g8 R# H% V$ I
  43.     printf("f_open file sucess!!! \r\n");' V9 e1 \/ X# k, p) d0 v+ T

  44. + B8 h' Z# l" {+ a1 e; s
  45.   retSD = f_read(&SDFile, rtext, sizeof(rtext), (UINT*)&bytesread);: ]6 G3 `) [$ W  l6 B  \; Z
  46.   if(retSD)
    1 l, ^- g) ]$ m5 b& h" E6 R# T
  47.     printf("f_read error!!! %d\r\n",retSD);
    ( u4 k6 p) E. U( k# n
  48.   else{0 y- n- r# M$ e% Q5 E1 r! I
  49.     printf("f_read sucess!!! \r\n");
    9 M$ Q1 a/ a4 t
  50.     printf("f_read Data : %s\r\n",rtext);- e7 M7 h  Y1 C7 [/ u- h
  51.   }) m# ~7 f; Q, V- H4 o+ k6 o( |4 `
  52. 2 n& H7 j, S9 F. `$ m1 y. D+ m# H
  53.   retSD = f_close(&SDFile);% S# t& b% c/ V) ~& l
  54.   if(retSD); M, f7 ^& E% l) `  U1 M. ^/ v
  55.     printf("f_close error!!! %d\r\n",retSD);5 I2 Q# E' s- T8 Y6 J8 M& ^& k5 \1 o
  56.   else5 g  ]9 ]' G) V
  57.     printf("f_close sucess!!! \r\n");
    5 Q/ {$ P4 {5 {: |; g
  58. 6 G& @2 [% ?2 e/ W1 y! H& t
  59.   if(bytesread == byteswritten)
    0 f2 J7 s( G# u3 h; g
  60.     printf("FatFs is working well!!!\r\n");
    ; Y6 E: P$ W: x- p* V) J9 l5 t0 p5 @
  61.   if(f_open(&SDFile,(const char*)"Sensor.csv",FA_CREATE_ALWAYS|FA_WRITE) == FR_OK){
    4 O. W; u& X- S% i$ O9 b4 E
  62.     printf("Sensor.csv was opened/created!!!\r\n");
    # D% @; D$ c/ D& x! ^) N  g7 i( @6 u9 E6 `
  63.     sprintf(SensorBuff, "Item,Temp,Humi,Light\r\n");7 X; K6 `  @) u8 o
  64.     f_write(&SDFile,SensorBuff,strlen(SensorBuff),&byteswritten);! v" k. ^4 e' M, x, K9 w, _9 _$ f
  65.     for(int i = 0; i < 10; i++){& e, B' p+ E& M0 V6 \/ F
  66.       sprintf(SensorBuff, "%d,%d,%d,%d\r\n",i + 1, i + 20, i + 30, i + 40);
    4 j' l6 a- @' j- r
  67.       f_write(&SDFile,SensorBuff,strlen(SensorBuff),&byteswritten);
    4 m4 u% E: I& N
  68.       f_sync(&SDFile);* f& c) ^# E+ ]" N
  69.     }
    ; a" x- M" B: S" I. P+ s
  70.     f_close(&SDFile);( C/ G, J+ w7 K" q$ I; m
  71.   }
    7 n2 X4 D6 k1 E
  72.   while (1){' }0 o( x/ r+ H) G9 S+ p  ?- l
  73.     HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_0);
    1 ^+ q, B) V5 \5 `0 L1 I  [
  74.     HAL_Delay(500);/ e( X: w) ^( C
  75.   }
    : M# ?4 |# y7 a5 e- n
  76. }
复制代码
3.下载验证
如果使用的是新SD卡,需要在电脑上进行格式化,建立FAT文件系统,FATFS才能识别并操作SD卡
6 ?. x+ S" D7 @* v: |
微信图片_20230628145550.png

( o/ n/ y- ?! F6 d, j% g
编译无误下载到开发板后,可以看到D1指示灯不断闪烁,串口打印出如下信息:
( e) U3 ]( K- ^( J9 U$ v+ k
微信图片_20230628145547.png

, x) b, X2 a! C$ S. i) K
将SD卡插入PC后,可以看到SD卡里建立了2个文件:Sensor.csv和STM32cube.txt,打开文件后可以看到写入的数据

$ {% s" O, z$ q8 e; G
微信图片_20230628145544.png

6 j: T; G0 o8 i% v1 i0 b$ B6 b$ i
微信图片_20230628145541.png

3 a$ H9 w* i4 s6 k! {
微信图片_20230628145845.png
' o6 }, h* D1 ^, d8 t) g/ m  U
转载自: 嵌入式攻城狮
如有侵权请联系删除
/ S3 _7 c- D6 c/ T) p( z- V& `
收藏 评论0 发布时间:2023-6-28 14:56

举报

0个回答

所属标签

相似技术帖

官网相关资源

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