Uzun süreden beri STM32F4 için örnek yayınlamıyordum.
Aşağıda örneği görülen program, SD kart kullanmayı çok kolaylaştırıyor.
2GB SD kart için hazırladığım kütüphane ile "PC"de herhangi bir ara işleme gerek kalmadan
yapılabilecek işlemler;
SD kartı formatlama
SD kartta dosya oluşturma
SD kartdaki dosyayı okuma
SD kartdaki dosyaya yazma
Bazı sınırlamaları yok değil.
Daha fazla detay ve örnek proje klasörü linki: http://www.cncdesigner.com/wordpress/?p=3911 (http://www.cncdesigner.com/wordpress/?p=3911)
#include "STM32F4xx.h"
struct Dosya
{
char Buffer[512];
short NumOfSectors;
short v[7];
} 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 dosyayı 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;
err=fread(&File,0); // Dosyanin 0x0000 adresini okuyalim
if(!err)
{
if(File.Buffer[0]=='1') GPIOD->BSRRL=0x4000;
if(File.Buffer[1]=='2') GPIOD->BSRRL=0x2000;
}
}
else if(err==2) GPIOD->BSRRL=0x1000;
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
*/