STM32使用FatFs

来源:https://www.cnblogs.com/wang--jie/archive/2018/08/08/9442148.html
-Advertisement-
Play Games

1、定義一些變數在我們代碼開始的部分,先定義一些變數供我們使用。這裡選擇幾個來解析一下。第一個FIL file;這個變數是文件的結構體變數,記錄了我們打開的文件的信息。使用f_open等函數的時候都要用到。第二個Words變數是一個字元串指針,我用這個指針來存儲讀取的字元信息。這裡我們就使用了mal ...


1、定義一些變數
在我們代碼開始的部分,先定義一些變數供我們使用。這裡選擇幾個來解析一下。
第一個FIL file;這個變數是文件的結構體變數,記錄了我們打開的文件的信息。使用f_open等函數的時候都要用到。
第二個Words變數是一個字元串指針,我用這個指針來存儲讀取的字元信息。這裡我們就使用了malloc函數來分配記憶體,我們通過修改啟動代碼提供了更多的堆記憶體所以這裡就可以分配一些給我們使用。
第三個是Path這個字元串,這裡保存的是文件所在的路徑。關於文件路徑的寫法,請參考FatFs的官方文檔 網站
  FIL file;  uint8_t Status = 0;  char* Words = malloc(256);  char* String = "\nWrite some words to this file by STM32F407 MCU.\n";  UINT Number = 0;  char Path[16] = "/File/test.txt";
2、使用f_open
關於f_open函數的具體用法和詳細說明,參見FatFs官方文檔 網站。這裡可以看看我在下方貼出的代碼作為參考來使用。
3、使用f_read
關於f_read沒有特別的說明,詳細的用法去看看FatFs官方文檔 網站。這裡只想說一下第三個和第四個參數。這裡的第三個參數是給定的要讀取的位元組數,而第四個參數是最後讀取了的位元組數的存儲指針。這裡要說明的是,不一定你要讀取128個位元組就一定會讀取這麼多,如果遇到了文件尾符號就會停止讀取。停止讀取的時候就會把讀取的位元組數寫入到第四個參數指定的存儲空間里。所以我們可以通過返回的讀取位元組數來發送到串口,不需要自己數讀取了多少個位元組。
if(!f_open(&file, Path, FA_READ | FA_OPEN_EXISTING | FA_WRITE))  {  f_read(&file, Words, 256, &Number);  HAL_UART_Transmit(&huart1, (uint8_t *)Words, Number, 500);  }
4、使用f_lseek
我在調用f_write函數之前,調用了一下f_lseek函數來移動文件指針。不過在這裡並不需要,你們參考我的完整工程文件就知道。在這之前我已經進行了文件讀取的操作,文件指針已經定位在了文件的最後一個位元組這裡。不過我還是調用了一下,因為有時候需要用到這個函數。這個函數的詳細用法請參考FatFs的官方文檔 網站
5、使用f_write
f_write的用法和f_read非常相似,這裡就不在贅述。第三個參數和第四個參數的含義也是大同小異。想瞭解這個函數的詳細說明,請參考FatFs的官方文檔 網站
  f_lseek(&file, Number);  Status = f_write(&file, String, 49, &Number);
6、使用f_close
f_close這個函數的用法就非常的簡單了,這裡在寫入操作之後要調用一次這個函數。調用了這個函數之後,寫入的信息才可以保存在SD卡的上面,下一次才可以讀取出來。如果沒有使用這個函數的話,文件就會存儲在緩衝區中,只有這一次讀取可以成功。到了下一次複位的時候,讀取的還是原先的文件內容。
f_close(&file);
7、再次讀取文件內容
現在我們有寫入了一些信息到了我們的文件裡面,再次讀取一下看看寫入成功了嗎。下麵的代碼實現了這一功能,大家參考一下。
f_open(&file, Path, FA_READ | FA_OPEN_EXISTING);  if(!Status)  {  f_read(&file, Words, 256, &Number);  HAL_UART_Transmit(&huart1, (uint8_t *)Words, Number, 500);  }  f_close(&file);
五、上電測試
代碼我們都準備好了,只要編譯通過下載到我們的開發板上就行了。如果你的硬體連接都非常的正確,而且按照前面的步驟來的話就可以開始測試讀取SD卡了。
我在SD卡的根目錄下建立了/File/test.txt
初始的文件內容如下:
This is a test file to confirm the library of FatFs.
Don't support Chinese in this file.
Wish you a good luck!
測試結果

觀察兩次的輸出結果可以看得出來,第二次複位的時候文件的末尾又多了一行文字。這一現象符合我們的程式邏輯。大家可以對比一下這裡的結果,自己做一個參考。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Linux 配置本地源 (Ubuntu / CentOS) LInux使用ISO鏡像配置本地源,離線安裝軟體包 ...
  • ● 操作系統做什麼 1. 電腦系統有4個組成部分:電腦硬體,操作系統,系統程式與應用程式和用戶。 2. 什麼是操作系統?(不同觀點) 控製程序 操作系統控制和協調不同用戶的各種應用程式之間的硬體使用。(操作系統是管理電腦硬體的程式,為應用程式提供基礎,充當電腦硬體和電腦用戶的中介) 資源管 ...
  • 問題重述: 最近環境中需要使用 fedora 28 來進行遠程桌面,於是就重新配置了一下vnc 在這裡面做一下記錄。 過程: yum 安裝: 工作機上安裝 vncviewer 遠程主機上安裝: vncserver 連接遠程桌面: 連接遠程桌面很簡單,只要使用 vncviewer 主機名:桌面號 畫面 ...
  • 前言 之前討論了進程,瞭解一個進程能做一件事情,如果想同時處理多件事情,那麼需要多個進程,但是進程間很不方便的一點是,進程間的數據交換似乎沒有那麼方便。Linux提供線程功能,能在一個進程中,處理多任務,而且線程之間的數據是完全共用的。 線程也有PCB,它的PCB和進程的PCB結構完全一樣,只是它里 ...
  • 問題重述: 今天,突然找不到vm 的ip 了,但是可以從網卡狀態上看到其 mac 地址,並且確定主機是啟動狀態,網路狀態良好(後來發現因為子網掩碼的問題,導致虛擬機和網關之間不通信,從而導致其他網路的主機不能訪問,這個是另一個問題了。) 所以我們需要通過vm 的mac 地址來獲取到vm 具體的 ip ...
  • 跟著RUNOOB網站的教程學習的筆記 Shell與Shell腳本 Shell是用戶與Linux系統的橋梁。它既是一種命令語言,也是一種程式設計語言。 Shell腳本是一種Shell編寫的腳本程式,其實就是一個包含Shell代碼的文本文件,運行時,會一行一行的運行給文本文件中的命令。 Shell腳本的 ...
  • 事情的來源是,公司要將網站從http升級到https,由於歷史遺留原因,才發現現有的nginx是通過源碼安裝的,並沒有安裝ssl模塊,需要現安裝sll模塊,這個nginx是整個公司最前端的一個代理,涉及到很多部門,因為之前沒有操作過,還是小心點為妙,下麵是在虛擬機上演示的。 1,先安裝後面所需的一些 ...
  • 最近使用靜態地址配置linux, 配置的時候突然不知道配置選項具體內容了,這裡面記錄一下配置:適用於 ipv4 網路 保持更新,轉載請註明出處。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...