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

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

[复制链接]
攻城狮Melo 发布时间:2023-6-28 14:56
1.硬件设计
D1指示灯用来提示系统运行状态,串口1用来打印调试信息,使用FATFS文件系统对SD卡进行相关操作
D1指示灯
USART1串口
TF卡
2 S1 d, Q5 l  \" i* Z6 I$ a
微信图片_20230628145607.png

3 @; B# s- U7 n) n, \
6 k, e- W* M% [0 w: i
2.软件设计

- c- P7 a. t8 W4 V& W- J3 g
2.1 STM32CubeMX设置
3 L9 C$ }' s2 {
➡️ RCC设置外接HSE,时钟设置为72M

& ]# R) E: P  u" K* j4 y3 ^+ U
➡️ PC0设置为GPIO推挽输出模式、上拉、高速、默认输出电平为高电平

) L( p. ^; v# }. j" A
➡️ USART1选择为异步通讯方式,波特率设置为115200Bits/s,传输数据长度为8Bit,无奇偶校验,1位停止位
6 v. w% S8 l) n' F1 \
➡️ 激活SDIO,详细请参考SD卡例程

$ K1 V8 x- _/ g! J* B- Z6 p( `
➡️ 打开FATFS文件系统,按下图配置,其余默认值

" Z1 q5 J- r) e# a
微信图片_20230628145602.png
7 b+ {9 s( @% B: U( F$ G
微信图片_20230628145558.png

/ u8 _+ G0 [) T8 h0 X4 @
➡️输入工程名,选择路径(不要有中文),选择MDK-ARM V5;勾选Generated periphera initialization as a pair of ‘.c/.h’ files per IP ;点击GENERATE CODE,生成工程代码
2.2 MDK-ARM软件编程

) x7 {  K9 q: ?& V! o2 A* |1 \
➡️ 在main.c文件下编写FATFS读写SD卡测试代码

2 Z8 Y6 Q5 D0 U; A. |
  1. int main(void){
    # F8 Z# S2 n* i
  2.   HAL_Init();
    ; d- e1 w  G: }2 G, C  d8 v
  3.   SystemClock_Config();
    4 C2 t/ x8 n. R: T' e1 A& c" i" g# f
  4.   /* Initialize all configured peripherals */
    - Z# q9 D0 g9 E6 ^
  5.   MX_GPIO_Init();0 @( @; j; v/ b, ]& `, F1 h! g
  6.   MX_CRC_Init();
    , a) m& \2 f: q1 p9 ~
  7.   MX_FSMC_Init();+ a8 K5 U% v# r9 D# M9 s' w7 c
  8.   MX_SDIO_SD_Init();  P' T( _$ ?! }" Y7 J
  9.   MX_USART1_UART_Init();3 |' M5 U" g" Z6 L
  10.   MX_FATFS_Init();
    , d/ N, j9 \1 A
  11.   /* USER CODE BEGIN 2 */! e% L; U" U9 _6 i
  12.   uint32_t byteswritten;               
    ; G: F# W( t7 B- l( }; A3 P0 \
  13.   uint32_t bytesread;                   - o% @6 @) S* F5 B" e/ G
  14.   uint8_t wtext[] = "This is STM32 working with FatFs";
    0 b3 t7 T0 B& n  X
  15.   uint8_t rtext[100];                  
    7 {' T# R9 m0 f
  16.   char filename[] = "STM32cube.txt";+ Z' n5 ^! Y+ c4 v& {/ _
  17.   char SensorBuff[100];% m* I; e& U8 N+ Q* S
  18.   printf("********* STM32CubeMX FatFs Example *********\r\n\r\n");       
    ; z4 H' t( R6 T$ p! G! g
  19.   if(f_mount(&SDFatFS,SDPath,1) == FR_OK){' x0 _; k, O1 |: j, C
  20.     printf("f_mount sucess!!! \r\n");
    % O3 F. \) B4 E2 C
  21.     if(f_open(&SDFile,filename,FA_CREATE_ALWAYS|FA_WRITE) == FR_OK){4 g  H* }8 P6 N5 A$ @6 c
  22.       printf("f_open file sucess!!! \r\n");
    / h  m2 Q" j9 A( Y9 [
  23.         if(f_write(&SDFile,wtext,sizeof(wtext),&byteswritten) == FR_OK){
      J- x( q% Z6 H/ J( n) O
  24.           printf("f_write file sucess!!! \r\n");$ @3 K3 J' a2 [) {
  25.           printf("f_write Data : %s\r\n",wtext);0 {3 L6 x; {" r% F8 O/ b5 _, l
  26.           if(f_close(&SDFile) == FR_OK)0 v% K" ~( R* \3 ]2 J; s
  27.             printf("f_close sucess!!! \r\n");
    # D& \8 M9 V: b4 R) v1 Q
  28.           else# V0 V4 Y1 `: i1 U0 ~1 m7 y3 ~
  29.             printf("f_close error : %d\r\n",retSD);
    - D4 n3 I( W5 {0 G
  30.               }
    # V# c* C9 D9 q
  31.         else
    3 t1 a' v- v7 r8 P) K7 r3 Q: z, j
  32.           printf("f_write file error\r\n");   
    * m, Q+ s. d3 C# Z9 W, U. a
  33.     }& h' q* q8 b; }4 b$ U
  34.     else
    / Z$ P4 ]0 O' v- n5 [/ g
  35.       printf("f_open file error\r\n");  + z1 `! v& f0 d( w
  36.   }else: D1 |7 L4 }. T% F+ B3 k
  37.     printf("f_mount error : %d \r\n",retSD);: q6 o  G7 ^! L$ D- T
  38.                 : |) }* b+ A& [! \1 g+ W
  39.   retSD = f_open(&SDFile, filename, FA_READ);
    ; f* `* l0 K( K! c+ {" D! z
  40.   if(retSD)  l" w& j9 H+ K* i; ]
  41.     printf("f_open file error : %d\r\n",retSD);1 O8 s, p& ?/ o; z
  42.   else& p' F6 [. r  A: N4 z. y& G, B
  43.     printf("f_open file sucess!!! \r\n");/ M/ [( _3 F# Q
  44. & t  N& u) j1 M4 t& }' I
  45.   retSD = f_read(&SDFile, rtext, sizeof(rtext), (UINT*)&bytesread);
    0 C/ k5 x2 H) G4 J# I% Y
  46.   if(retSD)
    ( I, j4 J+ j" h3 b9 e' w
  47.     printf("f_read error!!! %d\r\n",retSD);2 F/ B  x& |, ?2 Z$ ?) q
  48.   else{2 W, s) x$ U! l4 X0 T5 d; H: A$ e
  49.     printf("f_read sucess!!! \r\n");! b0 F( m; V1 r5 f- K
  50.     printf("f_read Data : %s\r\n",rtext);* J. q6 L  |1 U
  51.   }0 h$ C$ A/ J0 X6 d

  52. , Z  H8 q& ^0 X
  53.   retSD = f_close(&SDFile);
    " n( P) M, n. m
  54.   if(retSD)# r$ m* U: H/ l+ ]: J; t' f: e
  55.     printf("f_close error!!! %d\r\n",retSD);5 N$ [" |! b9 |: t& s& A# F
  56.   else7 ]2 ^6 w1 J: F( w3 f9 F
  57.     printf("f_close sucess!!! \r\n");
    & A9 V! @- \$ r5 M8 d$ m3 R

  58. 7 \& E( Y3 |6 V. [; }* g/ \" K
  59.   if(bytesread == byteswritten)
    % S% U) V/ H, X0 e- E
  60.     printf("FatFs is working well!!!\r\n");
    1 V3 r" w/ f. |% i& ?) A
  61.   if(f_open(&SDFile,(const char*)"Sensor.csv",FA_CREATE_ALWAYS|FA_WRITE) == FR_OK){
    ! g7 k8 x" f0 y0 Q# {* C
  62.     printf("Sensor.csv was opened/created!!!\r\n");7 [0 N5 f: Q5 E! f" y
  63.     sprintf(SensorBuff, "Item,Temp,Humi,Light\r\n");; h6 z* V1 p+ [! O# K
  64.     f_write(&SDFile,SensorBuff,strlen(SensorBuff),&byteswritten);9 N! f5 _  H" o; u' g- W* y
  65.     for(int i = 0; i < 10; i++){. }& f- i( b  w; |+ r. h1 K6 t
  66.       sprintf(SensorBuff, "%d,%d,%d,%d\r\n",i + 1, i + 20, i + 30, i + 40);* h1 U, h: I% t# T
  67.       f_write(&SDFile,SensorBuff,strlen(SensorBuff),&byteswritten);
    # c/ P  _  Z: T1 q( n; m
  68.       f_sync(&SDFile);  C8 J7 Q3 m. a- t' V  x
  69.     }5 p7 C! a; f' `" R9 P  p- T! @
  70.     f_close(&SDFile);
    . N; A0 s% L! R8 ^3 t9 t
  71.   }( a: h7 Q) T) r
  72.   while (1){! }: X2 o# F( l3 F4 k9 ~
  73.     HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_0);
    " O/ X  F# Q+ I" A$ S
  74.     HAL_Delay(500);
    8 i7 E% P' R, i% s# m/ m
  75.   }' A0 r* B' \& I1 m* b4 ?
  76. }
复制代码
3.下载验证
如果使用的是新SD卡,需要在电脑上进行格式化,建立FAT文件系统,FATFS才能识别并操作SD卡
( G. l1 \! x# e( m2 Q. T
微信图片_20230628145550.png
0 Z. z! G9 d  w! u9 Z
编译无误下载到开发板后,可以看到D1指示灯不断闪烁,串口打印出如下信息:
  Q# A1 M9 p$ M- g2 E8 D
微信图片_20230628145547.png
5 k/ |: I' Q0 o3 L, d9 H
将SD卡插入PC后,可以看到SD卡里建立了2个文件:Sensor.csv和STM32cube.txt,打开文件后可以看到写入的数据
+ G% N7 u& f$ P
微信图片_20230628145544.png
0 d  q* d: U# @7 G4 S
微信图片_20230628145541.png

9 {' S& D4 r# R$ c
微信图片_20230628145845.png

# e9 R- E; y8 Y# l; f3 j6 |) Q& G
转载自: 嵌入式攻城狮
如有侵权请联系删除
7 d8 u1 G7 ^: @( c' Y7 Q
收藏 评论0 发布时间:2023-6-28 14:56

举报

0个回答

所属标签

相似技术帖

官网相关资源

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