close

ST_logo_20130425.png

移植FatFs至STM32F429ZIT有一點要特別注意,就是版本相容性,本人實驗過各個FatFs與STM32F4xx_DSP_StdPeriph_Lib的版本,只有以下版本能成功運行,

STM32F4xx_DSP_StdPeriph_Lib_V1.3.0

FatFs R0.09b

以上這兩個函數套件在網上搜索找的到,STM32F4xx_DSP_StdPeriph_Lib_V1.3.0移植可以參考[STM32F407ZG-MCU學習筆記]STM32F407ZG Libraries移植[STM32F407ZG-MCU學習筆記]STM32F407ZG專案建立,幾乎一模一樣,下面要講FatFs移植,將ff9b.zip解壓縮,

1.JPG

解完壓縮會得到下面兩個資料夾,主要會移植"src"裡的文件,

2.JPG

在"src"中的文件,

3.JPG

在專案中新增FatFs資料夾,在裏頭要新增incsrc這兩個資料夾

6.JPG

將下圖.c檔複製至\FatFs\src,

4.jpg

將下圖.h2檔複製至\FatFs\inc,

5.jpg

在專案中資料夾引入這兩隻.c檔,

9.JPG

在Options for Target 'Target1'中的C/C++,去引入.h檔

11.JPG

\User\inc中的main.h新增引入ff.hdiskio.h,

10.JPG

引入完成就來修改文件,首先進行diskio.c第一階段修改,先按照下圖紅框部分修改,

12.JPG

再來把以下程式刪除,

result = ATA_disk_initialize();

result = MMC_disk_initialize();

result = USB_disk_initialize();

result = ATA_disk_status();

result = MMC_disk_status();

result = USB_disk_status();

result = ATA_disk_read(buff, sector, count);

result = MMC_disk_read(buff, sector, count);

result = USB_disk_read(buff, sector, count);

result = ATA_disk_write(buff, sector, count);

result = MMC_disk_write(buff, sector, count);

result = USB_disk_write(buff, sector, count);

result = ATA_disk_ioctl(cmd, buff);

result = MMC_disk_ioctl(cmd, buff);

result = USB_disk_ioctl(cmd, buff);

這樣就完成diskio.c第一階段修改,接下來修改ffconf.h,修改結果如下圖所示,

14.JPG

15.JPG

16.JPG

以上將FatFs移植修改完成後,接下來要針對STM32F4xx_DSP_StdPeriph_Lib_V1.3.0中的SDIO進行配置,標準函示庫引入stm32f4xx_dma.cstm32f4xx_sdio.c,

17.JPG

在STM32F429_Configuration新增sdio_config.csdio_config.h.會將sdio的配置寫在這裡面,基本會複製STM32F4xx_DSP_StdPeriph_Lib_V1.3.0裡提供的範例來完成,

18.JPG

這幾隻範例程式位置分別在\STM32F4xx_DSP_StdPeriph_Lib_V1.3.0\Utilities\STM32_EVAL\STM324x9I_EVAL,圖中的四隻程式,

19.jpg

以及\STM32F4xx_DSP_StdPeriph_Lib_V1.3.0\Project\STM32F4xx_StdPeriph_Examples\SDIO\SDIO_uSDCard,圖中的兩隻程式,

20.jpg

1. 將stm324x9i_eval_sdio_sd.c中的全部程式複製至sdio_config.c

2. stm324x9i_eval_sdio_sd.h也是全部程式複製至sdio_config.h

3. stm324x9i_eval.c在要將跟SDIO有關的程式複製至sdio_config.c

4. stm324x9i_eval.h也是把跟SDIO有關的程式複製至sdio_config.h

由於SDIO會用到中斷部分,需要到\STM32F4xx_DSP_StdPeriph_Lib_V1.3.0\Project\STM32F4xx_StdPeriph_Examples\SDIO\SDIO_uSDCard,中的stm32f4xx_it.c來增加,

21.JPG

中斷配置部份可以到\STM32F4xx_DSP_StdPeriph_Lib_V1.3.0\Project\STM32F4xx_StdPeriph_Examples\SDIO\SDIO_uSDCard,中的main.c來增加,

22.JPG

移植完成後就進行修改,修改在sdio_config.c中的SD_Error SD_Init(void),修改如下,

23.JPG

再來修改uint8_t SD_Detect(void),SD偵測GPIO配置,這裡是配置在PD3,別忘了新增GPIO初始化,如下所示,

24.JPG

25.JPG

完成以上動作sdio_config.csdio_config.h配置完成,接下來要進行diskio.c第二階段修改,主要是新增方法,

26.JPG

27.JPG

28.JPG

29.JPG

30.JPG

31.JPG

新增完成就可以順利使用FatFs,可以寫一個簡單程式來做測試,以下是測試程式,是寫在\ExtDevices_Configuration\src中的sdcard.c,

/* 配置SDIO中斷 */

NVIC_Configuration();

/* 註冊SD Card */

f_mount(1, &fatfs);

/* 打開創造123.txt */

f_open(&fil, "1:/123.txt", FA_WRITE | FA_CREATE_ALWAYS);

/* 寫入資料ABCDEF */

f_write(&fil, "ABCDEF", 6, &bw);

/* 關掉儲存檔案 */

f_close(&fil);

完成後可以檢查SD Card是否有成功寫入這些內容,

32.JPG

33.JPG

arrow
arrow
    文章標籤
    MCU FatFs SD Card ARM ST
    全站熱搜

    鄭智遠 發表在 痞客邦 留言(0) 人氣()