ARM – Not2: STM32F4DISCOVERY Led Yak-Söndür Uygulaması.

Yayınlandı: 01 Ağustos 2012 / ARM STM32F4DISCOVERY Programlama...
Etiketler:, , , , , ,

   STM32F4DISCOVERY kitimizde bulunan mikrodenetleyici olan STM32f407VG’nin ne yazıkki proteusta herhangi bir modeli bulunmuyor. Bu yüzden ISIS ortamında yazdığımız programları simüle etme gibi bir şansımız yok. Bu yüzden ya bu işlemciyi barındıran bir kite sahip olacağız, ya da kendimiz bu işlemciyi bir kart üzerine monte ederek kendimize bir geliştirme boardu tasarlayacağız. Şu anda  benim elimde STM32F4DISCOVERY kiti bulunduğu için örneklerimi bu kit üzerinden vereceğim.

İlk uygulamamız mikrodenetleyici programlamaya başlangıç aşamasında klasikleşmiş olan led blinking uygulaması olacak. Unutmayalım her şey bir ledi yakıp söndürmek ile başlar bu dünyada. . Dersimizde giriş çıkış işlemlerini mikroC’nin bize sunmuş olduğu giriş çıkış kütüphanelerini kullanarak işlem yapacağız.

STM32F4DISCOVERY kitindeişlemcinin pinlerine bağlı olan 4 adet farklı renkte led bulunmakta. Bu ledler D portunun 12., 13., 14. ve 15. pinlerine bağlanmış bulunmaktalar. O yüzden ilk uygulamamızda D portunu çıkış olarak tanımlayacağız. ARM işlemcilerin PIC işlemcilerden bir farkı, her çevrebirim için saat kaynağını kendimizin kontrol edebilmesi. Bu sayede önemli ölçüde güç kaybı engellenmiş oluyor. Portları giriş çıkış için kullanabilmek için de onları besleyen saat frekansını aktif etmemiz gerekmekte.
Ayrıca giriş çıkış portları 4 farklı hızda çalıştırılabiliyor. Bu durum datasheette belirtilmiş. İsterseniz şimdi kodlarımıza göz atarak bahsettiğimiz şeylere daha yakndan bakalım.

void main() {
char i=0;
GPIO_Digital_Output(&GPIOD_ODR, _GPIO_PINMASK_12 | _GPIO_PINMASK_13|_GPIO_PINMASK_14|_GPIO_PINMASK_15); //D portunun  12,13,14,ve 15. bitleri çıkış
while(1)
{
GPIOD_ODR=0x00001000; //GPIOD'nin 12. pini 1 yapılıyor.
for(i=0;i<3;i++)           //GPIOD'nin içeriği 3 kez sola kaydırılıyor, böylece 13,14 ve 15. pinler sırayla yanıyor.
{
Delay_ms(100);
GPIOD_ODR<<=1;
}
delay_ms(500);
for(i=0;i<3;i++) //GPIOD'nin içeriği 3 kez sağa kaydırılıyor, böylece 13,14 ve 15. pinler sırayla tersten yanıyor. { Delay_ms(100); GPIOD_ODR>>=1;
}
delay_ms(500);
GPIOD_ODR=0;  //GPIOD'nin tüm pinleri sıfırlanıyor.
for(i=0;i<10;i++)
{
GPIOD_ODR=~GPIOD_ODR;//GPIOD 10 kez yakılıp söndürülüyor.
delay_ms(50);
}
}
}

Bu kodlarda geçen GPIOD_ODR isimli register PORTD’nin değer yükleme registerıdır. bu register ile ilgili daha detaylı bilgi için STM32f407VG’nin reference manual’ini incelemenizi öneririm. Reference Manual’e buradan ulaşabilirsiniz.

GPIO_Digital_Output" komutu ile işlem yapıldığında port giriş çıkış hızı default değer olan en düşük hız 2MHZ'e ayarlanmaktadır.

İşlemcimiz bu notumuzda dahili osiltörü kullanılarak 16MHZ’de çalıştırıldı. İlerleyen uygulamalarımızda işlemciyi en yüksek hızı olan 168MHz’de koşturacağız.
Şu anda ilk notumuz olmasından dolayı PLL ayarlarından bahsetmiyorum. Bir sonraki uygulamamızda PLL ayarlatının nasıl yapılacağını ve işlemcimizi saat hızının nasıl ayarlanacağını göstereceğim.

Programımızı derledikten sonra , başka hiçbir araca veya programa gerek kalmadan , STM32F4DISCOVERY kitimizin üzerinde bulunan ST-LINK programlayıcı aracılığı ile hex kodumuzu mikroC üzerinden işlemcimize yükleyebiliyoruz. Bunun için “build and program” ikonuna tıklamamız yeterli. Tabiki mini usb aracılığı ile kitimizi bilgisayarımıza bağlamamız ve ST-LINK driverını yüklememiz şart.

Programın çalışan videosunu aşağıdan görebilirsiniz.

Buradan proje dosyalarını indirebilirsiniz.

Sorularınızı alt bölümden bana iletebilirsiniz. İyi çalışmalar.

yorum
  1. YILDIRIM dedi ki:

    konuyu takip ediyorum hocam guzel gidiyor tek bir rica olucam komutlarin yanindaki aciklamalari biraz daha detayli anlatirsaniz cok sevinirim

  2. uytdf dedi ki:

    wrong sourcecode

  3. Hakan Erdöl dedi ki:

    Öncelikle emeğinize sağlık. Kodlarda 2. for’dan sonraki parantezin yönü yanlış olmuş sanırım bir de en sona bir parantez kapatması daha gerekiyor. Tekrar emeğinize sağlık bu konunun devamını görmek dileğiyle

  4. Emre dedi ki:

    Teşekkür ederim faydali bir yazı olmuş.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s