使用stm32cubemx快速生成fatfs例程

2021-10-03 13:21:08 字數 2046 閱讀 6855

2. 修改工程**

3.實驗現象

本文將介紹如何使用stm32cubemx快速生成乙個stm32 sdio 介面的fatfs例程,並實現對sd卡讀寫,本文的cubemx版本為stm32cubemx 5.6.0,mdk-keil版本為keil v5.27.1.0,微控制器主機板為stm32f405。

sdio模式選擇為4位線寬模式,sdio時鐘分頻選擇2分頻,並且選擇開啟sdio全域性中斷以及sd卡傳送、接收dma全域性中斷,需要注意的是sdio的中斷優先順序應該高於dma的中斷優先順序,配置如下圖所示:

fatfs配置的時候需要選擇檔案編碼方式為中文簡體,並且將相應的編譯碼檔案加入到微控制器的棧區(cc936.c),如下圖:

如上圖所示,可以看到此處的「platform settings」有乙個警告,這個是用於sd卡插入引腳檢測的,所以,需要在硬體上預留乙個引腳用於sd卡的插入檢測(本文的主機板是用的pa8,sd卡插入時為低電平),並且將該引腳配置為輸入模式,然後繫結到dected_sdio即可,如果硬體上沒有預留檢測腳的朋友,可以參考一下這篇文章,關於cubemx fatfs platform settings的說明 ,或者直接將bsp_driver_sd.c中的bsp_sd_isdetected()函式修改如下:

__weak uint8_t bsp_sd_isdetected

(void

)

platform settings設定如下圖:

最後,將工程的棧空間改大一點,然後生成keil 5 的工程即可,如下圖:

fatfs讀寫檔案的流程,如下所示:

bool fatfs_test()

;/** 使用狀態機的方式完成以下操作 */

switch

(step)

break

;case1:

if(f_mkdir

("sd_test"

)== fr_ok ||

f_mkdir

("sd_test"

)== fr_exist)

break

;case2:

if(f_open

(&sdfile,

"sd_test/test.txt"

, fa_create_always | fa_write | fa_read)

==fr_ok )

break

;case3:

if(i <=

100)

}else

break

;default

:break;}

if(step >3)

else

}

然後再main.c中呼叫該函式即可,void main()函式**如下:

int

main

(void

)while(1

)}

利用讀卡器讀出sd卡的內容,可以看到再sd卡的sd_test目錄下有乙個test.txt的檔案,檔案內容確實如我們在程式中所寫的一樣,如下圖:

STM32CubeMX系列 待機喚醒

1.低功耗模式簡介 系統或電源復位後,微處理器處於執行狀態,執行狀態下hclk為cpu提供時鐘,核心執行程式 當cpu不需繼續執行時 例如等待某個外部事件 可以利用多個低功耗模式來節省功耗。使用者需要根據最低電源消耗 最快速啟動時間和可用的喚醒源等條件,選定乙個最佳的低功耗模式。stm32提供了3種...

STM32CubeMX系列 記憶體管理

1.記憶體管理簡介 stm32f103zet6內部有64kb的sram記憶體,加上外擴的128kb容量的sram後,可使用的記憶體還是比較多的。本例程將介紹一種簡單的記憶體管理方式 即分塊記憶體管理 來有效管理這些記憶體,類似於c語言中通過malloc函式和free函式來申請和釋放記憶體 記憶體管理...

用STM32CubeMX建立FreeRTOS專案

1.目標,pg13,pg14雙線程雙閃燈。2.測試平台 stm32f429i disco keil v5.13.0.0 cubemx 4.8.0 3.步驟 3.1 開啟cube,pg13,13設為輸出,rcc選外部晶振,點選freertos 3.2 時鐘配置介面 enable css,配置成系統主頻...