
首先通过PC机, 在SD卡中 建立文件 yu.txt, 写入一些数据。注意: 如果fatfs没有移植成功,SD卡不能被PC机识别,它提示 “是否需要格式化”,所以,建立yu.txt是建立在前面移植fatfs成功的基础上得。
我在yu.txt中写入 yuweixian123456789 , 保存。
在stm中使用f_read 函数实现对 SD卡数据读操作, 然后将读取的数据显示在彩屏LCD上。
相关的实验代码
- * 修改Date:2011.7.3 21:00
-
简单描述:
-
2011.7.3 21:00 移植 fatfs 成功 ff8b
-
2011.7.4 8:48 读取SD中 yu.txt中数据,LCD显示读到的数据
-
-
*/
-
#include "stm32f10x.h"
-
#include "rcc.h"
-
#include "systick.h"
-
#include "led.h"
-
#include "delay.h"
-
//#include "key.h"
-
#include "tim3.h"
-
#include "usart1.h"
-
#include "lcd.h"
-
#include "rtc.h"
-
#include "flash.h"
-
#include "sd_spi.h"
-
#include "..\FATS\ff.h"
-
#include "..\FATS\integer.h"
-
#include "..\FATS\ffconf.h"
-
#include "..\FATS\diskio.h"
-
-
volatile u8 sec = 0; // 全局变量 秒 时 小时
-
volatile u8 min = 0;
-
volatile u8 hour = 0;
-
-
FATFS fs;
-
FRESULT res;
-
FIL file;
-
-
u8 send_buffer[512] = {97,6};
-
u8 receiv_buffer[512] = {0,0};
-
u32 capacity = 0;
-
void write_file(void);
-
-
int main(void)
-
{
-
// u16 i = 0;//
-
-
RCC_Configuration(); //系统时钟配置
-
delay_init(); // 延时 初始化
-
-
// RTC_Configuration(); //RTC系统 配置
-
// RTC_NVIC_Configuration(); //RTC中断配置
-
// RTC_Init();// RTC 时钟初始化
-
-
SPI1_Configuration(); //SPI1 初始化
-
// SD_Init(); //SD卡 初始化
-
-
LCD_Init(); //LCD 彩屏初始化
-
-
write_cmd(0x2C); //LCD 写数据命令
-
DrawFull_single_colour(0xff, 0xff); //显示 纯白色
-
-
capacity = SD_GetCapacity(); //获取 容量
-
LCD_show_number(48,128,capacity); //打印低16位
-
LCD_show_number(0,128,capacity>>16); //打印高16位
-
-
// LCD_PutString(0,0, "start to write file..");
-
write_file();
-
#if 0
-
for(i = 0; i < 256; i++) //发送数据填充
-
send_buffer[i] = i;
-
-
for(i = 0; i < 256; i++) //发送数据填充
-
send_buffer[i + 256] = i;
-
-
SD_WriteSingleBlock(0, send_buffer); //写数据到 块 中
-
SD_ReadSingleBlock(0, receiv_buffer); //从 块 中 读数据
-
-
for(i = 0; i < 512; i++) // 显示从块中读取到的数据, 一个字节最大255
-
{
-
LCD_show_number(8,32,receiv_buffer[i]);
-
delay_s(1);
-
}
-
#endif
-
-
while(1) //无限循环, 中断中 显示 秒时钟
-
{
-
#if 0
-
LCD_show_number_2(40,16,hour);
-
LCD_show_number_2(64,16,min);
-
LCD_show_number_2(88,16,sec);
-
#endif
-
}
-
// return 0;
-
}
-
-
-
void write_file(void)
-
{
-
UINT br;
-
u16 i;
-
s8 data[512];
-
u8 rec[5];
-
for(i=0;i<10;i++)
-
{
-
data[i] = 'o';
-
}
-
for(i=10;i<20;i++)
-
{
-
data[i] = 'p';
-
}
-
for(i=20;i<30;i++)
-
{
-
data[i] = 'q';
-
}
-
data[30]='\n';
-
-
res = f_mount(0, &fs);
-
// if(res != 0)
-
// LCD_PutString(0,16, "mount failed.");
-
// else
-
// LCD_PutString(0,16, "mount successed.");
-
//打开文件,不存在则创建,可读 可写
-
res = f_open(&file, "yu.txt", FA_OPEN_ALWAYS | FA_WRITE | FA_READ);
-
// if(res != 0)
-
// LCD_PutString(0,32, "open failed.");
-
// else
-
// LCD_PutString(0,32, "open successed.");
-
-
// res = f_write(&file, data, 512, &br);
-
res = f_read(&file,rec,5,&br);//从file中读取5个字节数据到 rec内存中
-
if(res != 0) //判断读成功没
-
LCD_PutString(0,48, "read failed.");
-
else
-
LCD_PutString(0,48, "read successed.");
-
-
LCD_show_number(0,64,br); //打印 读到的数据个数
-
LCD_PutString(0,80,rec); //打印 读到的数据
-
-
f_close(&file);
-
// LCD_PutString(0,64, "close successed.");
- }