STM32F4 Discovery kit için oluşturduğum SD kart kütüphanesi sayesinde PC'deki verileri SD karta kopyalayıp daha sonra SD kartınızı Discovery kitimize takıp dosyaları okuyabiliyoruz.
Yada, Discovery kitinde oluşturduğumuz dosyaları SD karta yazdırıp daha sonra SD kartı PC'ye takıp dosya içeriğine bakabiliyoruz.
Bazı sınırlamalar var tabiki.
1. Dosya boyları 64K yı aşamaz. (Sabit uzunluk)
2. Dosya adı 0...9 A...Z ve _ karakterlerinden oluşmak zorunda.
3. Dosya adı max 8 karakter, dosya uzantısı ise max 3 karakter olmak zorunda.
4. SD kart Discovery kitinde formatlanmak zorunda.
5. Herbiri 64K lık 32000 tane dosya oluşturabilirsiniz.
Aşağıda örnek bir kullanım görmektesiniz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
#include "STM32F4xx.h" struct Dosya { char Buffer[512]; short v[16]; } File; extern char fopen(char*,struct Dosya*,char); extern char fread(struct Dosya*,char); extern char fwrite(struct Dosya*,char); extern char format(struct Dosya*); int main() { char err; int i; // err=format(&File); // 2 Gb SD karti formatla // ZZZZ.TXT adinda bir dosya varsa ac, yoksa olustur if(!fopen("ZZZZ.TXT",&File,1)) { // Buffer alanini A harfi ile dolduralim for(i=0;i<512;i++) { File.Buffer[i]='A'; } // Bufferdaki bilgileri ZZZZ.TXT dosyasinin 0x0000 adresine yazalim err=fwrite(&File,0); if(!err) { fread(&File,0); // Dosyanin 0x0000 adresini okuyalim fread(&File,1); // Dosyanin 0x0200 adresini okuyalim } } else { // Dosya olusturulamadi } // SD kartda AAA.TXT dosyasi varsa mavi ledi yak ve dosyayi oku // 0. karakter 0x31 ise kirmizi ledi yak // 1. karakter 0x32 ise kavunici ledi yak // AAA.TXT dosyasi yoksa yesil ledi yak err=fopen("AAA.TXT",&File,0); // AAA.txt adinda bir dosya varsa ac if(!err) { GPIOD->BSRRL=0x8000; // Dosya varmis, mavi ledi yak err=fread(&File,0); // Dosyanin 0x0000 adresini okuyalim if(!err) { if(File.Buffer[0]=='1') GPIOD->BSRRL=0x4000; Kirmizi ledi yak if(File.Buffer[1]=='2') GPIOD->BSRRL=0x2000; Kav.ici ledi yak } } else if(err==2) GPIOD->BSRRL=0x1000; Dosya yokmus, yesil ledi yak while(1); } /* Err kodlari 0: Gorev basarili 1: Gorev basarisiz (Hata var vs) 2: Dosya bulunamadi Olusturulan dosyanin uzunlugu 64K olarak sabittir. 32000 adet dosya olusturabilirsiniz. fopen("Z.TXT",&File,0) Z.TXT dosyasini ac anlamindadir. fopen("Z.TXT",&File,1) Z.TXT dosyasini ac bu isimde dosya yoksa olustur anlamindadir. fread(&File,n) Acilmis dosyanin n x 512 adresinden 512 byte oku anlamindadir fwrite(&File,n) Acilmis dosyanin n x 512 adresine 512 byte yaz anlamindadir Dosya adi 0..9 A..Z ve _ Ingilizce karakterden olusabilir Dosya adi max 8 karakter, dosya uzantisi max 3 karakter olmak zorundadir */ |
Örnek proje klasörü için tıklayın. STM32F4 Discovery
Kitde kullanılan bacaklar
PA5 SCK
PA6 MISO
PA7 MOSI
PB0 CS
Çalışmamda SD kart konnektörü barındıran hazır bir kit kullandım. Fakat Discovery kitimize doğrudan SD kart konnektörü bağlanabilecek bir şema yayınlayacağım. Aşağıdaki şemayı denemedim. Vcc=3.3v (SPISEL = CS)