STM32F407 Butona Tıklandığında LED Yakma – ARM Uygulaması

STM32 kartı ile artık butonları kullanmaya başlayabiliriz. Kartın üzerinde bulunan her bir LED için bir buton bulunmaktadır. Her bir butona tıklandığında o butona karşılık gelen LED’i yakalım. Kodları parça parça açıklayarak veriyorum. Yazının sonunda kodun tamamına ulaşabilirsiniz.

Adım 1: Kullanacağımız 4 LED’i daha anlaşılabilir olması için isimlendirdik.

#define         YESIL           GPIOD_ODR.B12
#define         TURUNCU         GPIOD_ODR.B13
#define         KIRMIZI         GPIOD_ODR.B14
#define         MAVI            GPIOD_ODR.B15

Adım 2: Aynı şekilde kullanacağımız 5 butona da isim verdik. BUTON0 mavi , BUTON1 turuncu, BUTON2 kırmızı ve BUTON3 ise mavi LED’e karşılık geliyor. BUTON4 ise tüm LED’leri aynı anda kontrol edebilmek için bulunuyor.

#define         BUTON0          GPIOB_IDR.B1
#define         BUTON1          GPIOA_IDR.B13
#define         BUTON2          GPIOA_IDR.B14
#define         BUTON3          GPIOC_IDR.B4
#define         BUTON4          GPIOC_IDR.B5

Adım 3: Test fonksiyonumuzu yazıyoruz. Bu sayede asıl kodumuz çalışmadan önce tüm LED’lerin çalıştığından emin oluyoruz.

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

Adım 4: Giriş işlemi yani butona tıklanması ve çıkış işlemi yani LED’lerin yanması için gerekli kodları yazarak butonları ve LED’leri programımıza tanıtıyoruz. Ayrıca test fonksiyonunu da burada çalıştırıyoruz.

GPIO_Digital_Output(&GPIOD_ODR,_GPIO_PINMASK_12 |_GPIO_PINMASK_13 | _GPIO_PINMASK_14 | _GPIO_PINMASK_15);
     GPIO_Digital_Input(&GPIOB_IDR,_GPIO_PINMASK_1);
     GPIO_Digital_Input(&GPIOA_IDR,_GPIO_PINMASK_13 |_GPIO_PINMASK_14);
     GPIO_Digital_Input(&GPIOC_IDR,_GPIO_PINMASK_4|_GPIO_PINMASK_5);
     test();

Adım 5: Sonsuz bir döngü yarattık ve her buton tıklaması için 150 ms’lik gecikme ekledik. Her bir butona karşılık gelen LED için yakma işlemini gerçekleştiriyoruz. BUTON4’e tıklandığında ise tüm LED’leri yakma işlemini sağlıyoruz.

while(1){
     Delay_ms(150);
              if(BUTON0){
                        YESIL=~YESIL;
              }
              if(BUTON1){
                        TURUNCU=~TURUNCU;
              }
              if(BUTON2){
                        KIRMIZI=~KIRMIZI;
              }
              if(BUTON3){
                       MAVI=~MAVI;
              }
              if(BUTON4){
                      GPIOD_ODR=~GPIOD_ODR;
              }
}

Kodların Tamamı:

#define         YESIL           GPIOD_ODR.B12
#define         TURUNCU         GPIOD_ODR.B13
#define         KIRMIZI         GPIOD_ODR.B14
#define         MAVI            GPIOD_ODR.B15
#define         BUTON0          GPIOB_IDR.B1
#define         BUTON1          GPIOA_IDR.B13
#define         BUTON2          GPIOA_IDR.B14
#define         BUTON3          GPIOC_IDR.B4
#define         BUTON4          GPIOC_IDR.B5

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);
     GPIO_Digital_Input(&GPIOB_IDR,_GPIO_PINMASK_1);
     GPIO_Digital_Input(&GPIOA_IDR,_GPIO_PINMASK_13 |_GPIO_PINMASK_14);
     GPIO_Digital_Input(&GPIOC_IDR,_GPIO_PINMASK_4|_GPIO_PINMASK_5);
     test();
     while(1){
     Delay_ms(150);
              if(BUTON0){
                        YESIL=~YESIL;
              }
              if(BUTON1){
                        TURUNCU=~TURUNCU;
              }
              if(BUTON2){
                        KIRMIZI=~KIRMIZI;
              }
              if(BUTON3){
                       MAVI=~MAVI;
              }
              if(BUTON4){
                      GPIOD_ODR=~GPIOD_ODR;
              }
     }
}