Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4471055
  • 博文数量: 1148
  • 博客积分: 25453
  • 博客等级: 上将
  • 技术积分: 11949
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-06 21:14
文章分类

全部博文(1148)

文章存档

2012年(15)

2011年(1078)

2010年(58)

分类: 嵌入式

2011-07-04 08:43:57

工程代码: 4_fatfs读SD中数据.rar  

    首先通过PC机, 在SD卡中 建立文件 yu.txt, 写入一些数据。注意: 如果fatfs没有移植成功,SD卡不能被PC机识别,它提示 “是否需要格式化”,所以,建立yu.txt是建立在前面移植fatfs成功的基础上得。
    我在yu.txt中写入 yuweixian123456789 , 保存。
    在stm中使用f_read 函数实现对 SD卡数据读操作, 然后将读取的数据显示在彩屏LCD上。

    相关的实验代码
  1. * 修改Date:2011.7.3 21:00
  2.     简单描述:
  3.      2011.7.3 21:00 移植 fatfs 成功 ff8b
  4.             2011.7.4 8:48 读取SD中 yu.txt中数据,LCD显示读到的数据
  5.     
  6. */
  7. #include "stm32f10x.h"
  8. #include "rcc.h"
  9. #include "systick.h"
  10. #include "led.h"
  11. #include "delay.h"
  12. //#include "key.h"
  13. #include "tim3.h"
  14. #include "usart1.h"
  15. #include "lcd.h"
  16. #include "rtc.h"
  17. #include "flash.h"
  18. #include "sd_spi.h"
  19. #include "..\FATS\ff.h"
  20. #include "..\FATS\integer.h"
  21. #include "..\FATS\ffconf.h"
  22. #include "..\FATS\diskio.h"

  23. volatile u8 sec = 0; // 全局变量 秒 时 小时
  24. volatile u8 min = 0;
  25. volatile u8 hour = 0;

  26. FATFS fs;
  27. FRESULT res;
  28. FIL file;

  29. u8 send_buffer[512] = {97,6};
  30. u8 receiv_buffer[512] = {0,0};
  31. u32 capacity = 0;
  32. void write_file(void);

  33. int main(void)
  34. {    
  35. //    u16 i = 0;//

  36.     RCC_Configuration(); //系统时钟配置
  37.     delay_init();     // 延时 初始化

  38. //    RTC_Configuration(); //RTC系统 配置
  39. //    RTC_NVIC_Configuration(); //RTC中断配置
  40. //    RTC_Init();// RTC 时钟初始化

  41.     SPI1_Configuration(); //SPI1 初始化
  42. //    SD_Init();             //SD卡 初始化

  43.     LCD_Init();         //LCD 彩屏初始化

  44.     write_cmd(0x2C); //LCD 写数据命令
  45.     DrawFull_single_colour(0xff, 0xff);    //显示 纯白色

  46.     capacity = SD_GetCapacity();    //获取 容量
  47.     LCD_show_number(48,128,capacity); //打印低16位
  48.     LCD_show_number(0,128,capacity>>16); //打印高16位

  49. //    LCD_PutString(0,0, "start to write file..");
  50.     write_file();
  51. #if 0
  52.     for(i = 0; i < 256; i++) //发送数据填充
  53.         send_buffer[i] = i;    
  54.     
  55.     for(i = 0; i < 256; i++) //发送数据填充
  56.         send_buffer[i + 256] = i;    

  57.     SD_WriteSingleBlock(0, send_buffer); //写数据到 块 中
  58.     SD_ReadSingleBlock(0, receiv_buffer); //从 块 中 读数据

  59.     for(i = 0; i < 512; i++) // 显示从块中读取到的数据, 一个字节最大255
  60.     {
  61.         LCD_show_number(8,32,receiv_buffer[i]);
  62.         delay_s(1);
  63.     }
  64. #endif

  65.     while(1) //无限循环, 中断中 显示 秒时钟
  66.     {
  67.         #if 0
  68.         LCD_show_number_2(40,16,hour);
  69.         LCD_show_number_2(64,16,min);
  70.         LCD_show_number_2(88,16,sec);    
  71.         #endif
  72.     }
  73. //    return 0;
  74. }


  75. void write_file(void)
  76. {
  77.        UINT br;
  78.     u16 i;
  79.     s8 data[512];
  80.     u8 rec[5];
  81.     for(i=0;i<10;i++)
  82.     {
  83.         data[i] = 'o';
  84.     }
  85.     for(i=10;i<20;i++)
  86.     {
  87.         data[i] = 'p';
  88.     }
  89.     for(i=20;i<30;i++)
  90.     {
  91.         data[i] = 'q';
  92.     }
  93.     data[30]='\n';

  94.     res = f_mount(0, &fs);
  95. //    if(res != 0)
  96. //        LCD_PutString(0,16, "mount failed.");
  97. //    else
  98. //        LCD_PutString(0,16, "mount successed.");
  99.                                  //打开文件,不存在则创建,可读 可写
  100.     res = f_open(&file, "yu.txt", FA_OPEN_ALWAYS | FA_WRITE | FA_READ);
  101.  // if(res != 0)
  102. //        LCD_PutString(0,32, "open failed.");
  103. //    else
  104. //        LCD_PutString(0,32, "open successed.");
  105.         
  106.   // res = f_write(&file, data, 512, &br);
  107.     res = f_read(&file,rec,5,&br);//从file中读取5个字节数据到 rec内存中
  108.     if(res != 0) //判断读成功没
  109.         LCD_PutString(0,48, "read failed.");
  110.     else
  111.         LCD_PutString(0,48, "read successed.");

  112.     LCD_show_number(0,64,br); //打印 读到的数据个数
  113.     LCD_PutString(0,80,rec); //打印 读到的数据
  114.                  
  115.     f_close(&file);
  116. //        LCD_PutString(0,64, "close successed.");
  117. }



阅读(3476) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~