STM32掛載SD卡記錄日誌

2021-10-16 09:18:52 字數 2211 閱讀 8828

stm32掛載sd卡記錄日誌

程式主要是在前一篇的基礎上進行。使用cube配置stm32掛載tf卡,請看

記錄日誌主要是將執行中的資料轉換為字串,然後再寫入到sd卡。需要解決兩個問題:

程式中各種格式的資料變數轉換為字串;

sd卡檔案關閉後再次開啟繼續接著寫。

解決第乙個問題是使用函式sprintf(),函式具體定義和用法請看c標準庫。

「%02d」是輸出2位寬度的十進位制,「%.1f」是輸出浮點數小數點保留1位,其他類推。

//每天中午12點記錄一次感測器資料

void

write_log

(void

)}

「sprintf()」函式是將字串和各種變數按照格式輸出到乙個字串str_zt裡,輸出完畢後效果就是將分散的資訊連線到了一起。另外該函式返回值是連線的總位元組數,使用起來非常方便。然後再列印printf("%s",str_zt),效果就是下面這樣子。

20210117 22:23:00 t:0.0 rh:0.0%

pm2.5:0.0ug/m3 pm10:0.000mg/m3 tvoc:0.0000mg/m3 hcho:0.000mg/m3 nh3:0.000mg/m3 h2s:0.0ppm

解決第二個問題是使用f_lseek(&fil,n)函式。該函式是將檔案指標從檔案頭向下偏移n個位元組。

另外必須注意f_open檔案開啟方式,fa_open_always | fa_write。如果是用了fa_create_always | fa_write,是不行的,會覆蓋上次寫的檔案重新建個檔案。

void

write_tfcard

(void

)else

printf

(" mount sucess!!! \r\n");

/*-2-建立新的檔案並寫入資料*/

retsd =

f_open

(&fil, filename, fa_open_always | fa_write)

;//開啟檔案,許可權包括建立、寫(如果沒有該檔案,會建立該檔案)

if(retsd)

//返回值不為0(出現問題)

printf

(" open file error : %d\r\n"

,retsd)

;//列印問題**

else

printf

(" open file sucess!!! \r\n");

/*-3- 偏移指標到末尾處*/

printf

(" file size: %d \r\n",(

int)fil.fsize)

;f_lseek

(&fil,fil.fsize)

;/*-4- 在txt檔案尾續寫資料*/

retsd =

f_write

(&fil, str_zt,

sizeof

(str_zt),(

void*)

&byteswritten)

;//在檔案內寫入wtext內的內容

if(retsd)

//返回值不為0(出現問題)

printf

(" write file error : %d\r\n"

,retsd)

;//列印問題**

else

/*-5- 關閉txt檔案*/

retsd =

f_close

(&fil)

;//關閉該檔案

if(retsd)

//返回值不為0(出現問題)

printf

(" close error : %d\r\n"

,retsd)

;//列印問題**

else

printf

(" close sucess!!! \r\n");

}

以上程式合在一起執行列印效果如下:

這兩個簡單函式即實現了將多種變數資訊儲存記錄到sd卡里,至於什麼時間記錄,多久記錄一次,就自己定了。

最後將sd卡放電腦上,記事本開啟看看:

STM32初始化SD卡流程

1,初始化sdio外設,關閉sdio時鐘。2,上電,開啟時鐘,注意此時時鐘應不能超過400khz,且此時是只有一位資料線,要到初始化完成後再調時鐘與資料線寬度。3,延時最低74個時鐘週期。使時鐘與sd卡穩定,否則會出錯。4,傳送cmd0,需要返回0x01,進入idle狀態 5,為了區別sd卡是2.0...

SD卡,檔案操作,記錄日誌

sd卡是否存在 private boolean checksdcardstatus else return sdcardstatus sd卡上是否有apk檔案 private boolean checkfileexist string ifilepath return fileexist 刪除檔案 ...

stm32學習記錄

讓自己別忘了大學裡學的東西,那麼就把它記錄下下來,效率會比忘記然後重新再去找資料再重頭學高的多 先講講定時器的基礎定時功能 1.先做乙個形象的比喻 手錶 秒鐘 時鐘 定時器 定時器內部時鐘 定時器輸出時鐘 它們倆基本相同,不同的是,對於手錶是秒鐘和分鐘之間的進製是固定為60,而對於定時器,定時器內部...