elektrik port üyelik servisleri elektrik port üyelik servisleri

STM32F103C8 ile Standart Peripheral Library Dersleri |
2. Bölüm

Bu yazımızda mikrodenetleyiciler de temel bilgilerden sonra ilk öğrendiğimiz veya öğrenmeye çalıştığımız GPIO birimi çıkış olarak nasıl kullanacağımızı öğreneceğiz. Peki bunu STM32F103C8 mikrodenetleyici ve Standart Peripheral Library ile nasıl kullanabiliriz? Beraber ilk adım sayılan led yakma ile öğrenmeye çalışalım.



A- A+
21.02.2020 tarihli yazı 6424 kez okunmuştur.

GPIO Nedir ?

Türkçe karşılığı “genel amaçlı giriş/çıkış” olan GPIO  mikrodenetleyicilerin dış dünya ile bağlantı kurmasının yollarından birisidir. Mikrodenetleyicinin bir pinini çıkış olarak ayarlayıp transistör , röle gibi elemanlar ile anahtarlama yapabilir veya led , buzzer gibi dışardaki dünyaya somut olarak mesaj verebiliriz.  Bununla beraber pinimizi giriş olarak kullanıp , pin üzerinde ki gerilim seviyesini algılayabileceğimiz birimdir GPIO.

 
STM32F103 ile Pini Çıkış Tanımlama

Öncelikle; birinci dersimiz de anlattığımız ; proje oluştururken eklememiz gereken kütüphanelerin yanında GPIO kütüphanesini de eklemeliyiz ve projemizi oluşturmalıyız. Projemizi oluşturduktan sonra ilk önce pinimizi tanımlamalıyız. Standart peripheral kütüphanelerinde pin tanımlamaları (stm32f10x_gpio.c) typedef struct yapısında olduğu için pinimizi isimlendirmeliyiz bunu “GPIO_InitTypeDef” ile yaparız.

GPIO_InitTypeDef led;

Daha sonra kullanacağımız portun açılması için kanal tanımlamasını yapmalıyız ki port aktif olsun. Hangi birimi, hangi portu aktif etmek istiyorsak kanal tanımlamasını mikrodenetleyicinin datasheet vasıtasıyla öğrenip aktif etmeliyiz. Resimde de görüldüğü gibi A portunu  APB2 kanalı ile aktif etmemiz gerekir.

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

 


Resim 1  : Kanal Diyagramı

İlginizi Çekebilir: STM32F103C8 ile Standart Peripheral Library Dersleri 1.Bölüm


Daha sonra tanımladığımız değişken ile pin , hız  ve modu  tanımlamalıyız.

led.GPIO_Pin = GPIO_Pin_0;  // A portunun kaçıncı pinini kullanacağımızı tanımladık.

led.GPIO_Speed = GPIO_Speed_2MHz;  // Pini kaç MHz ile kullanacağımızı tanımladık.

Burada  seçtiğimiz MHz kullanağımız pinin ne kadar hızlı sürüleceği , düşen/ yükselen kenarın ne kadar sert olacağıyla ilgilidir. Frekans arttıkça unutmayalım ki daha çok EMI ortaya çıkacaktır.

led.GPIO_Mode = GPIO_Mode_Out_PP;  // Pini hangi modda kullanacağımıız tanımladık.
 
Mod tanımlama kısmında  “ GPIO_Mode_Out_PP” ve “GPIO_Mode_Out_OD” ile iki modda çıkış alabiliriz. Bunlar push pull ve open drain şeklindedir. Son olarak GPIOA birimini belirlenen şekilde başlatmak için GPIO_Init fonksiyonunu kullanırız.

GPIO_Init(GPIOA,&led); 
  
İşte pin tanımlamaları bu kadar. Bundan sonra  main içerisinde A0 pinimizi istediğimiz gibi kontrol edebiliriz. Lojik 1 veya lojik 0 çıkış ile led, buzzer , transistör, optocupler vs. istediğimiz gibi kontrol edebiliriz.
 
Bunun için iki komuta ihtiyacımız var.

GPIO_ResetBits(GPIOA, GPIO_Pin_0);  // Lojik 0 çıkış alınır.

GPIO_SetBits(GPIOA, GPIO_Pin_0);  // Lojik 1 çıkış alınır.


Örnek Proje



 

Resim 2  : Örnek Proje

 
Gelecek dersimiz de GPIO birimini nasıl giriş olarak kullanacağımızı inceleyeceğiz.
 
 
st.com



Yazar: Yasin Tekin


Aktif etkinlik bulunmamaktadır.
ANKET
Endüstri 4.0 için En Hazır Sektör Hangisidir

Sonuçlar