STM32F4 - Kolay programlama - ZIOS

Başlatan z, 26 Aralık 2013, 17:28:23

z

#30
ZIOS ile I2C uygulaması  (TCM8240MD kamera registerlerine erişim)  // ZIOS 1.03 de I2C komutlari yenilendi bu ornek yeniden yazilacak.

SCL  Pin PB6
SDA  Pin PB7

PD1 Kamera reset


#include "Zystem.h"

short T;

void MiliSecond()
{
    if(T) T--;      
}

int main()
{
char RxData;
          
//  TCM8240MD I2C example     
         
    pinmod('D',1,output);    // GPIOD01 is a output for the TCM8240MD Reset pin
    pinclr('D',1);           // TCM8240MD Reset line is low
    T=100; while(T);         // wait 100ms
    pinset('D',1);           // TCM8240MD Reset line is high
    T=10; while(T);          // wait 10ms
          
    I2Cinit(400000);         // I2C clock frequency is 400 Khz   
          
//  Lets read 0x04 location of TCM8240MD

    I2Cstart();              // Start Condition 
    I2Ccmd(0x3D,0);          // TCM8240MD Adr=0x3D, (R/W bit=0, write means) 
    I2Cwrite(0x04);          // TCM8240MD register address is 0x04
    I2Cstart();              // Start Condition 
    I2Ccmd(0x3D,1);          // TCM8240MD Adr=0x3D, (R/W bit=0, read means) 
    RxData=I2CreadNack();    // Read [0x04] register (No ACK)
    I2Cstop();               // Stop condition       
          
//  Lets write 0x0B in to 0x04 location of TCM8240MD
          
    I2Cstart();              // Start Condition 
    I2Ccmd(0x3D,0);          // TCM8240MD Adr=0x3D, (R/W bit=0, write means) 
    I2Cwrite(0x04);          // Register address is 0x04
    I2Cwrite(0x0B);          // Register data is 0x0B 
    I2Cstop();               // Stop condition          
          
    while(1);
    
}


Bu uygulama en azından ZIOS v1.3 de calışmaktadır.

Henuz V1.3 yayinlanmadı.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

#31
ZIOS ile (I2C) 24LC64 yazma-okuma

#include "Zystem.h"

char Rx;

char Write(short Adr,char Data)
{
char ok,n;
          
    ok=0; n=0;
    while(!ok && (n<5))           
      {        
        ok=I2Cstart(0x50,0);           // 24LC64 Adr=0x50, (R/W bit=0, write means) 
        if(ok) ok=I2Cwrite(Adr>>8);    // High addres
        if(ok) ok=I2Cwrite(Adr);       // Low addres
        if(ok) ok=I2Cwrite(Data);      // write data to [Adr]
        I2Cstop();                     // Stop condition       
        if(!ok){I2Creinit(); n++;}        
      } 
    return(ok);  
}

char Read(short Adr,char* var)
{
char ok,n;
          
    ok=0; n=0;
    while(!ok && (n<5))           
      {        
        ok=I2Cstart(0x50,0);           // 24LC64 Adr=0x50, (R/W bit=0, write means)
        if(ok) ok=I2Cwrite(Adr>>8);    // High addres
        if(ok) ok=I2Cwrite(Adr);       // Low addres
        if(ok) ok=I2Cstart(0x50,1);    // 24LC64 Adr=0x50, (R/W bit=0, read means)
        if(ok) ok=I2CreadNack(var);    // Read [Adr] address (No ACK)
        I2Cstop();                     // Stop condition   
        if(!ok){I2Creinit(); n++;}        
      }          
    return(ok);  
}

int main()
{
          
//  24LC64 I2C example (A2=A1=A0=0)    
         
    I2Cinit(400000,10000);        // I2C clock frequency is 400 Khz, try 10000 times   
         
    if(!Write(0x100,0x77))        // [0x100]=0x77      
      {
        // Write Error        
      }                
      
    if(!Read(0x100,&Rx))          // Rx=[0x100]      
      {
        // Read Error        
      }                
   
    while(1);
    
}


ZIOS V1.04
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

byclgn

Hocam, .lib dosyası sıkıştırılmış durumda acaba içeriğini ilerde yayınlamayi düşünüyormusunuz genellikle  mbed gibi os dosyalari açık kaynak oluyor ileri düzeyde yapılan uygulamalarda ayarların ve değişkenlerin değiştirilmesi için.
Yani açık kaynak olsa heralde daha da gelişebilir zos. Gercekten emeginize sağlık Teşekkürler hocam

muhittin_kaplan

Zanmam,Zios Açık Zaçık Olmaz.

z

#34
Hocam bir haftayi askin zamandir bilgisayarsizdim. Cep telefonundan da yazmaya usendim.

Header dosya icinde C fonksiyonlari vs var.

Ornek programlari main.c, zios.h ve zios.lib olarak dusundugumden bahsettigin sorunlara neden olacak durumlari hic dusunmedim. ZIOS.h dosyasini kullanici istedigi gibi sekillendirebilir.

Sonucta ortada ciddi problemler gormuyorum.

Cikan her versiyonda ufak tefek sorunlar olacaktir bunlar bir sonraki versiyonda duzeltilir ve yeni sorunlar da beraberinde gelir. Tum dunyada bu boyle yuruyor.

-------------

SystemInit fonksiyonunu kullanicilarin elinden aldim cunku Bu kartla yeni tanisan birisinin uzunca bir sure farkli donanimlarin kurulumu ile isi olmayacak cunku
ihtiyac oldugu dusunulen tum donanimlar zaten ZIOS.LIB icinde yapilandirilmis durumda.

Eger ki benim kurulumlarim begenilmiyorsa,  systeminit gibi bir fonskiyon yazilabilir ve bu main fonksiyonu icinden cagrilabilir. Ortalikta SystemInit gorunmese de aslinda kimsenin elinden SystemInit alinmis durumda değil.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

#35
Nasil yani?

Reset rutini icinde benim init ettigim donanimlari daha sonra main rutini icinde yeni bastan init edemeyecegini mi soyluyorsun?

Mesela soyle bir soru sorsam;

CPU yu 72Mhz de kosacak sekilde yapilandirsam, USARTi 9600 baudda calisacak sekilde kursam, B portunun tum pinlerini input yapsam,
tum interruptlari aktif etmis olsam ve vizir vizir interruptlar isleme alinmaya baslanmis olsa vs vs

Sonra da desem ki Gerbay haydi bana bu sekilde init edilmis islemciyi main fonksiyonun hemen girisinden cagiracagin bir fonksiyon sayesinde 36 Mhz de kostur,
Usarti 115200'e set et B portunun tum pinlerini de output yap desem yapamazmisin?

Eger STM32F4 discovery kitine harici ram takacagim buyuk projeler yapacagim derseniz zaten ZIOS rutinlerini kullanmaniza gerek kalmayacak kadar yol katetmissiniz demektir.

ZIOS, islemciyi 168Mhz de kosacak sekilde yapilandirir ve kullanicinin bu kiti benim ongordugum sekilde kullanacagini varsayar. Bunlar tamamen benim kabullerim.
Kabullerimi begenmeyen ZIOS'u kullanmaz yada main rutininin basina kendi kurulum fonksiyonlarini yazar. Bu basligin ilk mesajina tekrardan gozatarsaniz PC donaniminda yapilan
bazi kabulleri ornek gostermistim. ZIOS da bazi kabuller uzerine kuruldu. Eger bu kabulleri kabullenmez ve donanimnda cok farkli kodlama yapmayi geretiren donanimsal degisikliklere
giderseniz, PC'niz artik eski deyimiyle IBM compatible unvanini yitirecektir.

Fakat Ver 1.04 de sirf senin hatirin icin GInit fonksiyonunu main fonksiyondan once cagiracak eklentiyi yapacagim.
Isteyenler Ginit icine kendi yapilandirma  fonksiyonlarini yazarlar.

Tekrar tekrar soyluyorum;

ZIOS STM32F4 de cok yol katetmisler icin değil, yeni bir seyler yapmak isteyenler icin.

ZIOS.H icindeki C fonksiyonlarini bahsettiginiz olumsuzluklari yok etmek adina ayri bir C dosyasi icine koyabilirsiniz.

Hatta ZIOS.H in icindekileri  main.C nin en tepesine yerlestirin ve H dosyasini silip atin.

ZIOS V1.04

Bu versiyonda onemli bir degisiklik yok. 1.03 de versiyon bilgisi unutkanliktan dolayi 0x102 olarak gelirken bu versiyonda ver() komutunun 0x104 olarak donmesine ozellikle dikkat edildi. (Belki 1.05 de gene unutacagim ve bu kez de 0x104 donecek)

