Merhabalar, bir önceki yazımızda Stm32 ile geliştirme yapacağımız Cube IDE yazılımını indirmiştik. Buraya tıklayarak önceki yazımıza ulaşabilirsiniz. Bugün ise Stm32 ile genelde ilk uygulama örneklerinden biri olan Blink yani STM32 ile led yakıp söndürme işlemini gerçekleştireceğiz. Geliştirme kartımızın ilk önce dahili ledini ardından harici bir ledi kullanarak led’i yakıp söndüreceğiz. Led yakıp söndürme işlemini hafife almamak gerekir. Bir mikrodenetleyicinin GPIO yani genel amaçlı giriş çıkış birimlerini tanımamıza öncü olur. Ne de olsa çoğu yazılım “Hello World” ile başladı 🙂
Uygulama
STM32 ile led kullanımı uygulamamız için ilk olarak cube ide yazılımını çalıştırıyoruz. Ardından kartımızı “Board Selecetor” kısmından kartımızı seçiyoruz.
Kart seçimi yapıldıktan sonra pencereye proje ismini giriyoruz ardından Finish’ e basıyoruz. Bu aşama da programı ilk kez çalıştırdığımızdan dolayı gerekli yazılımları indirmek isteyecektir, boyutları biraz yüksek olabilir. Biraz bekleyebilirsiniz.
İndirme işlemi tamamlandıktan sonra “Default Mode” şeklinde başlatılsın mı; uyarısına da evet dedikten sonra bizi bu pencere karşılamakta:
Bu arayüz üzerinde sol tarafta işlemcimizin çevresel birimlerinin tüm ayarları yapılabilmekte üst pencere de ise saat frakansı ve araçlar kısmı bulunmakta. Ortada bulunan işlemcimiz üzerinde bize izin verilen tüm işlemci bacaklarını kolay bir şekilde atama gerçekleştirip yazılımda üst kısımda bulunan gerekli atamaları bizim için hazır etmekte. Projelerimizde sırası geldikçe bunlardan bahsedeceğiz.
Led yakıp söndürme projemizde ilk olarak işlemcimiz üzerinde PA6 pinini gpıo output yaparak dijital bir çıkış haline getiriyoruz. Hemen yanında bulunan PA5 pininde nucleo kartının üzerinde dahili gelen ledi görebilirsiniz. Bu projemizde harici bir led kullanacağız isterseniz hiçbir değişiklik yapmadan birazdan yazacağımız kodda pin ismini değiştirip dahili olan ledi de çalıştırabilirsiniz.
Gpıo Output’ u seçtikten sonra pine sağ tıklayarak isim verebilirsiniz.Ardından ekranın sol tarafında bulunan System Core menüsünden RCC alt menüsüne geçerek clock’ları seçili değil ise kristal/seramik resonatör yapıyoruz.
Bu aşamadan sonra projenin basitliğinden dolayı pek fazla ayara ihtiyaç duymuyoruz. Yukarıdaki sekmede bulunan yeşil ikona tıklıyoruz. Gelen uyarıya evet dedikten sonra kodumuz derleniyor.
Yazılım kısmına geçmeden önce PA6 pinimizin kartta hangi porta bağlı olduğunu pinout diagramından bakıyoruz. PortA kısmı olduğunu kodda belirtmemiz gerekiyor. Led’in + ucunu (tercihen) 330 ohm direnç ile pa6 portuna; – ucunu ise GND portuna bağlıyoruz.
Benim kullanmış olduğum f446re kartının pinout diagramı şu şekilde:
Son olarak açılan main.c klasörü içinde “while(1)” fonksiyonun altına aşağıdaki gibi kodumuzu yazıyoruz.
Burada HAL kütüphanesi kullanarak ilk önce gpıo portlarını belirttik ardından port durumunu set’e çekip, Hal Delay fonksiyonu ekledikten sonra pin dumunu reset yaptık. Bu şekilde ledimiz 500ms aralıklarla yanıp sönmeye başladı.
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_SET);
HAL_Delay(500);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_RESET);
HAL_Delay(500);
}
/* USER CODE END 3 */
Nucleo kartının dahili ledini çalıştırmak istersek (f446re için) Gpıo pin 6 yerine 5. pini tercih edersek dahili ledi de çalıştırmış oluruz.
Led yakıp söndürmenin bir başka yöntemi de toogle fonksiyonunu kullanmaktır. Bu sayede daha az satırda ledimizi yakıp söndürebiliriz. Burada da nucleo kartının dahili ledini toogle fonksiyonu ile yakıp söndürüyoruz. Örnek kod aşağıdaki gibidir;
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
HAL_Delay(500);
}
/* USER CODE END 3 */
Diğer stm32 yazıları için aşağıdaki bağlantılara tıklayabilirsiniz.Diğer stm32 projelerinde görüşmek dileğiyle 🙂
ilk kodda gpio a olacak b yazılmış