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

【经验分享】STM32CubeMX 5.2配置使用STM32F7 的 SD与FatFs

[复制链接]
STMCU小助手 发布时间:2021-12-14 10:38
一  配置STM32CubeMX
# v4 x, W" s# e5 f  y6 a' p( q1.配置Parameter Settings。(Tips:由于各种卡的品质有区别,有时候可以适当增加clock divide的值)8 r) _7 v- v3 {1 T. I$ [) n

& v: `% i+ h2 A$ r  |) h" @
201907250945024.png

2 K, Q: i' a( H) C
6 j! }$ U' j2 z/ R2 .配置DMA Settings。(Tips:使用FatFs必须开启DMA,在FATFS的Advanced Settings页面,Use dma template只有Enabled)
- \3 U" Q( D/ l5 ?, d! l2 b# O! l0 i  z, K. Q
20190725094828888.png
- ?. I& j! r6 V/ @

/ B" \  Z( R8 h1 j
20190725095305743.png
. y) P& R" c$ c9 z6 u0 n& U" M& t
! c3 R) b2 O4 H9 `7 O
3. NVIC Settings 与 GPIO Settings
0 G4 ]2 P7 N' t: E& H1 X- f. E, h0 q. b/ ]3 K2 q  X0 \
2019072509505771.png

