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,配置成系統主頻...