用 STM32CubeMX 快速生成一個 SD 卡讀寫程序


  用 STM32CubeMX 快速生成一個 SD 卡讀寫程序
  前提:默認已經裝好 MDK V5 STM32CubeMX
  硬件平台: STM32F4xx 系列,並通過 SDIO 連接 SD 卡。
Step1.新建工程  

  選擇芯片型號。  

  

Step2.配置時鍾引腳  

  

Step3.配置 SDIO SD 4bit 寬度總線

  

Step4.配置時鍾樹, SDIO 模塊輸入要求為 48MHz 時鍾

  

Step5.配置 SDIO 時鍾分頻系數 CLKDIV。計算公式為 SDIO_CK = 48MHz/(CLKDIV+2)
  如下圖, CLKDIV=2,則 SDIO 時鍾 SDIO_CK=48MHz/(2+2)=12MHz

  

Step6.使用 DMA 傳輸

  

Step7.使能 SDIO 中斷

  

Step8.配置 NVIC

  注意,此處要求 SDIO 中斷優先級必須高於 DMA2 stream3 DMA2 stream6 的中斷優先級。
  因此,將 DMA2 stream3 DMA2 stream6 的中斷優先級都將為 2(或者更低)

  

Step9. 生成 MDK 工程及代碼  

  特別注意,一定要加大堆棧大小,默認的堆棧大小有可能不夠用。

  

Step10.打開 MDK 工程

  

 

  

Step11.選擇芯片型號

  第10、11步會出現在你你的keil沒有固件包的情況下,如果你的keil已經有了估計包就不會出現了。

  

Step12.編譯工程

  

Step13.添加代碼
  在 main.c 文件添加一個變量和一個數組定義。

  

  在 main 函數的 while(1)中循環讀取 SD 卡扇區的代碼,如下圖。

  

  其中, HAL_SD_ReadBlocks_DMA()函數可在 stm32f4xx_hal_sd.h 找到其原型,stm32f4xx_hal_sd.c 找到其實現。

Step14.再編譯下載運行程序

  J-Link 仿真調試,在 MDK 中觀察 ReadAddr dat_buf[]的值, dat_buf[]中的數據就是 SD卡上 ReadAddr 為起始地址的一個扇區的數據

  觀察結構體變量 SDCardInfo,會發現 SD 卡的容量、卡類型等基本信息都已經被包含其中。

  我使用的是 8GB SD 卡, SDCardInfo. CardCapacity=0x1d2400000,即約 7.28GB

  

  由於本程序是直接操作 SD 卡的物理扇區,而直接寫物理扇區可能會破壞 SD 卡原有的文件

  系統,所以代碼中沒有進行寫操作的演示。有興趣的朋友可自己實驗,但要提前備份 SD 內的文件。




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM