Teknoloji

STM32F – Giriş

1 This article was prepared in Turkish , good studies.

 

Herkese merhabalar , sizde biliyorsunuz ki bir yazılım öğrenirken en temel en basit konudan ve örnekten başlanır bizde sizlere burada bunu yapacağız ama daha önce kullanacağımız program hakkında ve daha sonra kütüphaneler hakkında size bilgi vereceğim.

Hadi incelemeye başlayalım.

————————————————————————————————–

Programların yüklenmesi ve kurulumu için  [button text=”Tıkla” new_tab=”” size=”small” icon=”” url=””]

———————————–  Kütüphane İnceleme  ——————————–

 

———————————————  Giriş  ——————————————–

İlk olarak temel kütüphanemizi ekledik.

#include "stm32f10x.h"  

Dahaz sonra aşağıda gördüğümüz fonksiyonu ‘int main()’  fonksiyonunun içerisinden çağıracağız , bu fonksiyon bizlere Genel Amaçlı Giriş Çıkış işlemleri yapmamızı sağlayacaktır .  GPIO(GENERAL PURPOSE INPUT OUTPUT )  yani  Genel Amaçlı Giriş Çıkış işlemleri. Fonksiyon adından da anlaşılacağı gibi bizler kartlarımıza bir kompanent (sensör/led/buton vs.) koyup sonra koyduğumuz kompanente göre  temel ayarları gerçekleştireceğimiz yerdir burası.

void gpioConfiguration(){
GPIO_InitTypeDef GPIOInitStructer;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIOInitStructer.GPIO_Mode = GPIO_Mode_Out_PP;
GPIOInitStructer.GPIO_Pin = GPIO_Pin_2;
GPIOInitStructer.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIOInitStructer);
}

 

Şimdi sıra sıra açıklayalım;

GPIO_InitTypeDef GPIOInitStructer; 

Kütüphanedeki structure yapısını çağırıp temsil edecek bir değişken  belirliyoruz.
Ana yapı   :  GPIO_InitTypeDef
Değişken  :  GPIOInitStructer

Kartımızda/işlemcimizde hangi portu hangi faz  hatına bağlı? Evet size soruyorum , bizler hangi faz hattını aktif edeceksek kulandığımız işlemcinin yada kartın datasheedine bakıyoruz.  Aşağıda bir diyagram göreceksiniz   bu diyagram STM32F100RB geliştirme kartına ait.

 

 

[button text=”Tıkla ve Dökümana Git” new_tab=”” size=”medium” icon=”” url=”https://drive.google.com/file/d/12XjzaJWOmaomDUyWb6ZHoofwiLZ32VX2/view?usp=share_link”]

 

 

 

 

8. sayfaya gelin orada size faz hattı hakkında birşeyler diyeceğim.

 

 

 

Burdada görüleceği gibi GPIO port B –> APB2 Hattına gitti.
Dökümandan da anlaşılacağı gibi 2 farklı faz hatı var sizler  yapacağınız projede  hangi faz hattını aktif edecekseniz gelip burada onları aktif etmeniz gerekiyor.

 

 

Gelelim aktif ettiğimiz portB nin kod satırına burda bizi başka süprizlerde karşılıyor mesela RCC ne demek bu?
Stm32 de clock ile ilgili ayarlamaların yapıldığı çevre birimi Reset and Clock Control (RCC) dir. Bu çevre biriminin ilgili registerlarına belirli sayılar yazarak clock ayarlarını yapacağız

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

Kod satırımızda görüldüğü gibi içeriye tekrardan RCC_ ile başlayan bir kod girdik  , bu kodu biraz okuyunca sizde anlayacaksınız APB2 Çevre Birimlerindeki (yani fazında ki) B Portunu seç ve sonra ENABLE yani aktif yap.
-> peripheral : Çevresel

 

Artık structure yapısını kulanarak mod,pin gibi ayarlara erişme vakti.

Bu  satırda mod belirliyoruz , örenğin bir led sürecek isek ‘out_pp’ yani  ‘output and push pull’ demek.

GPIOInitStructer.GPIO_Mode = GPIO_Mode_Out_PP;

Bu satırda pin belirliyoruz , 2. pini seçtik.

GPIOInitStructer.GPIO_Pin = GPIO_Pin_2;

Bu satırda frekans hızını belirtik .

GPIOInitStructer.GPIO_Speed = GPIO_Speed_50MHz;

Son olarak  bu  altaki satırda tüm yapıyı ‘ initialisationetik ‘ yaptık yani başlatık ve içerisine iki adet parametre alıyor bunlardan ilki bağladığımız port ve diğeri structure yapısını temsil eden değişkenim . Dikkat edin değişkenimi gönderirken başında ‘ &’ var.


GPIO_Init(GPIOB,&GPIOInitStructer);

 

Özetle Şunları Diyebiliriz !!!

##  gpioConfiguration Fonksiyonun içerisinde ne var ?  ##

1 – Structer cagirma
2 – Portları aktif etme
3 – Pin Modunu Belirleme
4 – Hangi pin’i aktif ettik
5 – Frekansin Hizini Belirledik
6 – Yapilan ayarlamayi bildirdik / başlattık.

 

Temel yapıyı halletik artık main() fonksiyonuna gidelim.

int main(){
gpioConfiguration();
while(1){
GPIO_WriteBit(GPIOB,GPIO_Pin_2, Bit_SET);
delay(900000);
GPIO_WriteBit(GPIOB,GPIO_Pin_2, Bit_RESET);
delay(900000);
}

Sizlerinde fark ettiği gibi ilk olarak  gpioConfiguration(); yapısını kulanarak temel işlemleri başlattık. Ardından  while döngüsünü açtık ve içerisine 1 sayısını koyduk ,  C den de bileceğiniz gibi bu  işlem bunu sonsuza kadar dönmesini sağlıyor. Peki neden sonsuza kadar dönmesi gerek ? …….. Düşünmen bitiyse gelde açıklayayim sana!
Sistem açık olduğu sürece sinyal göndermeye veya okumaya devam etmesi gerek  ; butona  bastığın herhangi bir an olabilir yada araba her an sağa dönmesi gerekebilir , sistemler olacak eylemi anında bilmesi gerek  , peki ya o zaman ‘ gpioConfiguration’ fonksiyonu neden ‘while()’ ın içinde  değil çünkü  yapıyı bir kere başlatmam yetiyor 😀 .

Gelelim bir sonraki kodumuza, seçilen pini ” HIGH ”  veya ” LOW ” yapar.
(port, pin,durum) olarak sıralnıyor.

GPIO_WriteBit(GPIOB,GPIO_Pin_2, Bit_SET);

Bun fonksiyon yerine kullanılabilecek bir adet fonksiyon daha bulunmaktadır;

GPIO_SetBits(GPIOB,GPIO_Pin_2); 

Fark ettiyseniz ikisinde de SET diye birşey geçiyor bu şu demek ; HIGH yap .
Peki ya HIGH değilde LOW yapmak istersek ? o zamanda şunları kulanabilirsiniz.

GPIO_WriteBit(GPIOB,GPIO_Pin_2, Bit_RESET);

GPIO_ResetBits(GPIOB,GPIO_Pin_2); 

 

Tüm Kod:

#include "stm32f10x.h"
void gpioConfiguration(){
GPIO_InitTypeDef GPIOInitStructer;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIOInitStructer.GPIO_Mode = GPIO_Mode_Out_PP;
GPIOInitStructer.GPIO_Pin = GPIO_Pin_2;
GPIOInitStructer.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIOInitStructer);
}
int main(){
gpioConfiguration();
while(1){
GPIO_WriteBit(GPIOB,GPIO_Pin_2, Bit_SET);
delay(900000);
GPIO_WriteBit(GPIOB,GPIO_Pin_2, Bit_RESET);
delay(900000);
}
}
 

Arkdaşar Delay fonksiyonu bilğiniz bekleme
işlemi için ama burada 3600000 -> 1 saniye .
Bu Fonksiyona aşağıdaki butona tıklayarak ulaşabilirsiniz.
[button text=”Delay Fonksiyonu ” new_tab=”yes” size=”medium” icon=”” url=””]

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu