Bu yazı serimizde STM32F4 Discovery geliştirme kartını kullanacağız. Eğer ki farklı işlemcileriniz var ise endişe etmenize gerek yok. HAL kütüphaneleri ufak farklılıklar dışında tüm STM32 serilerinde aynı şekilde kullanılabilmektedir.
Bu yazımızda kartımızın üzerindeki ledleri kullanarak basit bir proje geliştireceğiz. Bu ve sonraki projelerimizde ST firmasının sunmuş olduğu CubeIDE’yi kullanacağız. (v.1.7.0)
Aşağıdaki resimdeki gibi proje oluşturarak başlıyoruz.
STM32 projesi seçtikten sonra açılan ekrandan işlemcimizi seçiyoruz. Board Selector menüsünden direkt olarak discovery kartı seçilebilirdi fakat pinlerin boş olarak gelmesini tercih ettim. Böylece ihtiyacımız olan pinleri aktif ederek yazılımımızı yazabileceğiz.
İşlemcimizi seçip next dedikten sonra proje adını girmemizi isteyecektir. Dilerseniz bu ekrandan projenin kaydedileceği yeri de seçebilirsiniz. Ben default olarak kalmasını tercih ettim.
Mikroişlemcimiz karşımıza geldi. Her şeyden önce kartımızın clock ayarını yapmamız gerekiyor. Bunun için aşağıdaki resimdeki gibi RCC seçip High Speed Clock (HSE) kısmını BYPASS Clock Source seçmemiz gerekiyor. Böylece kartımızın üzerindeki kristali, mikroişlemcinin kullanacağı şekilde aktif etmiş oluyoruz.
Ardından Clock Configuration sekmesinden clock ayarlarını yapmamız gerekiyor. İstediğimiz frekansı seçtikten sonra enter’a basmamız yeterli. Gerekli işlemcileri CubeIDE otomatik olarak yapacaktır. Burada yapmamız gereken iki şey bulunuyor. Birincisi ilk kısımda giriş frekansını 8 MHz yapmak ki belirtilen sınırlar arasında kaldığınız sürece bir sıkıntı olmayacaktır. İkincisi ise HCLK kısmını, izin verilen max frekans olan 168’e ayarlayıp enter’a basmak. Bu işlemcimiz max 168 MHz frekansta çalışabiliyor. Farklı işlemcilerde bu frekans daha farklı olabilmektedir. Gelen uyarıya evet diyerek bekliyoruz ve clock ayarlarımız hazır.
Artık pin ayarlarına geçebiliriz. STM32F407VG Discovery User Manual’dan PD15, PD14, PD13 ve PD12 pinlerine ledlerin bağlı olduğunu görebiliriz. Bu pinlere tıklayarak GPIO_Output olarak ayarlıyoruz. Bu şekilde bu pinler çıkış olarak ayarlanmış oldu. Şimdi ise yapmamız gereken tek şey projemizi kaydederek kodun oluşturulmasını beklemek.
Projemizde her saniyede bir ledlerimizin yanıp sönmesini amaçlıyoruz. Burada while döngüsü içerisine HAL kütüphanesi fonksiyonlarını yazacağız.
HAL_GPIO_TogglePin() fonksiyonu ile output olarak seçilmiş pinlere toggle işlemi uygulanır. Yani 0 ise 1, 1 ise 0 olur. Bir başka deyişle led yanıyorsa söner, sönüyorsa yanar.
HAL_Delay() fonksiyonu ise mikroişlemcinin, fonksiyon içerisine yazılan milisaniye değeri kadar beklemesini sağlar. Profesyonel uygulamalarda pek tercih edilmese de öğrenmekte fayda var.
HAL_GPIO_WritePin() fonksiyonu belirtilen pin’e 0 veya 1 değerini yani RESET veya SET değerini yazmamızı sağlar. HAL_GPIO_ReadPin() fonksiyonu ise belirtilen pin’in o anki durumunu belirtir.
Yazdığımız kodu açıklamak gerekirse; PD15, PD14, PD13 pinlerine sırasıyla toggle işlemi yapılıyor. Ardından PD12 pin’i okunuyor. Eğer ki led yanıyorsa yani PD12 pin’i SET durumundaysa if bloğunun içerisine giriliyor. if içerisinde ise PD12 pin’ine RESET değeri yani 0 değeri yükleniyor. else kısmında ise tam tersi bir işlem bulunuyor. En sonunda 1 saniye bekleniyor ve while döngüsü başa sarıyor.
NOT: Fonksiyonları detaylı incelemek isterseniz, CubeIDE’de CTRL + Sol Tık yaparak ilgili fonksiyonun içerisine gidebilirsiniz.
Bu projede GPIO için kullanılan önemli 3 fonksiyondan bahsetmiş olduk. Bir başka projede ve yazıda görüşmek üzere. Sorularınızı ve görüşlerinizi ahmetsalihsancak@gmail.com mail adresime iletebilirsiniz. Hoşçakalın…