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

stm32f769 寄存器配置SD卡---移植fatfs--实现文件read操作

[复制链接]
stary666 发布时间:2018-3-13 11:38
实现了SD卡的加载,于是继续实现文件的打开
& W( ]1 R3 t, @% J* e4 H: YSD卡里面有个data.txt文件,其内容是
$ h3 I% x+ o4 t& m$ l$ q, a5 v9 s9 X123     
# Z- N) e# v6 e' J: \% w1 kabc, B7 G/ t  G1 M  `
下面要实现对文件的打开操作0 u7 j) X) Y( r* a( `& g8 ]9 u
在main函数中添加如下代码* Y0 f/ I0 f0 y# ~: x/ b( _0 `2 _
    sta = f_open(&fil,"data.txt",FA_OPEN_ALWAYS | FA_READ);   
5 R* {! {! O7 S+ G. m    if(sta)
- C$ Y( S2 K  y  K        printf("SD Card open fail\r\n");
3 Q- p% s+ J7 A2 j7 d- f! [: l    else
7 \4 }9 k  o) B; e. y       printf("SD Card open\r\n");
( K# E2 @( X- |  v很顺利,没有打印fail
2 L' l: M0 A8 u( b( S; h . z8 T* I$ B; [  @7 h3 H+ w8 X
下面开始实现read文件,添加如下代码
( o7 b) x; J  t0 G4 s5 g( [; Q1 y; R$ U3 f% j4 H) p. t  `8 w4 l
sta = f_read(&fil, buffer, 1, &br);
6 E& G/ W# [) U  L  M1 O5 Q        if (sta == FR_OK )  
6 Q% R: d8 y. _, P; P/ G        {    V4 I3 G4 g, F, G
           printf("\r\n f_read() ok .. \r\n");$ x7 q* M1 j* y! v- x
! |  W/ n7 z) r6 J) F6 f* C
            for(len =0;len<br;len++)
1 k3 S- T, V3 H/ J( {# J. R                printf("%c",buffer[len]);) W5 ]* m) n: s/ C+ a5 h! t: w9 ]

/ a6 }" a) K" }9 L! L3 W, S/ B        }else{  
, n, U0 L+ I! q  ^# G% Z8 x            printf("\r\n f_read() fail .. \r\n");     
: Y: h& Z2 o, {& h. K; N        } 6 m; f7 G2 @4 D  i/ g% o# N9 @% I
输出结果是
( k/ ?) `9 E* `7 W' y7 @f_read() ok ..( S6 e$ [& }2 \! d4 v
1* h8 c, L" x  G5 f4 f
没有完全读完文件内容; Y6 u8 B: z+ f% |* b
仔细看了f_read,每次只能返回1个字符,于是在外面加个for循环,问题解决
. J, G7 F1 b. V4 ~1 i/ ?  for(t=0;t<512;t++)8 c- F( H, f0 r! ]' p7 f$ h
    {' \& P! g5 `& r6 t
        sta = f_read(&fil, buffer, 1, &br);
, V8 F6 n7 {/ E+ C* k/ X        if (sta == FR_OK )  
" r4 F; M5 j7 [! h3 p        {  ; y" T/ q1 l/ w6 Q
//            printf("\r\n f_read() ok .. \r\n");5 i; y) }+ M1 N; ?) p, z

3 y  \$ x4 W/ X. v- F( R( p7 `# s            for(len =0;len<br;len++)$ a+ t6 g, V$ h& R8 O. j, m5 i+ x
                printf("%c",buffer[len]);% I2 L0 z( ]7 J4 ?( a, A# @
3 B, G+ s* z+ g* F
        }else{  5 a4 x% ~" N8 p! f3 X
            printf("\r\n f_read() fail .. \r\n");     
7 r1 i1 R0 u9 t- m9 n" w1 _8 c        }
% V, v( A) E$ e/ K- U; b    }
" X; w* O4 k) `' C* Q打印结果见下图# B- B3 P: {$ V! @  l

5 F7 l" F' h) ^/ ^- {2 r3 A  z
. B5 R4 O6 `7 X  V4 f* J  n$ e8 }0 D9 h5 M* L/ M
+ N0 X  |5 L5 v9 ~2 G! Y: h& t& X' V

/ G% B, ~2 b4 \0 C- d3 I# q2 ^
- T7 z4 n/ |, s
. Z" M* y/ _! y2 p

) H  N% r% Y6 O; z% O                                        发帖与2018年3月13日: ?: H8 B, F9 F
赞 收藏 评论0 发布时间:2018-3-13 11:38

举报

0个回答

所属标签

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