專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> STM32 >> 瀏覽文章

Rainbow讀寫(xiě)TF卡中的文件

作者:白櫟旸   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2014年04月30日   【字體:

    Rainbow板載一個(gè)TF卡的卡座,可以直接插入TF卡。Rainbow成功移植了Fatfs文件系統(tǒng),可以直接使用Fatfs的函數(shù)對(duì)文件進(jìn)行讀寫(xiě),同時(shí),為了簡(jiǎn)化對(duì)文件的操作,開(kāi)發(fā)包中封裝了對(duì)文件讀寫(xiě)類庫(kù),可以更加方便對(duì)文件進(jìn)行讀寫(xiě)。


    考慮到嵌入式系統(tǒng)的特點(diǎn),文件系統(tǒng)有一些小的限制:
    1、文件名長(zhǎng)度最大不超過(guò)8個(gè)字符,后綴名不超過(guò)3個(gè)字符
    2、不支持中文文件名
 
    Rainbow采用C++對(duì)fatfs進(jìn)行了封裝,對(duì)文件讀寫(xiě)變得更加簡(jiǎn)單,我們看看文件讀寫(xiě)的步驟:
    1、定義FileStream對(duì)象:FileStream file(fileName, FA_OPEN_ALWAYS | FA_WRITE);
       在定義的時(shí)候需要指定要打開(kāi)的文件全路徑以及文件打開(kāi)的方式,以寫(xiě)的方式打開(kāi)文件,如果文件不存在,會(huì)產(chǎn)生異常,需要加上FA_OPEN_ALWAYS,F(xiàn)A_WRITE表示以寫(xiě)的方式打開(kāi),F(xiàn)A_READ表示已讀的方式打開(kāi)文件
 
    2、可以通過(guò)if(file)來(lái)判斷文件是否打開(kāi)成功,如果打開(kāi)成功,if條件成立
 
    3、如果文件打開(kāi)成功,接下來(lái)就可以調(diào)用
       file.write((uint8_t *)Write_Buffer, BUFFER_SIZE)或者
       file.read((uint8_t *)Read_Buffer, BUFFER_SIZE)
       來(lái)對(duì)文件進(jìn)行讀寫(xiě)操作
 
    4、文件讀寫(xiě)完畢,調(diào)用file.close()關(guān)閉文件
 
    在軟件包的“Projects\File”文件夾包含了本文的完整工程,可以直接編譯、燒寫(xiě)和調(diào)試。這個(gè)程序主要展示如何對(duì)TF中文件進(jìn)行讀寫(xiě),看看main.cpp的代碼:
#include "WProgram.h"
#include "File.h"
 
#define countof(a) (sizeof(a) / sizeof(*(a)))
#define BUFFER_SIZE (countof(Write_Buffer)-1)
 
uint8_t Write_Buffer[] = "STM32F10xx Fatfs Demo";
uint8_t Read_Buffer[BUFFER_SIZE];
 
int main()
{
  boardInit();
  Serial.begin();
  Serial.println("Fatfs demo start...");
 
  //讀寫(xiě)TF卡的根目錄中的demo.txt
  String fileName = "/demo.txt";
  //以寫(xiě)的方式打開(kāi)一個(gè)文件,寫(xiě)入字符串
  //為了測(cè)試完整的讀寫(xiě)過(guò)程,我們沒(méi)有以讀寫(xiě)方式打開(kāi)文件,而是先以寫(xiě)的方式打開(kāi),然后關(guān)閉,然后再以讀的方式打開(kāi)讀取寫(xiě)入內(nèi)容
  FileStream file_w(fileName, FA_OPEN_ALWAYS | FA_WRITE);
  if(file_w)
  {
    if(file_w.write((uint8_t *)Write_Buffer, BUFFER_SIZE) == BUFFER_SIZE)
    {
      Serial.print("Write \"");
      Serial.print((char *)Write_Buffer);
      Serial.println("\" to demo.txt ... ");
    }
  }
 
  //寫(xiě)入完畢,關(guān)閉文件
  file_w.close();
  //以讀的方式打開(kāi)demo.txt
  FileStream file_r(fileName, FA_READ);
  if(file_r)
  {
    if(file_r.read((uint8_t *)Read_Buffer, BUFFER_SIZE) == BUFFER_SIZE)
    {
      Serial.print("Read \"");
      Serial.print((char *)Read_Buffer);
      Serial.println("\" from demo.txt ... ");
    }
  }
 
  //讀取完畢,關(guān)閉文件
  file_r.close();
  Serial.println("Fatfs demo end...");
}
 
    上面的程序編譯無(wú)誤后,將程序燒寫(xiě)到Rainbow中,然后在電腦上運(yùn)行串口調(diào)試工具并和Rainbow連接成功,可以在串口調(diào)試工具中看到文件讀寫(xiě)的日志。將TF卡從Rainbow中取出,放到電腦上可以看到在根目錄中創(chuàng)建了一個(gè)demo.txt,打開(kāi)demo.txt后可以看到里面保存的內(nèi)容正是我們寫(xiě)入的信息。
關(guān)閉窗口

相關(guān)文章