STM32F3DISCOVERY #4 Blink Led

Herkesin bildiği gibi programlamaya yeni başlayanlar  ekrana "Hello World!" yazdırarak başlar. Bunun gömülü sistemlerde karşılığı ise ledin belirli bir süre yanık kalıp belirli bir süre kapalı kalması ve bu durumun sonsuza dek devam etmesidir.

Bir mikrodenetleyici ile çalıştığınızda genelde ilk bunu yapmayı amaçlarsınız. Önceki yazımızda Keil uVision'ı tanımıştık. Şimdi de bu IDE üzerinden blink led kodunu derleyip kartımıza yükleme zamanı!

ST bize bu işlemci için bazı sürücüleri(driver) ve HAL (Hardware Abstraction Layer) kütüphanesini sağlamakta. HAL kütüphanesini donanım soyutlama katmanı diye çevirebiliriz. İşlemcinin alt kısmındaki registerları tek tek konfigure etmekle uğraşmak yerine direk bu kütüphanenin işlemciniz için sağladığı API'lar(fonksiyonlar) ile geliştirme yapabiliyorsunuz. ST size bunları internet sitesi üzerinden kartın tanıtıldığı kısmında sağlıyor. STM32F3DISCOVERY kartı için bu linkte en alt kısımda Embedded Software kısmından elde edebilirsiniz.


Ben burada örneklerin olduğu ilk iki paketi indirdim. Ancak 2. paketle başlamak biraz başımı ağrıttı. STM32CubeF3 paketini indirip kolayca ilerlemenizi tavsiye ederim. 2. paket ilk pakete göre eski kodlara sahip ve içeriği ilk paketle hemen hemen aynı. 

Sıkıştırılmış dosyayı açtıktan sonra bu konuma gidip oluşturulmuş taslak projemizi açalım.

\STM32Cube_FW_F3_V1.10.0\Projects\STM32F3-Discovery\Templates\MDK-ARM

Taslak projemize birkaç kod satır ekleyip ilk programımızı yükleyebileceğiz. Kodu incelemenizi tavsiye ederim. main.c ve stm32f3_discovery.c kaynak dosyalarını açalım. stm32f3_discovery.c dosyasında kartımıza özel hazırlanmış fonksiyonlar ve tanımlamalar bulunmakta. Kartımızın üzerindeki ledlerin hangi pinlere bağlı olduğu gibi bilgileri de buradan edinebilirsiniz. Buna bakmak yerine kırmızı lede LED_RED değişkeniyle de erişebilirsiniz.

void BSP_LED_Init(Led_TypeDef Led) fonksiyonu içine bir tane Led_TypeDef tipinde değişken alıyor ve bir şey döndürmüyor. Bu fonksiyonun isminden initialize(başlatmak) edeceğini yani bazı registerları o led için konfigüre edeceğini anlayabiliriz.

void BSP_LED_Toggle(Led_TypeDef Led) Init fonksiyonu gibi içine Led_TypeDef tipinde değişken alıyor ve bir şey döndürmüyor. Bu fonksiyon ile Led hangi durumdaysa ters duruma geçiyor. Led yanık iken bu fonksiyon çağırıyorsak, Ledin sönmesini bekleyeceğiz.

main.c dosyasına bu eklemeleri aşağıdaki gibi yaptığımızda, program derlenip karta yüklenmeye hazır olacak.

    BSP_LED_Init(LED_RED);

  /* Infinite loop */
  while (1)
  {
BSP_LED_Toggle(LED_RED);
HAL_Delay(1000);
  }

Programı yükledikten sonra RESET butonuna basmayı unutmayın. Diğer bir yöntem ise
Project > Options for Target ...> Utilities>Settings  konumuna gidip Reset and Run kutucuğunu seçebilirsiniz.
Size göz kırpan kırmızı bir led görüyorsanız, şimdi arkanıza yaslanın ve kaynak kodları inceleyin. Fonksiyonların ya da değişkenlerin tanımlı oldukları yerlere gidin. Bunu fonksiyon üzerine gelip sağ tıklayıp "Go To Definition of ..." kısmına tıklayıp kolayca yapabilirsiniz. Bu arada kullanılan veri yapılarını incelemeyi unutmayın.

Yorumlar

Bu blogdaki popüler yayınlar

Sinyal Jeneratörü Nedir? (Function generator)

Arduino'dan Python'a veri aktarma

#12 Arduino ile Step Motor Kontrolü