Merhaba,
Bu yazımızda STM32 geliştirme kartı kullanarak dijital okuma uygulaması yapacağız. Geçtiğimiz çıkış uygulamasına kıyasla daha öz bir yazı olacağını düşünüyoruz. Şimdiye kadar CubeMX ve KEIL arasındaki çalışma mantığını kavrayabilmiş olduğunuzu ümit ediyoruz. Uygulamamıza başlamadan önce bir CubeMX projesi oluşturun ve sonrasında birlikte bir GPIO’ yu “GPIO Input” olarak konfigüre edelim. Bir ek bilgi olarak sizlerle kullanıcı LED’lerinde olduğu gibi, geliştirme kitinizin dokümanında bulunan kullanıcı butonlarını incelemenizi tavsiye ediyoruz. Eğer kullanıcı butonuna sahip değilseniz kullanmak istediğiniz pin konusunda özgür olacaksınız.

“Push-buttons” başlığı altında firmanın sizlere kartın üzerinde sunmuş olduğu kullanıcı butonunun hangi pine bağlı olduğunu görebilirsiniz. Örneğin STM32F767ZI için PC13 pinine bağlı olduğunu Şekil 1’ den anlıyoruz. Bu durumda PC13 pinini GPIO Input olarak konfigüre ederek başlayabiliriz.

PC13 pinini giriş olarak belirlememizin ardından “Project Manager” sekmesinden gerekli ayarlarımızı yapıp kod üretebileceğiz. Şimdi KEIL tarafında işlerin nasıl yürüyeceğini inceleyelim. “Functions” sekmesi içerisinde projemize dahil edilen “gpio.c” dosyasının fonksiyonlarına göz atacak olursanız, daha önce keşfettiğiniz üzere, GPIO fonksiyonlarını göreceksiniz. Okuma işlemi yapmayı amaçladığımız için pin durumunu sizlere döndürecek olan okuma fonksiyonunu bulmamız gerekecektir. Burada dikkatimizi “HAL_GPIO_ReadPin” fonksiyonu çekecektir.

Bu menü üzerinden fonksiyon adına tıklayarak küçük bir gezinti yapalım dilerseniz. Burada açılacak olan yeni pencerede “stm32f7xx_hal_gpio.c” dosyasının olduğunu görecek ve tıkladığınız fonksiyonun bulunduğu satırlara götürüleceksiniz. Tabi fonksiyonun içinde neler yaşandığını şu an için anlamayabilirsiniz. Fakat burada dikkat çekmek istediğimiz konu fonksiyonların giriş ve çıkış değerlerine dair bilgi edinebilecek olmanız.

Şimdi bir adım daha atalım ve “HAL_GPIO_ReadPin” fonksiyonunun çıkış değerinin veri tipi olarak gördüğümüz “GPIO_PinState” ‘i seçip, üzerine sağ tıklayıp, “Go to Definition” diyelim.

Karşınıza “enum” yapısıyla tanımlanmış iki adet değer çıkacaktır. Sırasıyla 0 ve 1 değerleri ile tanımlanmış GPIO_PIN_RESET ve GPIO_PIN_SET. Eğer dilerseniz, pin durumunu bir tam sayı içerisinde tutabilirsiniz. Dosyaları biraz kurcalamak adına biz, hali hazırda zaten tanımlanmış olan, GPIO_PinState veri tipiyle “state” adında bir değişken tanımlamakla başlayalım ve main fonksiyonunun içinde bulunan sonsuz döngüde state değişkenine değer olarak “ReadPin” fonksiyonunu atayalım.

Son olarak projemizi “Build” edip, geliştirme kartımızın içine yüklüyoruz. Peki butonu okuyup okuyamadığımız konusunda nereden bilgi edineceğiz? State değerini başka bir çıkış pinine atayarak değerini gözlemleyebilirdik ama şu an sizlerle ileride farklı özelliklerine de değineceğimiz “Debug” işlemine göz atmak istiyoruz. KEIL ana ekranında bulunan “Debug” butonuna tıklayabilir ya da Ctrl+F5 yaparak debug ekranını açabilirsiniz.

Karşınıza çıkacak ekran şu şekilde olacaktır:

State değişkeninin değerini anlık olarak takip etmek için, state değişkenini yazdığımız programdan seçip sağ tıklıyoruz. Ardından “Add ‘state’ to” kısmından state değişkenini “watch” tablolarından birine atıyoruz (Örneğin watch 1). Bu işlemin sonucunda sağ altta watch tablomuz state değişkeni ile birlikte gözükecektir.

Sol yukarıdaki menüden “Run” butonuna basarak ya da kısaca F5 tuşunuzu kullanarak programı başlatabilirsiniz. Butona her basıp çektiğinizde watch tablonuzdan anlık olarak state değişkeninin değerini gözlemleyebilirsiniz. Okuduğunuz state değişkeninin değeriyle farklı uygulamalar yapmayı sizlere bırakıyoruz. ?
Bir sonraki uygulamamızda görüşmek üzere, hoşça kalın!