STM32之FATFS文件系統(tǒng)(SPI方式)筆記_第1頁(yè)
STM32之FATFS文件系統(tǒng)(SPI方式)筆記_第2頁(yè)
STM32之FATFS文件系統(tǒng)(SPI方式)筆記_第3頁(yè)
STM32之FATFS文件系統(tǒng)(SPI方式)筆記_第4頁(yè)
STM32之FATFS文件系統(tǒng)(SPI方式)筆記_第5頁(yè)
已閱讀5頁(yè),還剩9頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、STM32之FATFSC件系統(tǒng)(SPI方式)筆記BY:T7Date:20171202At:YSU_B307開發(fā)環(huán)境: uVision : V5.12.0.0STM32F103V8T6庫(kù)版本 :STM32F10x_StdPeriph_Lib_V3.5.0 FATSF : ff13a 工程版本:FATFS_V1 日期:硬件連接:SPI1_CS> PA4 SPI1_CLK> PA5 SPI1_MIS。> PA6 SPI1_MOS-> PA7 工程功能:建立在SPI_SD勺基疝1,完成文件系統(tǒng)的初步接觸。一、FATFSC件系統(tǒng)1 .使用開源的FA”件系統(tǒng)模塊,具源代碼的獲取從官

2、網(wǎng):目前最新版本是:ff13a2 .解壓后得到兩個(gè)文件:document2017/11/29 2128source2017/11/25 21:27 文彳姚其中,documents相當(dāng)于STM32的固件庫(kù)使用手冊(cè), 介紹FATFS(統(tǒng)的函數(shù)使用方法,source 中則是需要用到的源代碼。因?yàn)镕ATF酸用SD卡,所以FATFS勺基石是SD卡的正常讀寫,這里采用 SPI模式。二、STM32之SD卡SPI模式1 .硬件連接:SPI1CS> PA4 SPI1CLK> PA5 SPI1MISO > PA6 SPI1MOS-> PA7ADD11AT2 cn/naTmCMD VDD&l

3、t;|_K GNDDATO 口AT】11SPll csJ5Pli MOSVDD土SSPll 匚Lie6SPll VIM)R_gvss口GwundSPIL MOS I10KSPll CLK 少LOKPASPA4PA5PA6PA 7CMSIS號(hào) co-ie_cm.c5 systerri_5tmJ2flOx,c , &tartup_stin3'2f1 0>x_hd.sSTM 32F1 &(_StdP eriph_ Qriver置 rtm32f1Qic_gpio.c5" rtm32f1k_rcc.c3 rnist cfT rtm32f10K_dnria.c3 s

4、trn32f10tsQ國(guó)5 itm32F1D)c_spi.e5 dnd2f1(k_u5artxSPH cs 0P11 CLK SPp MIS。 SPI1 MOS12 . SPI模式下STM32讀寫SD卡的工程結(jié)構(gòu)-I 也 Prajert: Template曰毒 一 TemplateJqUser® J main*cI-+ j stm32f1Cit.cH _J ledxi±l-_部itS _J lystick.cF+iusartoctS J mmc_£d.cE ,匕 ;0-i S3% aI (4)I國(guó)i ® 田.| a- i田在確定STM32使用SPI模式t

5、賣寫SD卡沒有問題后,進(jìn)入 FATSFt件系統(tǒng)的實(shí)驗(yàn),另源代碼 在文檔最后。三、FATS戌:件系統(tǒng)移植1.配置工程環(huán)境1) STM32讀寫SD卡-SPI模式成功2)將解壓后的ff13a整個(gè)文件夾賦值到工程目錄下,如圖:CMSIS2017/11/30 W;10文件夾|2017/12/1 21:19ffl3a2017/11/30 10:12文件夾Listing 與2017/11/30 10:10文件夾Output2017/12/2 16:10文件夾Project2017/12/2 16:10文件夾5TN132Z1 Oxjtd periphD river2017/11/30 1010文件夾User2