% _8 g0 T4 [/ [/ b3 r! ?
# H2 }, K2 i0 A8 p! Z
20190725095038643.png

6 F0 {' x* J% \+ u% `$ R2 B2 D; g
4 b* m- a5 }" a9 |4. 勾选FATFS,一帮情况只需要配置Set Defines下的CODE_PAGE/ Z% ]# v) B7 n) Q9 V5 g3 P8 _
# g" {' A" D/ L* D: e
20190725095528492.png

+ U; @% H0 r9 y% L+ P" k0 y; L" D. Z; S: Y/ q) s" {
二 编写测试代码

3 K* v8 W6 U% w' v7 z- k在自动生成的MX_FATFS_Init函数中添加测试代码。能够正常输出SD容量,则表示SD卡初始化成功。! M! C& \% k& l

$ y' |' U" M& s9 @
  1. void MX_FATFS_Init(void)( Y: Y+ K% h4 R$ i
  2. {
    $ A9 I% t! m( d4 X+ |2 i% E
  3.     /*## FatFS: Link the SD driver ###########################*/2 F2 n: r& x* z. l( m) Z+ B
  4.     retSD = FATFS_LinkDriver(&SD_Driver, SDPath);3 s, p: t# _. v$ G9 q

  5. 0 N4 K; @9 [" C0 _' d
  6.     /* USER CODE BEGIN Init */% e& k9 [" c$ b- @2 l. Z, I5 \  h4 }
  7. , V" ?% ~9 N, B
  8.     /* additional user code for init */
    2 q9 K- W5 ]5 y1 x( ~- o) u, {
  9.     retSD = f_mount(&SDFatFS, SDPath, 1);                                         //挂载SD卡
    $ R3 l) k0 ~+ L8 L
  10.     if(retSD)
    # e8 k0 B3 e9 L9 H; x& v
  11.     {" U) \% l! P& q/ T* W6 S! W* P- U
  12.         Error_Handler();
    $ j# Q: E$ n, q+ b* x
  13.     }
    . |. \+ s! W; v9 B
  14.     sd_total_size = (hsd1.SdCard.BlockNbr >> 20) *  hsd1.SdCard.BlockSize;6 @9 y4 z$ n5 J2 j
  15.     sd_total_size = (SDFatFS.csize * (SDFatFS.n_fatent - 2) / 2) >> 10;0 q6 [% a8 `6 ?. C' R
  16.     sd_free_size  = (SDFatFS.csize * SDFatFS.free_clst / 2) >> 10;
    5 i0 X% @+ L" E3 q, X
  17.     printf("SD Capacity: = %d M", (hsd1.SdCard.BlockNbr >> 20) *  hsd1.SdCard.BlockSize);
    4 n0 v$ O7 J/ B) B# |$ }  a9 r/ i
  18.     printf("SD Total Size = %d M", sd_total_size);
    7 V' ?: l+ [) J5 [# F9 Z) q+ [2 J
  19.     printf("SD Free  Size = %d M", sd_free_size);2 g* `) L/ x( S- ?' n  H
  20. 6 O: e* j# u/ W" G1 o. {8 v" e/ z
  21.     /* USER CODE END Init */
    ; P# j8 V1 G) |& }6 M
  22. }
复制代码
6 C7 b# b6 ~4 _. @% C
三  将cc936.c文件中的uni2oem与oem2uni数组转换成bin文件
! s1 N4 g; Z' }4 K. ^
     由于cc936中的有700k左右,该文件主要是数组uni2oem与oem2uni占用空间大,我们可以将该数组转换成bin格式,烧录进SPI Flash,调用数组中的值改为调用对应SPI Flash中的值,这样可以节省大量的空间。: d* l2 v4 D) m: C% u3 _3 `9 k
" [" U) M  F" _$ i  ]5 F
操作方式如下:6 t) Q- Z0 S  V4 G' A1 p
+ n! F, @7 @& `9 G
下载C2B转换助手V1.1软件
# N; l* F( K: D0 ]( j% O2 `+ S2 N" u
20190807170029936.png
6 g7 ^& _8 ?0 d6 k
' |6 a! P# T. A7 I
新建 UNIGBK.TXT文档,将两个数组 oem2uni 和 uni2oem 存放在该文档中
+ q) E) X$ l) }& ~% A使用C2B转换助手V1.1软件打开UNIGBK.TXT文档,点击转换生成UNIGBK.BIN文件
1 P# Y  Q" K3 t: g: s将UNIGBK.BIN烧录进SPI FLASH(此过程省略,可参考博客:)
1 n7 ?; u) j( E修改cc936文件中的ff_convert函数如下(代码中的 ftinfo.ugbksize 为我们刚刚生成的 UNIGBK.bin 的大小,而 ftinfo.ugbkaddr 是我们存放 UNIGBK.bin 文件的首地址。):; R' W  R; t7 x* |# H
  1. WCHAR ff_convert (        /* Converted code, 0 means conversion error */+ G' J% A2 W" b; [$ n
  2.         WCHAR        src,        /* Character code to be converted */4 I3 V+ \1 ~% H4 r$ P
  3.         UINT        dir                /* 0: Unicode to OEMCP, 1: OEMCP to Unicode */, B* {' i+ Z' L; i& d4 r, J
  4. )
    4 e8 r; L* q$ A4 D! W
  5. {% W) |! O: H& O+ n
  6.         WCHAR t[2];4 w& j0 U) K6 E& d* A
  7.         WCHAR c;( L+ G1 O  `$ R* g; J
  8.         uint32_t i, li, hi;
    ! |: u* L3 l% B4 r; I
  9.         uint16_t n;                         9 V6 D% s# ?5 k- x+ l
  10.         uint32_t gbk2uni_offset=0;                  - ]8 _4 D" t4 `/ _( y) N
  11.                                                   5 J8 {" I9 o/ k/ j+ K$ z( ?: k6 M
  12.         if (src < 0x80)c = src;//ASCII,直接不用转换.
    ( ^/ z# F  j' @4 y5 P: C* v! |" r! ?
  13.         else 5 Q' V4 j5 b4 T" P7 K( Y
  14.         {
    . P4 M+ v) o8 e& W0 w
  15.                  if(dir)        //GBK 2 UNICODE. M) _- N8 r6 x+ j- j2 c
  16.                 {
    & X3 k/ W& H( c3 D/ a
  17.                         gbk2uni_offset= ftinfo.ugbksize/2;         
    : U) j3 w' F& R+ `5 i$ O
  18.                 }else        //UNICODE 2 GBK    V2 g; F0 v" ]3 H8 f5 Y: G1 q
  19.                 {   + ]/ ?; m# N& }! o  p4 t7 p
  20.                         gbk2uni_offset=0;        * V3 I5 w8 m9 ]$ X5 g8 K. Z2 j
  21.                 }   
    ! {8 C* v2 s: w- D# u; R
  22.                 /* Unicode to OEMCP */
    9 X4 U1 U7 `1 O! \. V: f; r2 X" R
  23.                 hi = ftinfo.ugbksize/2;//对半开.
    7 w/ B1 g5 u3 K2 e( J# x
  24.                 hi = hi / 4 - 1;
    7 T* f5 ?" n9 r1 q, w1 m$ V
  25.                 li = 0;
    , V) m; {* _& y0 Z9 d) j2 H
  26.                 for (n = 16; n; n--)
    7 A# q2 j8 \/ i: J, \" K; K
  27.                 {( Y/ p4 R# V& R. @4 N
  28.                         i = li + (hi - li) / 2;        6 u" C- X, F  _) ^) N. O
  29.                         W25QXX_Read((uint8_t*)&t,ftinfo.ugbkaddr+i*4+gbk2uni_offset,4);//读出4个字节    P2 }$ G2 B3 g3 h7 N
  30.                         if (src == t[0]) break;
    2 C- i- O: g" s6 Q
  31.                         if (src > t[0])li = i;  
    ! E+ k0 Z% |% }+ y' {
  32.                         else hi = i;   
    ( j' [0 G3 u4 l4 Q' b! Q8 }
  33.                 }6 {8 G- Q5 |. U5 ]
  34.                 c = n ? t[1] : 0;              
    ( O; t6 e! g; l# T
  35.         }
    6 R; l  y$ ?! J% d/ o
  36.         return c;+ \0 C( h4 O/ w! E  I% _
  37. }
    ! P; ?6 a( _& ~* h& _$ b" u7 E

  38. ( i. ]3 @. Y* W
复制代码
- y6 Z8 |- P8 d( i4 p. h
$ J* ]3 r) y) g  a2 Y5 l; s
收藏 评论0 发布时间:2021-12-14 10:38

举报

0个回答

所属标签

相似技术帖

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