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=””]



