KEIL ILE STM32F030 GPIO REGISTERLARI

STM32F030 serisi mikrodenetleyiciler adında anlaşılacağı gibi 32-bitlik kelime uzunluğuna sahiptirler.Buda 32 bitlik registerlara sahip olduğunu göstermektedir.Şimdi GPIO(Genel Amaçlı Giriş Çıkış) hakkında bilgi vererek konumuza başlayalım.

GPIO(General Purpose Input Output)

Tüm GPIO birimleri 4 tane 32 bit konfigurasyon registerı,2 tane 32 bit data registerı,1 tane 32 bit set/reset registerı.PortA ve PortB aynı zamanda bir tane kenetleme registerına sahiptir.2 tane de alternatif fonksiyon registerı bulunmaktadır.

Konfigurasyon Registerları:GPIOx_MODER,GPIOx_OTYPER,GPIOx_OSPEEDR ,GPIOx_PUPDR

Data Registerları:GPIOx_IDR and GPIOx_ODR

Set/Reset Registerı:GPIOx_BSRR

Locking(kenetleme) RegisterıGPIOx_LCKR

2 Tane Alternatif Fonksiyon Seçme Registerı:GPIOx_AFRH ve GPIOx_AFRL

GPIO Genel Özellikleri

–Çıkış push-pull veya open-drain olarak ayarlanabilir.

–Çıkış verileri GPIOx_ODR registerına yazılır ve okunur.

–Her pin için çalışma frekansı seçme imkanı vardır.(Buda güç harcanması konusunda önemlidir)

–Giriş durumu float(sonsuz direnç),pull-up(normalde 1),pull-down(normalde 0) veya analog olarak ayarlanabilir.

–Giriş dataları GPIOx_IDR registerında tutulur ve burdan okunur.

–GPIOx_ODR registerındaki bitlere GPIOx_BSRR registerıyla ulaşılabilir.

–GPIOx_LCKR PortA ve PortB için konfigurasyon ayarlarının kilitlenmesini sağlar.Kenetlendikten sonra değiştirelemezler.

–İki clock sinyalinde bir kez çıkışını değiştirme kapasitesi vardır.

GPIO pinlerinin değişik bağlantı şekilleri söyle sıralanabilir;

–Giriş float olarak tanımlanabilir.

–Giriş Pull-up olarak tanımlanabilir.(bu tanımalama yapılırsa pinin değeri normalde lojik 1 olur)

–Giriş Pull-down olarak tanımlanabilir(normalde lojik 0 olur)

–Girişler analog olarak ayarlanabilir.

–Çıkış open-drain veya push-pull olarak ayarlanabilir.Yüksek akım gerektiren uygulamalarda push-pull bağlantı tercih edilir.

–Alternatif fonksiyonlar push-pull,open-drain,pull-up veya pull-down olarak kullanılabilir.

Tüm GPIO pinlerine GPIOx_ODR registerı aracılığıyla 32bit,16bit veya 8 bit olarak erişilebilir.Bu registera bitsel olarak ulaşılmak istenildiğinde GPIOx_BSRR ve GPIOx_BRR registerları devreye girer.BSRR registerı ilgili pini set ederken,BRR registerı ilgili pini resetler.

Aşağıdaki diyagram bir GPIO pinin bağlantılarını göstermektedir.

GPIO_Lojik

GPIOx_MODE Register:Her pin için giriş, çıkış, analog giriş ve alternatif fonksiyon olmak üzere 4 durum söz konusudur.Bu nedenle register içerisinde her pin için en a 2 bite ihtiyaç vardır.Her portta 16 pin olduğu düşünülürse 32-bitlik  GPIOx_MODE registerının tüm bitleri configurasyon için kullanılmaktadır.

00-Giriş      01-Çıkış     10-Alternatif Fonksiyon   11-Analog Giriş

PORTA ve PORTB hariç diğer tüm portlar için registerın default değeri 0x000 0000 dır.PortA ve PortB debug işlemleri için kullanıldığından default değerleri farklıdır.

PORTA=0xA800 0000      PORTB=0x0000 0280

Örnek olarak, portun 0.bitini çıkış, 1.pinini ise analog giriş olarak ayarlamak istersek.Registera yüklememiz gereken değer

0x0000 000D hex sayısına eşittir.D=11 01 0.pin 01, 1.pin 11 olarak ayarlanmış olur.

GPIOx_OTYPER

0-Push-Pull         1-Open-Drain

Çıkış sadece push-pull ve open-drain olarak ayarlanabilmektedir.Bu nedenle 32bit olan GPIOx_OTyper registerının sadece ilk 16 biti kullanılır diğer bitlere müdahale edilmemelidir.

Default değeri ise 0x0000000 dir.Yani değerleri değiştirilmezse tüm çıkışlar Push-Pull dur.

GPIOx_OSPEEDR:

Her portun pinlerine farklı hızlarda çalıştırma imkanı vardır.Buda gereksiz yere fazla güç tüketiminin önüne geçmektedir.

00-2MHz Düşük Hız  01-25MHz Orta Hız  10-50MHz Yüksek Hız  11-Reserved

PortB için default değeri 0x0000 C000 iken diğerleri için 0x0000 0000

GPIOx_PUPDR

00-Float(Pull-up ve Pull-down Bağlantı yok)   01-Pull-up direnci    10-Pull-down direnci    11-Kullanılmıyor

Giriş pinlerinin  ayarlandığı registerdır.Default değerleri ise;

PortA  0x6400 0000   PortB  0x0000 0100  Diğer portlar ise  0x0000 0000

   DATA REGISTERLARI

GPIOx_IDR:Bu register portun giriş verilirini tutar ve sadece okunabilirdir.Pinin 1 mi yoksa 0 mı olduğu bu register ile anlaşılır.

GPIOx_ODR:Pinin çıkış değerini değiştirmek için kullanılan registerdır.Okunup yazılabilen bir registerdır.32 bitlik bir registerdır fakat sadece düşük 16 bit kullanılır,diğer bitler kullanılmamalıdır.

GPIOx_BSSR:Bu register çıkışlarda  bitsel olarak değişiklik yapmak için kullanılır.ODR registerıyla aynı işi yapar fakat ODR registerı bitsel olarak değil bir kelime olarak işlem yapar.İlk 16 bitinde 1 yapılan pin lojik 1 olarak ayarlanır,son 16 bitinde 1 yapılan pin lojik 0 a çekilir.Yani;

BSRR: 0x0002 0001  bu komut BSRR registerına gönderilirse ilk biti lojik 1,2.biti ise lojik 0 yapacaktır.

Konfigüsrasyon Kenetleme Registerı

Adındanda anlaşılacağı gibi bu register bir portun konfigurasyonunun birdahaki resete kadar kilitlenmesini sağlar.Yani kilitleme işleminden sonra herhangi bir değişiklik yapılamaz.32 bitlik bir registerdır fakat ilk 17 bit kilitleme işlemi için kullanılmaktadır.İlk 16 bit hangi pinin kilitleneceğini belirler.Yani 12.bit 1 yapılırsa o portun 12.pini kilitlenir.17. bit ise portu kenetlenio kenetlenmediğinin sorgulanması için kullanılır.Eğer port kenetlenmişse 17.bit 1,kenetlenmemişse 0 olacaktır.Bu registerın ayarlanması yanlışlıkla yapılabilecek kenetlemelerin önüne geçmek için belli bir sıra gerektirir.Bu sırlama şöyledir;

1-)Kilitlemek istedeğiniz pinler 1 yapılır

2-)17.biti 1 yapıp register içine pin değerlerini yaz

3-)17.biti 0 yapıp register içine pin değerlerini yaz

4-)17.biti 1 yapıp register içine pin değerlerini yaz

5-)Registerın içeriğini oku

Yorum bırakın