6、017/12/2 16:10文件夾PH Killkeil2015/11/13 12:43Windows批處理:IbI readme2017/12/2 16:251 KB1 KB3) 返回到MDK界面下,添加ff13a項(xiàng)目組,并把 ffsystem.c添加到項(xiàng)目組中,如下圖: Project阜 Q£ 電 Project! Template=1Tcmplattid User目錄下 ff.c,diskio.c,ffunicode.c , DUDU J由m-.由;S-.由:心.:田mainiCitm32f1Ox_rt.cted.cspi.csystic k.c sarts.cmmc sd.c

7、co re_cm 3,c systcm_stm 32f1 Ox. c ita rtu p_stm 32f1 Dc_h d.4二TM32F10x StdPenph_Driver|+ 白 stm32f1Cbc,gpio.c± 白 stm32f10x_rcc,c+ _J misc.c(+ 四 5tm32f10x_dmj.c,+ 3 stm35f10x_£dio.c由因 5im32f1Qx_5pi.c,+ 白 ftrn3f10x_utartrC二.ff13a .J.田.4.甲田ffxdisk io,c ffunic&de.c ffsystem .c4) 在Target Op

8、tions的C+珊譯器選項(xiàng)中添加文件包含路徑,如下圖四、為FATS戌:件系統(tǒng)添加底層驅(qū)動(dòng)(一)在diskio.c中添加函數(shù)代碼1. DSTATUS disk_status (BYTE pdrV);加完成后如下圖0023: dstatus disk_status (BYTE Mlv/* Physical drive nmuber to identify the drive)09026;(93027:OSTA-U£ »tatj崎0,回:9S029:switch (pdrv) 00050;00031;cute DEV MMC ;00932:stat- RES_OK;return

9、s+at;00934:00055:)00035;raturn STAJIOINIT;00937: 2. DSTATUS disk_initialize (BYTE pdrv)添加完成后如下圖J-.(j-u, usaius disk initialize (:BYTE pdrvPhysical drive rmuber to identify the drive */EW04S: >00049: (加以廿;LJSfAlU stat;用LIint result;崎 92;3鏟,3$mitch (pdrv)0(54:0eO55;®0056:ca» DEV_HMC :0005

10、7:一00058:/ SD卡打始化result - SO_lHitifllizc();G0060:eiKJLl”列斷suit 0初鋁化成功共他;初她化失敗st<it = RfS_ERROftj(XKi4 alsa6一5:stat = RF5_0K; /sfot > & 我,郭靜牝三成叱 5:3時(shí)67:rflturn itat;0eoes:仔四69:0679:甘乂/Ireturn STA_NOINITj&0072 ; ) ? end di5k_initiali;e ? c zi/ir n .3. DRESULT disk_read (BYTE pdrv, BYTE*

11、buff, DWORD sector, UINT count);00S&: 00081: flWWR?: 0008S: 00034: 000S5: 0O0B&: 00087: 00088; 00089; 00090; (30091;dresult disk_readBYTEpdrv,/*BYTt*bu-f.f*LWPD sector>/ +UINTeunt -/*) (DRESULT res;irt result fswitch Ipdry)(Physical driv& nrruter to id&ntify Liat a buffer to store

12、 read data */ Start sector in LBA *!Number of sectors to read */the dri ve00092; 。州 93; 0。94; 00095;。96: 0。97: 0093: 。白。qq:0A1RR: 00191:0010?:00103:00104:00105100106:00107;00109;00103:case DEV甘K :/, translate the arguments here“讀一個(gè)或者多個(gè)廉區(qū)敬據(jù)r«&ult - SD_R«adDisk(buff,vector, count);判斷“ul七

13、0初始化成功 其他二初始化失散 i-f (rpul t)P口孱=RES_FRROR;alse戶戶號(hào)=吊尸虧OK: dFreturn res;)return RES PAHERR;end disk read ?4. DRESULT disk_write (BYTE pdrv, const BYTE* buff, DWORD sector, UINT count);設(shè)IX八 eiis: 00119: 0120: 60121; 00122: &&123: 03124: G0125: 00126: 00127: 00129: flp 1鉆 G9131: 00152:001 書: 001

14、34:IV1 胃 5eei36: ©0117: eeiis:eei39 婚1我:00141;03112: 60143: 001/1 :00145;00116:-ruli disk_writeBYTE pdrv, const BYT £ bjff, DhCFU sector, Uln- count ) DRFSUL T res; 二n't resul't;/* Phj/? tea 1 dnlve nmubr tc identify the drive */ /h Date to be written *,/* Start sector in LBA */,*

15、Number ot setters to write 1 -yswitch (pdrv) case DEV MMC :/ translatp thp arguments er-e “與一個(gè)或者多個(gè)扇區(qū)"esult - SP_WritQDisk( (uint5_t *)buf-f, tactorcount);。判斷F5Ult e就始化成功其他;初始化失敗 lf(rsult)res - RESERRORjnlfiBres - RES OKjreturn reijreturn RE5_PARCRR; t and disk writ f5. DRESULT disk_ioctl (BYTE

16、pdrv, BYTE cmd, void* buff);00154: DRESULT disk_lOCtl (00155:BYTEpdrv,/*Physical drive nmuber (0*) */0015G:BYTEcird,/-Control code */00157:void:buff廣Bjffer to send/receive controldata */06158:)9G159:(06160:DRESULT res;06161:06162:00163:switch (pdrv) 00164:06165:00156:case DEU_MM匚:00167:00168:/ Proce

17、ss of the command for the MMC/SD card00169:00170;return resj00171:00172:00173:00174:return RE5_PARERR-06175: ? end disk iottl ?a0i x 6. DWORD get_fattime (void);0017S: /+ /001/9: / Get current time*/00180: /* */W01BL: DWORD |get_fattime I601821 (0018J; return 8;6013d; 注意:在diskio.c中DEV_MMC的宏定義要為0,如下圖

18、tfwwiw; Aincluide ''diskio*hRI seen:RfifiI? - /* gfiniti口nq of physical 11;*definpDEVRAM1/t0OG14:*defineDEV_MHC0"UWlb:*defineDEV-USB2/*1 h Fatl-s lower layer API *,driv*« nuinbip Fxamfile; Mrp Examplei Map Example: Hapfor* pmrh dri wf +/Ranch、k to physirAl dri wf 1 4/ MMC/SD card t

19、o physical drive G x/ USB MJD to physical drive 2 */(二)打開Ffconf.h函數(shù)1 .改變FF_CODE_PAGE值如下90071: define FF_CODE_PAGE 936CircrEr -Oa t I IH « f H H2 .改變ff_use_lfN勺值如下 TV 1V * JFv103100: ttdefine FF_USE_LFN 2五、Main主函數(shù) Main.c函數(shù)如下代碼:5121024#include "main.h"#define ONE_BLOCK#define TWO_BLOCK

20、uint8_t sd_RxBufTWO_BLOCK;S味數(shù)據(jù) j 接收緩存區(qū)uint8_t sd_TxBufTWO_BLOCK = 0;/S樂數(shù)據(jù) j 接收緩存區(qū)FRESULT reS讀寫文件的返回值FIL;/文件系統(tǒng)結(jié)構(gòu)體,包含文件指針等成員UINT br,bw;/Fil R/W countBYTE ONE_BLOCK* BUFFER/BYTE Tx = "This is the FATFS System!rn"BYTE Tx=中文文件系統(tǒng)實(shí)驗(yàn)! rn"static const char * FR_Table=./* (0) Succeeded/* (1) A

21、hard error/* (2) Assertion/* (3) The physical"FR_OK 成功",*/"FR_DISK_ERR底層硬件錯(cuò)誤", occurred in the low level disk I/O layer */"FR_INT_ERR 斷言失敗",failed */"FR_NOT_READW理驅(qū)動(dòng)沒有工作",/* (4) Could notdrive cannot work */"FR_NO_FILE文件不存在",find the file */"FR_

22、NO_PATH 路徑不存在",/* (5) Could notfind the path */"FR_INVALID_NAME 無效文件名”,/* (6) The pathname format is invalid */"FR_DENIED: 由于禁止訪問或者目錄已滿訪問被拒絕", /* (7) Access denieddue to prohibited access or directory full */"FR_EXIST由于訪問被禁止訪問被拒絕",/* (8) Access denieddue to prohibited a

23、ccess */"FR_INVALID_OBJEC攻件或者目錄對(duì)象無效",/* (9) The objectis invalid */"FR_WRITE_PROTECT:ED理驅(qū)動(dòng)被寫保護(hù)",/* (10) Thephysical drive is write protected */"FR_INVALID_DRIV匿輯驅(qū)動(dòng)號(hào)無效",/* (11) The logicaldrive number is invalid */"FR_NOT_ENABLED卷中無工作區(qū)",/* (12) Thevolume has no

24、 work area */"FR_NO二沒有有效的 FATS",/* (13) There is no valid FATvolume */"FR_MKFS_ABORTED于參數(shù)錯(cuò)誤 f_mkfs()被終止",/* (14)The f_mkfs() aborted due to any parameter error */"FR_TIMEOUT在規(guī)定的時(shí)間內(nèi)無法獲得訪問卷的許可",/* (15)Could not get a grant to access the volume within defined period */&quo

25、t;FR_LOCKED由于文件共享策略操作被拒絕",/* (16) Theoperation is rejected according to the policy */"FR_NOT_ENOUGH_COR既法分配長(zhǎng)文件名工作區(qū)",/* (17)LFN working buffer could not be allocated */"FR_TOO_MANY_OPEN_FILES前打開的文件數(shù)大于_FS_SHARE"/* (18)Number of open files > _FS_SHARE */"FR_INVALID_PARA

26、METE卷數(shù)無效"/* (19)Given parameter is invalid */ ;int main(void)int i = 0;FATFS fs/記錄文件系統(tǒng)盤符信息的結(jié)構(gòu)體LED_Init();USARTx_Init();/* 調(diào) 用 f_mount() 創(chuàng) 建 一 個(gè) 工 作 區(qū) , 另 一 個(gè) 功 能 是 調(diào) 用 了 底 層 的 disk_initialize()函數(shù),進(jìn)行SDIO借口的初始化 */res = f_mount(&fs, "0:", 1 );if (res != FR_OK)printf(" 掛載文件系統(tǒng)失敗(%

27、s)rn", FR_Tableres);elseprintf(" 掛載文件系統(tǒng)成功(%s)rn", FR_Tableres);/*調(diào)用f_open()函數(shù)在剛剛開 辟的工作 區(qū)的盤符0下打開一個(gè)名為 Demo.TXT勺文作,以創(chuàng)建新文件或?qū)懭氲姆绞酱蜷_(參數(shù)"FA_CREATE_NEW| FA_WRITE"),如果不存在的話則創(chuàng)建這個(gè)文件。同意見 Demo.TXT這個(gè)文件關(guān)聯(lián)到這個(gè)結(jié)構(gòu)指針,以后操作文件就是聽過這個(gè)結(jié)構(gòu)指針來完成,可以理解為文件指針。*/res = f_open( & , "0:/Demo1.TXT"

28、, FA_CREATE_NEW | FA_WRITE);/*對(duì)f_open()函數(shù)的返回值進(jìn)行檢查 */if( res = FR_OK )printf("File Open SUCCESS! nt");/*將緩沖區(qū)的數(shù)據(jù)寫到文件中,創(chuàng)建文件成功,調(diào)用f_write()將緩沖區(qū)的數(shù)組變量Tx的內(nèi)容寫到剛剛打開的Demo.TXT文件中,寫完之后必須調(diào)用f_close()函數(shù)關(guān)閉已經(jīng)打開的文件,否則前面寫入的數(shù)據(jù)無效,甚至可能導(dǎo)致其他錯(cuò)誤*/res = f_write( & , Tx , sizeof(Tx) , &bw);if(res)printf("File Write ERROR! nt");elsep

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論