STM32 ile ARM Programlama – GPIO Birimi ve Yazmaçları

Önceki makalelerde HAL kütüphanesi ile donanıma pek girmeden temel giriş ve çıkış fonksiyonlarını kullanmıştık. Bu fonksiyonların tamamı hal kütüphanesinin referans kılavuzunda yer almaktaydı. Aslında bu referans kılavuzunu daha iyi anlamak için mikrodenetleyicinin donanımı üzerinde çalışmamız iyi olur. Donanım ile yazılımı beraber götürürsek çok daha sağlam bir temel edinmiş oluruz. Ne kadar iyi yazılım bilsek de donanım çalışmadığımız için donanım yönümüz eksik kalacaktır. Biz hem donanımı ve hem de yazılımı beraber götürerek zor ama sağlam bir yol izlemek istiyoruz. Ne kadar HAL kütüphanesi kullanacak olsak da yeri geldiğinde donanım seviyesine inmemiz gerekebilir. Assembly seviyesinde çalışmak çoğu zaman şart olmasa da yazmaç seviyesinde gömülü C ile çalışmak bizim için oldukça büyük bir avantaj olacaktır.

STM32F3 serisinin referans kılavuzunda HAL kütüphanesinin kılavuzunda yer almayan pek çok bilgi mevcuttur. Aslında bu kılavuzu okuduktan sonra HAL kütüphanesini kullanırsak kütüphane fonksiyonlarını daha rahat anlayacağımız gibi fonksiyonların iç yapılarına kadar girme fırsatı yakalarız. Yani fonksiyon artık bizim için sadece parametre alan ve kullanılan bir komutun ötesinde olmuş olur. Şimdi RM0316 kodlu referans kılavuzunu açalım ve temel giriş ve çıkış birimine bakalım.

Temel Giriş ve Çıkış Birimi (GPIO)

Burada her genel maksatlı I/O portuna ait dört adet 32-bit ayar yazmacı bulunduğunu okuyoruz. Fark ettiyseniz HAL kütüphanesinde de bir yapı tipi tanımladığımızda dört ayrı değişkene değer yükleriz. Aynı zamanda iki adet 32-bit veri yazmacı, bir adet 32-bit set/reset(bir ve sıfır) yazmacı, bir adet kilit yazmacı ve iki adet alternatif fonksiyon yazmacı yer almaktadır. Bu yazmaçların adı ve işlevi kısaca aşağıda listelenmiştir.

MODER  – Mod Yazmacı olarak giriş ve çıkış tanımlamasında kullanılır.

OTYPER – Çıkış modu olarak Push-Pull (Klasik giriş ve çıkış) ve Open Drain (Açık akıntı) modunu belirleyen yazmaçtır. Bunlar mikrodenetleyicinin içindeki mosfetlerle sağlanır.

OSPEEDR – Hız modlarını belirleyen yazmaçtır. Yüksek, orta ve düşük olmak üzere üç ayrı hız seçeneği vardır.

PUPDR – Pull-UP ve Pull-Down yazmacıdır. Pull-Up, Pull-Down ve normal olarak üç ayrı seçenek vardır.

IDR – Dijital giriş veri yazmacıdır. Düğme okuma işlemleri gibi giriş işlemlerinin değerini bu yazmaçtan okuruz.

ODR – Dijital çıkış veri yazmacıdır. Led yakıp söndürme gibi işlemleri buradan yaparız.

BSRR – Tek bit işlem yazmacıdır. Bitleri bir (1) veya sıfır (0) yapar.

LCKR – Bit kilitleme yazmacıdır. Bitlerin durumu tek tek kilitlenebilir.

AFRL – Alternatif fonksiyon alt yazmacıdır.

AFRH – Alternatif fonksiyon üst yazmacıdır. Her ayak sadece giriş ve çıkış olarak kullanılmayıp başka birimler tarafından da kullanılır. Buna alternatif fonksiyon denir.

BRR – Bit Reset Yazmacıdır.

Arduino programlarken sadece digitalWrite, digitalRead ve PinMode fonksiyonlarını temel giriş ve çıkışta kullanıyorduk. AVR’de ise DDR, PORT ve PIN yazmaçları olarak toplamda üç adet yazmaç vardı. Burada bu kadar çok yazmacın olması mikrodenetleyicinin gelişmişliğini gösterse de programlaması karmaşıklıktan dolayı kolay olmamaktadır. Gelişmiş bir mikrodenetleyiciyi programlıyorsak mecburen bunları öğrenmek zorundayız.

Şimdi GPIO biriminin kılavuzda yazdığı gibi madde madde özelliklerini sıralayalım.

  • Çıkış durumları : push-pull veya open drain ve beraberinde pull-up/down
  • Her bir giriş çıkış için hız seçimi.
  • Giriş durumları: açıkta, pull-up/down veya analog
  • Giriş veri yazmacı.
  • Bit set ve reset yazmaçları (Bit bazlı erişim için)
  • Kilitleme (dondurma) mekanizması
  • Analog fonksiyon
  • Alternatif fonksiyon seçim yazmaçları
  • Her iki saat çeviriminde çalışan hızlı toggle(açıp kapama)
  • Multiplexleme ile hem giriş çıkış ve hem çevre birimi için kullanılabilen ayaklar.

Temel giriş ve çıkış ayakları yazılım tarafından belli modlara programlanabilmektedir. Bu modların listesi aşağıda verilmiştir.

  • Açık Giriş
  • Pull-up Girişi
  • Pull-down Girişi
  • Analog
  • Open-drain çıkış (pull-up ve pull-down destekli)
  • Push-pull yani normal çıkış (pull-up ve pull-down destekli)
  • Alternatif fonksiyon push-pull ya da pull-up/down destekli
  • Alternatif fonksiyon open drain modunda ve pull-up/down destekli.

Open Drain burada yeni gördüğümüz bir terimdir. Push-Pull bizim bildiğimiz klasik giriş ve çıkış fonksiyonu olsa da open drain mosfetlerden gördüğümüz üzere açık akıntıdır. Yani mosfetin drain ucu açıktadır ve daima sıfır (0) çıkışı alınmaktadır. Ayak sadece dışarıdan akım çekebilir. Dışarıya akım veremez.

Temel giriş ve çıkış port bitinin basit yapısı şu şekildedir.

Bazı ayaklar 5 volt gerilime toleranslıdır. Bunu mikrodenetleyicinin teknik veri sayfasından öğrenebiliriz. Mikrodenetleyicilere göre değişkenlik göstermektedir.

Referans kılavuzunda her bir yazmaç ve özellik için başlıklar halinde bilgi alsa da biz bu kadarını yeterli görüyoruz. Sonraki yazıda yazmaçları ayrıntılı olarak açıklayacağız ve sonrasında bu yazmaçlar üzerinden programımızı yazacağız.

Bizi Facebook grubumuzda takip etmeyi unutmayın. Bilgili ve öğrenmeye hevesli bir topluluk oluşturmak istiyoruz.

https://www.facebook.com/groups/1233336523490761/

UYARI!!

 

Gökhan Dökmetaş

Bilgi Teknolojileri Uzmanı

You may also like...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.