Sıfırdan STM32F0 Dersleri – Clock Ayarları ve GPIO Kullanımı

  • 3 sene önce, Baran EKREM yazdı.
  • 0 Yorum
  • 484 Kişi Okudu

stm32f0discoveryGiriş kısmından sonra bu yazıda işlemcimizin çalışma frekansı ayarlarını yaptıktan sonra GPIO kullanımını anlatacağım.Öncelikle yapmamız gereken projemizin src klasörü altında bulunan src\system_stm32f0xx.c dosyasını açıp RCC(Reset And Clock Cofiguration) ayarlarını yapmak.Burada yapacağımız ayar işlemcimizin harici mi(HSE = High Speed External – Yüksek Hızlı Harici) yoksa dahili(HSI = High Speed Internal – Yüksek hızlı Dahili) kristalden mi çalışacağını belirtmek.Biz HSI ya göre ayarları yapacağız çünkü STM32F0 Discovery kitte harici kristal takılı değil.Fakat pinler mevcut isterseniz siz lehimleyebilirsiniz.(8MHz)
Şimdi system_stm32f0xx.c dosyasında gerekli tanımlamaları yapalım.Öncelikle PLL kaynağımızı belirten bir makro tanımlayalım.Biz HSI tanımlamasını aktif ediyoruz.

Clock ayarları SetSysClock fonksiyonunda yapılıyor.

Tabi her işlemciye göre register ayarları farklılık göstereceğinden bu kısma dikkat etmek de fayda var.Lakin başka bir işlemci kullanıyorsanız mesela STM32F4 olsun bu ayarlar farklılık gösterecektir. Bunun için datasheet den RCC ayarlarını takip ederek kendiniz yapacaksınız yada internetten HSI ya göre ayarlanmış system_stm32f0xx.c dosyasını bulacaksınız.İşlemcinin hız ayarları bu kadar artık uygulama yapmaya başlayabiliriz.

İşlemci hızı ve clock ayarlarını yaptıktan sonra artık GPIO fonksiyonları ile ilk ledi yakabiliriz.Öncelikle bir portu kullanabilmemiz için o porta Clock vermemiz gerekir.Bir nevi uyandırma enerjileme diyebiliriz.Bu kısımları SPL->src altında bulunan stm32f0xx_gpio.c dosyasını açıp en üstteki açıklamada “How to use this driver ” kısmından adımları takip ederek öğrenebiliriniz.

Bunun için RCC_AHBPeriphClockCmd fonksiyonu kullanılıyor.Tabi bu fonskiyonlar işlemciye göre değişebilir biz STM32F0 a göre ilerliyoruz.Bu fonksiyon 2 parametre alır.Bunlar port ismi ve durumdur.Biz A potunun 0.bitini High yapalım.

Port isimleri şu şekilde tanımlanmıştır.

Durum olarak ENABLE yani yazdığımız port’u clock vererek aktif hale getiriyoruz.

Şimdi yapmamız gereken bu portun ayarlarını yapmak. Bunun için bir struct tanımlıyoruz.

Bu yapıya ayarları yükleyeceğiz. Toplamda 5 ayar var.

  • GPIO_Pin,
  • GPIO_Mode
  • GPIO_Speed
  • GPIO_OType
  • GPIO_PuPd

GPIO_Pin : Hangi pinleri kullanacağımız seçmemize yarıyor.
Örneğin 0.biti kullanmak istesek şöyle yapacaktık;

GPIO_Mode : Belirtilen pinlerin hangi modda çalışacağını ayarlıyor.4 Mod mevcut.
Giriş, Çıkış, AF, AN (Alternatif fonksiyon = SPI, UART vb, AN = Analog Giriş)

LED uygulaması için Çıkış seçiyoruz.

GPIO_Speed : Pinin çalışma frekansını belirler.

Başlangıç için 2 Mhz verebiliriz. Unutmayın yüksek hız yüksek enerji tüketimi !

GPIO_OType : Çıkış bağlantısı denenebilir. 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. Yüksek akım gerektirmediğinden PP = Push-Pull kullanıyoruz.

Son olarak GPIO_PuPd : Çıkışa dahili olarak Pull-Up yada Pull-Down direnci eklememizi sağlıyor.Örneğin buton kullanımların da işimize yarayacak bir özellik.Ama şuan için gerek yok.

3 Değeri vardır;

Ve son olarak dahili direnç seçmiyoruz.

Şimdi bu ayarların bulunduğu structure’ın adresini kullanacağımız porta göndermemiz gerekiyor.Bunun için GPIO_Init fonksiyonu ile ayarları porta yüklüyoruz.Tabi ayarları yüklemek için pointer adresini veriyoruz.
1.Parametre : Port, 2.Parametre : Structure adresi

Pin artık işleme hazır.Şimdi bu pine seri olarak 220 Ohm direnç ile bağlı olan ledi high yapalım.

Şimdi buton kullanımı işleyelim.Butona bastığımızda yanan bıraktığımızda sönen LED uygulaması yapalım.
Öncelikle Clock ayarlarını kontrol edelim.Daha sonra main dosyamızda LED ve buton ayarlarını yapmaya başlayalım.Öncelikle LED için önceki uygulamadaki kodları kullanabiliriz.Öncelikle şunu belirtmekte fayda var.Bu kitte kullanabileceğimiz 2 tane LED ve 1 tanede buton mevcut.Kitin şemasıan bakarak bunları hangi pine denk geldiklerini görebiliriz.Buton A portunun 0.bitinde bulunuyor.Bu pini giriş olarak seçip pull-down olarak ayarlıyoruz.Ayarları yapıyoruz daha sonra C portunun 8.bitin deki mavi renkli ledi çıkış yapıyoruz.Bu uygulamada 2 port kullanıldığından A ve C portlarına clock vermeyi de unutmuyoruz.

 

 

Bir Yorum Yazın