RESET VE SAAT KONTROL ÜNİTESİ (RCC)
Bu üniteyle ilgili çok fazla ayrıntı var. Şimdilik sadece IO birimlerinin ayarlarını inceleyeceğiz.
İşlemcimiz üzerinde her bir çevrebiriminin saat kaynağı ayrı ayrı kontrol edilebiliyor. Böylelikle
kullanılmayan çevrebirimleri kapalı tutarak güç tüketimi minimum seviyede tutabiliyoruz.
Aynı zamanda her bir çevrebirimi ayrı ayrı başlangıç durumuna(reset) getirilebiliyor.
RCC_APB1RSTR, RCC_APB2RSTR kaydedicileri çevrebirimlerini resetlemek için kullanılıyor.
RCC_AHBENR, RCC_APB2ENR, RCC_APB1ENR kaydedicileri çevrebirimlerinin saat kaynaklarını kontrol etmek için kullanılıyor.
İşlemcimizin IO hatlarını kullanabilmek için öncelikle IO modüllerinin saat girişlerini aktif hale getirmemiz lazım. Onun ardından IO yönlerini (giriş-çıkış) ayarlamalıyız.
Giriş çıkış birimlerinin saat girişleri RCC_APB2ENR kaydedicisiyle ayarlanıyor:
Örneğin C portunu aktif hale getirmek istediğimizde:
RCC->APB2ENR |= 1 << 4
satırıyla APB2ENR kaydedicisinin 4.bitini 1 yapıyoruz. Ardından IO portunun giriş-çıkış yön ayarlarını yapacağız. Önce IO portlarını tanıyalım:
IO Portları:
İşlemcinin IO portları PA ,PB, PC, PD, PE olarak sıralanıyor. Discovery kartında A,B,C,D portları bulunuyor. Her bir portta 16 pin var. Portlarla ilgili işlemler 32 bitlik kaydedicilerle yapılıyor. Portlar Analog veya dijital giriş çıkış olarak ayarlanabiliyor. Aynı zamanda Open-drain, push-pull çıkış tipleri de mevcut.
Port Konfigurasyon Kaydedicisi (düşük): GPIOx_CRL (x burada A,B,C,D,E portlarından birisini temsil ediyor)
Port Konfigurasyon Kaydedicisi (yüksek): GPIOx_CRH (x burada A,B,C,D,E portlarından birisini temsil ediyor)
Düşük kaydedici ile porta ait 1-8 arası pinlerin, yüksek kaydedici ile porta ait 9-16 nolu pinlerin ayarlamaları yapılıyor.
Bu kaydediciler ile ilgili portlara ait pinlerinin yön ayarları yapılıyor. Her bir pine ait 2 bit CNF, 2 bit Mode olmak üzere 4 bitlik değer bulunuyor. CNF grubu pinin giriş – çıkış tipini belirlerken, Mode grubu çıkış olarak ayarlanan pinlerin IO çıkış hızı seçimini yapmaya yarıyor.
[ad#ad-1]
GPIOx_CRL Kaydedicisi:
CNFy[1:0] (y = 0…7)
00: Analog giriş
01: Boşta giriş (reset sonrası bu durumda oluyor)
10: pull-up / pull-down giriş
11: rezerve(kullanılmıyor)
MODEy[1:0] mode bitleri (y: 0…7)
00: Giriş modu (reset sonrası bu durumda)
01: çıkış modu maksimum 10 mhz
10: çıkış modu maksimum 20 mhz
11:çıkış modu maksimum 50 mhz
GPIOx_CRH Kaydedicisi:
CNFy[1:0] (y = 8…15)
00: Analog giriş
01: Boşta giriş (reset sonrası bu durumda oluyor)
10: pull-up / pull-down giriş
11: rezerve(kullanılmıyor)
MODEy[1:0] mode bitleri (y: 8…15)
00: Giriş modu (reset sonrası bu durumda)
01: çıkış modu maksimum 10 mhz
10: çıkış modu maksimum 20 mhz
11:çıkış modu maksimum 50 mhz
[ad#ad-1]
Port Giriş kaydedicisi (GPIOx_IDR) (x=A..G)
Bu kaydedici ile portun giriş değeri okunabilir. 0-15 arası bitlerin her biri ilgili pine ait giriş değerini veriyor. Bu porta yazma işlemi yapılmıyor.
Port çıkış kaydedicisi (GPIOx_ODR) (x=A..G)
Bu kaydedici ile ilgili porta çıkış değeri atanabilmektedir. Bu kaydediciye bit erişimi yapılamıyor. Yani çıkış değerini 16 bit birden yazmak gerekiyor. Tek tek bitlere erişim GPIOx_BSRR kaydedicisiyle yapılıyor.
Port bit set / reset kaydedicisi GPIOx_BSRR ( x = A…G)
Bu kaydedicinin ilk 16 biti ile ilgili portun 16 pin bitleri ayrı ayrı 1(set) yapılabiliyor. 17-32 bitleri ile de ilgili portun pinleri sıfırlanıyor. Eğer ilgili pine ait hem set hem reset biti 1 yapılırsa set durumunun önceliği var. Bu durumda ilgili pin 1 oluyor.
Port bit reset kaydedicisi GPIOx_BRR ( x = A…G):
Bu kaydedicinin ilk 16 biti ile ilgili portun 16 pin bitleri ayrı ayrı 0 (reset) yapılabiliyor.
Port Konfigurasyon Kilidi Kaydedicisi (GPIOx_LCKR) (x=A..G)
Bu kaydedici, giriş-çıkış portlarının ayarları bir kere yapıldıktan sonra bir daha yanlışlıkla değiştirilmesini önlemek için kilitlemeye yarıyor. Kilitleme mekanizması şu şekilde çalışıyor:
– Konfigurasyonu kilitlenmek istenen pinlere ait LCKx biti set edilir.
– LCKK bitine sırasıyla şu işlemler uygulanır: 1 Yazma, 0 yazma, 1 yazma. Kilidin aktif hale geçti ise sırasıyla 2 okuma işlemi yapıldığında 0 ve 1 değerleri okunacaktır.
Bu işlemler sonunda IO pinleri konfigurasyonu kilitlenmiş olur ve ancak bir sonraki resetten sonra değiştirilebilir.
IO kullanımı için işlem adımlarını tekrar hatırlayacak olursak:
1- İlgili IO portunun saat girişini aktif hale getiriyoruz. (RCC_APB1ENR , RCC_APB2ENR )
2- İlgili IO portunun pinlerinin yön ayarlarını yapıyoruz (giriş veya çıkış, GPIOx_CRL,GPIOx_CRH)
3- IO erişimi için ilgili kaydedicilere erişiyoruz ( GPIOx_IDR, GPIOx_ODR, GPIOx_BRR ,GPIOx_BSRR )
Buraya kadar STM32F100RB işlemcimizin IO portlarına ait kaydedicileri tanıdık. Bundan sonra Blinky projesinde bu kaydedicilerin nasıl kullanıldığını göreceğiz.
[ad#ad-1]
Teşekkürler stm32f4 ben yeni başladım.microcontroller konusunda tavsiye edebileceğiniz kitap var mı ? ben Keil da yazıyorum siz eclipse de yazıyorsunuz sanırsam ?
Eğer Türkçe kitap arıyorsanız bildiğim kadarıyla bu konularda yok. Ben de bu yazıları yazarken Keil kullanmıştım ama Eclipse de kullanabilirsiniz. Programlama açısından ortam pek farketmiyor.