STM32F407 LED’leri Sırasıyla Yakma – ARM Uygulaması

Merhabalar, bu yazımızda yeni bir ARM uygulaması yapacağız ve STM32F407 kartının üzerinde bulunan 4 LED’i sırasıyla yakacağız. Kodların her satırını tek tek açıklayacağım.

Adım 1: LED’leri yakmak için kullanacağımız 2 LED’i yani başta ve sonda bulunan yeşil ve mavi LED’leri anlaşılabilir olması için isimlendirdik.

#define         YESIL           GPIOD_ODR.B12
#define         MAVI            GPIOD_ODR.B15

Adım 2: LED’leri sırasıyla yakacağımız için yönünü tayin etmemiz gerekiyor. Bu nedenle sola ve sağa kaydırma işlemleri için aşağıdaki değişkeni oluşturuyoruz.

YON=0;

Adım 3: LED’lerin çalışıp çalışmadıklarını test edebilmemiz için gerekli test fonksiyonumuzu yazıyoruz. Bu kodları yazmasanız da programınız çalışır ancak LED’lerin çalıştıklarından emin olmak için yazmanızı tavsiye ederim.

void test(){
     GPIOD_ODR|=0x0000F000;
     Delay_ms(1000);
     GPIOD_ODR=0;
}

Adım 4: LED’lerin yanabilmesi için gerekli standart kodlarımızı yazıyoruz.

GPIO_Digital_Output(&GPIOD_ODR,_GPIO_PINMASK_12| _GPIO_PINMASK_13|_GPIO_PINMASK_14|_GPIO_PINMASK_15);

Adım 5: Test fonksiyonumuzu çağırıyoruz ve LED’lerin yanıp söndüklerinden emin oluyoruz.

test();

Adım 6: En başta yeşil ledi yakıyoruz.

YESIL=1;

Adım 7: Sonsuz bir döngü açtık. Eğer yeşil led yanıyorsa YON değişkenine 0 değerini verdik. Bu sayede yönümüzü belirlemiş olduk ayrıca 1 saniyelik gecikme de ekledik. YON değişkeni 1 değilse yani 0 ise bir kez sola kaydırma işlemi yaparak solda bulunan ledi de yaktık.
Yeşil lede karşılık gelen B12, bir kez sola kaydığında B13‘e yani turuncu renge gider. Ve artık turuncu ledi de yakmış olduk.
YON değişkeni hâlâ 0 olduğu için bir kez daha sola kaydırdığımızda B14‘e yani kırmızı renge gider. Ve artık kırmızı ledi de yakmış olduk.
YON değişkeni hâlâ 0 olduğu için bir kez daha sola kaydırdığımızda B15‘e yani mavi renge gider. Ve artık mavi ledi de yakmış olduk. Ayrıca B15’e geldiğimiz için YON değişkeni de artık 1 oldu ve yönümüz değişti.

while(1){
          if(YESIL)YON=0;
          if(MAVI)YON=1;
          Delay_ms(1000);
          if(!YON) GPIOD_ODR<<=1;
          else GPIOD_ODR>>=1;
}

Kodların Tamamı:

#define         YESIL           GPIOD_ODR.B12
#define         MAVI            GPIOD_ODR.B15
YON=0;
void test(){
     GPIOD_ODR|=0x0000F000;
     Delay_ms(1000);
     GPIOD_ODR=0;
}
void main() {
     GPIO_Digital_Output(&GPIOD_ODR,_GPIO_PINMASK_12| _GPIO_PINMASK_13|_GPIO_PINMASK_14|_GPIO_PINMASK_15);
     test();
     YESIL=1;
     while(1){
              if(YESIL)YON=0;
              if(MAVI)YON=1;
              Delay_ms(1000);
              if(!YON) GPIOD_ODR<<=1;
              else GPIOD_ODR>>=1;
     }
}

ARM Programlama ile ilgili diğer uygulamalara gitmek için lütfen tıklayınız.