Sosyal Medya  

FacebookTwitterDiggLinkedinRSS Feed
   

   
   

Bir önceki makalemde(Adım Adım ARM Programlama-1); ST firması tarafından üretilen, STM32F10C-EVAL geliştirme kartının programlanması için gerekli program ve kütüphaneleri sizlerle paylaşmıştım. Bu makalemde de, mikroişlemcilerin en temel özelliği olan Giriş-Çıkış (GPIO) birimini tanıtacağım. Yazımın devamını okumadan önce Adım Adım ARM Programlama-1 isimli makalemde yer alan dosyaları indirmenizi tavsiye ederim.

 STM32F10C-EVAL geliştirme kartı üzerinde bulunan STM32F107VC entegresinde 80 adet genel amaçlış giriş-çıkış pini bulunmakta. Bu pinlerin her birini doğru ayarlamaları yaparak, giriş çıkış olarak kullanabilirsiniz. ARM çok geniş bir arabirime ve donanıma sahip olduğu için, üzerinde bulunan bir çok pinin birden fazla görevi de bulunmaktadır. Genel amaçlı giriş çıkış pinlerine GPIO(General purpose Input Output ), aynı pinlerin farklı fonksiyonlarda kullanılmasına da AFIO(Alternate Function  Input Output) adı verilir. Bu yazımda sadece GPIO birimi üzerinde duracağım.

1. GPIO Fonksiyon Tanımları

STM32F107VC mikrodenetleyicisinde GPIO biriminde; 2 adet 32 bitlik port  konfigürasyon kayıt edicisi(GPIOx_CRL, GPIOx_CRH), 2 adet 32 bitlil data kayıt edicisi(GPIOx_IDR, GPIOx_ODR), 1 adet 32 bitlik set-reset kayıt edicisi(GPIOx_BSRR), 1 adet 16 bit reset kayıt edicisi(GPIOx_BRR), 1 adet 32 bit locking kayıt edicisi(GPIOx_LCKR) bulunmaktadır.

Ayrıca; her bir giriş çıkış pinini 7 farklı modda kontrol edebiliyorsun:

  • Input floting: Pini giriş olarak ayarlayıp, dışarıdan hiçbir değer gelmediğinde pin girişinde belirli bir gerilim bulunmaz. Çok hassas sensör devrelerinde veya güç tüketiminin önemli olduğu devrelerde kullanılır. Dijital sinyallerde, en ufak gürültüden bile etkilenerek, pin girişini high ya da low yapabilir. Normal uygulamalarda genellikle tercih edilmez.
  • Input pull-up: Giriş olarak ayarlanan pinden herhangi bir sinyal gelmediğinde, girişi High seviyesinde tutar.
  • Input pull-down: Giriş olarak ayarlanan pinden herhangi bir sinyal gelmediğinde, girişi Low seviyesinde tutar.
  • Analog: Pinin analog sinyalleri işlemesi için kullanılır.
  • Output open-drain: Pinin çıkış bacağı, P-Mos ile N-Mos mosfetleri arasında bulunmaktadır. Eğer çıkışı open-drain ayarlarsanız, pin bacağı GND'ye bağlanır. VDD ile arasında sonsuz empedans oluşur. Bu durumda pini high olarak çıkış vermek için dışarıdan pull-up dirençleri eklemeniz gerekmekte. Bu özellikle, çıkışa bağlanacak olan devre elemanının daha fazla akım çekmesi sağlanabilmektedir. Röle gibi akım gerektiren devre elemanlarını sürmek için kullanılır. Akım mikroişlemciden değil, pull-up direnci üzerinden çekilir.
  • Output push-pull:  Pin bacağı P-Mos mosfeti ile VDD pinine bağlanır. Akım gerektirmeyen işlemlerde, çıkışı logik 1 yapmak için bu mod kullanılır.
  • Alternate function push-pull: Pinin diğer özelliklerini mikroişlemci içerisinden lojik 1 veya lojik 0 olarak ayarlanarak kullanılmasını sağlar.
  • Alternate function open-drain: Pinin diğer özelliklerini, dışarıdan push pull direnci eklenerek kullanılması sağlanır.

 GPIO_temel_yapi.png

GPIOx Bit Konfigürasyon Tablosu

 2. Kayıt Ediciler

       A. Port Konfigürasyon Kayıt Edicisi

STM32F107VC entegresinde, 2 adet 32 bitlik port konfigürasyon kayıt edicisi bulunmaktadır. Portların ilk 8 bitlik kısmı(Low bits) GPIOx_CRL, son 8 bitlik kısmı(High bits) GPIOx_CRH kayıt edicileri ile ayarlanmaktadır. CNFx birimi ile portların giriş-çıkış ayarlarını, MODEx birimi ile de pinlerin çalışma hızları ayarlanmakta.

      

       B. Port Giriş Data Kayıt Edicisi

 

Bu kayıt edici ile giriş olarak ayarlanan pinlerdeki lojik seviyeleri okunmaktadır.

       C. Port Çıkış Data Kayıt Edicisi

 


Bu kayıt edici ile çıkış pinlerinin lojik değerleri okunmaktadır. Ayrıca; istenildiği taktirde bu kayıt edici yardımıyla çıkışa istediğimiz lojik değeri atayabiliriz.

       D. Port Bit Set-Reset Kayıt Edicisi

 

Bu kayıt edici sayesinde çıkış pinlerini lojik 1 veya lojik 0 yapabilirsiniz. İlk 16 bit pinleri lojik 1 yapmak için, son 16 bit de pinleri lojik 0 yapmak için kullanılır. Eğer aynı anda, aynı pin hem lojik 1 hem de lojik 0 olarak ayarlanırsa, öncelik lojik 1'de olacağı için, pin lojik 1 değerini alır. Bu kayıt edicinin bir diğer özelliği; ilgili pin tam lojik 1 veya lojik 0 yapılırken kesme gelirse; öncelikle pini ilgili değere ayarlayıp, daha sonra kesmeye gitmesidir. Çok hassas işlemler için ideal olan bu kayıt edici, sadece yazılabilir olduğu için, çıkış değeri bu kayıt edici üzerinden okunamaz.

       E. Port Bit Reset Kayıt Edicisi

 

Bu kayıt edici ile ilgili pin lojik 0 seviyesine çekilir. Sadece yazılabilir modda olduğu için, ilgili pinin değeri okunamaz. Aynı zamanda; ilgili pin lojic 1 veya lojik 0 olarak ayarlanacağı sırada bir kesme gelirse, önce kesmeye gidilir, daha sonra ilgili pin ilgili değere atanır.

       F. Port Konfigürasyon Kilit Kayıt Edicisi


İlk 16 bitlik kısmı kullanılan bu kayıt edici ile pinlerin port ayarlarını kilitleyebiliriz. 


Bu yazımda STM32F107VC entegresinin GPIO özelliklerini ve kayıt edicilerini anlattım. ARM GPIO birimiyle ilgili uygulama örneğini ARM Programlama - Uygulama 1 - GPIO isimli makalemde bulabilirsiniz. ARM Kesmelerini ve olayları Adım Adım ARM Programlama 3 - Kesmeler ve Olaylar isimli makalemden okuyabilirsiniz.

Bir sonraki yazımda görüşmek üzere, sağlıcakla kalın...

Yorum ekle


Güvenlik kodu
Yenile

   
   
© muhammetefe.com