Gerbay'in agir elestirisi uzerine Ver 1.04'de, taa basindan beri kullanicinin elinden almis oldugum(?) SystemInit rutinlerinin, istege bagli olarak yeniden yazilmasina imkan veren Ginit adini verdigim initialize fonksiyonu eklentisi, V1.00 dan bu yana en radikal degisiklik oldu.

(Fakat hemen belirtmeliyim ki init edilmis bir donanimi yeni bastan init etmek, hic init edilmemis bir donanimi init etmekten cok  daha zordur, daha cok dikkatli olmayi gerektirir. Bu yola mumkun oldugunca girmemeye calisin, eger gerekiyorsa registerleri anlatan dokumanlarla cok daha fazla hasir nesir olmak zorunda kalacaksiniz. Bu eklentiyi sirf Gerbayi memnun etmek icin yaptim)

Kendi SystemInit fonksiyonunuzu yazmak isterseniz kodlarinizi Ginit icine yazabilirsiniz.

Bu durumda once ZIOS.LIB donaniminizi init eder daha sonra sizin Ginit kodlariniz ardindan C yapilandirma rutinleri cagrilir ve nihayetinde main fonksiyonunuz isleme alinir.

void Ginit()
{
// Isterseniz kendi init kodlarinizi buraya ekleyebilirsiniz
}

Eger Ginit kodlari kullanmayacaksaniz ici bos Ginit fonksiyonu olusturmaniza gerek yoktur.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

@Gerbay

V1.03 de Ginit fonksiyonumuz yoktu. V1.03 icin, main icinden init etmeyle ilgili  sorun yasayacagimiz bir bir ornek verebilirmisin?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

#37
Hocam bir ust mesajimdaki sorumu cevapsiz biraktin.

-------------------

SD kart uygulamasi yapmak icin gerekli detaylar







http://katalog.we-online.de/em/datasheet/693061010911.pdf
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

aliugur35

#include "Zystem.h"

int main()
{
    while(1)    
      {
         // GPIOC 7 pini 1 ise mavi led yanar                
         if(pininp('C',7)==1) pinset('D',15); else pinclr('D',15); 
      }              
}

arkadaşlar bu ornekte oldugu gibi karta 4 adet input girişi oluşturmak istiyorum.PC7 pini dışında hangi pinleri input için kullanabilirim.

z

#39
Blok şemada gösterilen pinler ve JTAG (PA13, PA14, PB3) pinleri hariç diğer pinleri kullanabilirsin.



Aşağıdaki dokümandan da bu amaçla faydalanabilirsin.

http://www.st.com/st-web-ui/static/active/en/resource/technical/document/user_manual/DM00039084.pdf


Bana e^st de diyebilirsiniz.   www.cncdesigner.com

MCansız

bu sisteme USB haberleşmesi eklemeyi düşünüyormusunuz acaba

z

Şu sıralar bu konu ile uğraşamıyorum. Belki ileride evet.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

emre salman

elinize emeğinize sağlık hocam ben liseden yeni mezun olmuş bir öğrenciyim 6 yıldır piclerle uğraşıyordum parsic kullanmıştım ilk başlarda ve şimdidi ccs c de programlama yapıyorum bir iki haftadır arm işlemcisine geçmeyi düşünüyordum ama cesaret edemiyordum dediğiniz gibi configurasyon ayarlamaları filan gözümü korkutuyordu sizin bu zıos projenizi görünce karar verdim artık başlamaya ama benim şöyle bir korkum var bu işe ilk parsic ile başladığım için kendimi suçluyordum boş yere 1 yılım gitmiş hiç birşey öğrenmedim parsicle diye şimdi zıosla başlarsam daha sonra aynı şeyi düşünürmüyüm diye korkuyorum bildiğiniz gibi parsic son derece sınırlı uygulama üretebileceğimiz ve tek bir kod yazmaç öğrenemeyeceğimiz bir platform sizce benim zıosla başlamam mı daha iyi olur yoksa en baştan öğrenmem mi bu işi meslek olarak düşünüyorum gelip geçiçi veya bir kaç uygulamayla sınırlı olmayacak

z

C bilmiyorsan ZIOS ile basla. Cok kisa bir sure sonra birseyler yapmaya basladiysan C yi de ogrenmeye basladin demektir. Aksi takdirde C'yi mi ogreneceksin yoksa STM'yi mi bocalarsin.

ZIOS tam senin icin. Daha sonra ZIOSu kolayca terkedebilirsin.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

emre salman

Anladım hocam sozunu dinleyip kiti getirtiyorum ama yanlış kiti getirtmekten korkuyorum bana link gonderebilir misiniz