STM32F4 ile İlk Uygulamalar
|
Merhabalar…
Bu konuda üzerinde çalışmaya yeni başladığım STM32F4 gelişitrme kiti ile ilgili yaptığım uygulamarı ve edindiğim tecrübeleri sizinle paylaşacağım. Öncelikle kullacağımız ide Keil’ in Uvision 5 idesi olacak. IAR, MikroC hatta Eclipse’ e kadar giden bir çok ide le yazılmış uygulamara araştırmalarımda rastladım. Ancak edindiğim bilgilere göre STM32 geliştirme kitleri ile en çok Keil kullanımı tavsiye ediliyordu. Bende bu yüzden uygulamarımda Keil kullandım. Ancak benim tavsiyem yeni başlayacaklara kesinlikle Open Source IDE kullanılmasından yana. Keil yada IAR ne kadar cazip gibi görünse de crack’ lenmediği sürece IDE’ lerin sınırlamalarına takılacaksınız. Bu yüzden CooCox yada Eclipse ile başlamanızı tavsiye ederim. Ancak kaynak az olduğu ve kulanımını da öğrendiğim için bugün Keil’ den başlıyacağım.
Şimdi biraz elimizdeki karttan bahsedelim. Genelde piyasada STM32F4(407) Discovery geliştirme kiti bulunmakta. Ancak benim elimde STM32F429 bulunduğu için uygulamarı bunun üzerinden anlatacağım. Arada pin sayısı port isimleri gibi ufak farklılıklar bulunmakta. Önemli yerleri ise belirtmeye çalışacağım.
STM32F429I üzerinde 144 tane pin bulunmakta. 2 MB Flash bellek ve 12 Bitlik 3 tane ADC içerir. Bunun yanı sıra diğer kartlarda da bulunana I2C, SPI, UART gibi haberleşme donanımları da içerir. İçerisinde bunlara ekstra olarak dahili Accelerometer ve dokunmatik TFT ekran bulundurur. Ancak ARM işlemci kullanıyorsunuz IO’ lara dikkat etmeniz gerekir. Diğer denetleyicilerin yanı sıra ARM tabanlı elektronik kartlarda IO’ lar 3.3 V destekler. Eğer ki siz 5V seviyesinde kullanmak istiyorsanız kullanacağınız pinin 5V tolerans özelliği bulundurması gerekir. Bunun ne olduğuna sonra detaylıca değineceğim.
İki kart arası farklılığa gelince. Port isimleri yada pin sayısı bu iki kart çok önemli fark değil ancak, uygulamarınızda real time çalışabilmek için Clock ayarına çok dikkat etmelisiniz. STM32F407 kullanuyorsanız 168Mhz STM32F429 kullanıyorsanız 180Mhz olarak Clock ayarlanmalıdır.
Bunlar haricinde en önemli noktalardan birisi yazdığınız yazılımı karta yükledikten sonra mutlaka üzerindeki RESET butonuna basmalısınız. Aksi taktirde kart beklemede kalacak ve siz gücü kesip tekrar başlatana kadar yazdığınız yazılım devreye girmeyecektir.
Artık Keil ide mizi tanıyarak yazılımımıza başlıyabiliriz.
Keil Uvision 5 kullanıyorsanız boş bir ekran ile karşılaşacaksınız. Daha sonra Project sekmesinden New Project‘ den projemizi oluşturmaya başlıyoruz. Burada karşımıza projeyi nereye kaydetmek istediğimizi soran ekran gelecek. İstediğiniz klasörü bulup dosya adı kısmına proje ismini girerek Kaydet‘ e basıyoruz.
Projemizi kaydettikten sonra bize yüklenecek cihazı soran bir sayfa gelecek. Bu sayfada kullandığımız stm32′ nin modelini belirliyoruz. OK butonuna basıp Run-Time Enviroment seçimine geçiyoruz.
İlk uygulamamızda bu ekran üzerinden kullanacağımız HAL Driver’ ların seçimini yapacağız. Ancak daha sonra bunların ayarın kendisi yapan bir araç kullanacağız. Bu ekranda Board Support -> Led -> Led, CMSIS -> Core, CMSIS -> RTOS -> Keil RTX , Device -> Startup, STM32Cube Framework -> Classic, STM32Cube Hal ->Common Cortex ve GPIO özellikleri seçilmelidir. Siz bazılarını seçtiğinizde sol altta bazı sarı uyarılar gelecektir. Bunlar seçtiğiniz özelliğin çalışabilmesi seçili olması gereken diğer özelliklerdir. Siz Resolve butonuna bastığınızda seçmeniz gereken özelliklerden bazılarını arayüzün kendisinin seçtiğini göreceksiniz.
Yeri gelmişken biraz STM32′ deki HAL Driver’ lardan bahsedeyim. STM32 firması geliştirdikleri kartlarda registerler ile yazılım yazma zorluğundan kullanıcılarını kurtarmak için bu şekilde bir kütüphane geliştirmiş. Bütün fonksiyon ve kalıplarının olduğu dökümana buradan ulaşabilirsiniz. Bunlar haricinde farklı kütüphanelerde kullanabilirsiniz. Ancak ben örneklerimi HAL driver’ lar üzerinden anlatacağım.
Öncelikle STM32F429 üzerindeki onBoard bir ledi 1 sn süre ile yakıp söndürelim. STM32F429 üzerinde 2 tane onBoard led, STM32F407 üzerinde ise 4 onBoard led bulunmaktadır. Bunları nasıl kullanacağımızı göstereceğim.
Projemize bir main.c isimli C kaynak dosyası eklememiz gerekli. Bunu yapmak için soldaki Source Group a sağ tıklayıp Add New Item -> User Code Template -> Device -> Stm32Cube FrameWork Classic / main.h main.c yolunu takip edip ADD butonuna basıyoruz. Daha sonra project menüsünden RTX_Conf_CM.c isimli dosyayı açıyoruz. Burada kartımızın Clock ayarını yapmamız gerekli. RTX Kernel menüsünden RTOS Kernel Timer input clock frequency’ i eğer STM32F429 kullanıyorsanız 180000000, STM32F407 kullanıyorsanız 168000000 olarak değiştirip kaydede basıyoruz.
Şimdi main.c dosyasına çift tıklayıp kodlarımızı yazmaya başlayabiliriz. Öncelikle bir kütüphane dahil etmemiz gerekli.
#include "Board_LED.h" // ::Board Support:LED main.h ın altına eklenecek
Sayfanın orta kısmında şu şekilde bir yer göreceksiniz.
#ifdef RTE_CMSIS_RTOS // when using CMSIS RTOS // create 'thread' functions that start executing, // example: tid_name = osThreadCreate (osThread(name), NULL); osKernelStart (); // start thread execution #else /* Infinite loop */ while (1) { } #endif
Burası bizim sonsuz döngümüzün bulunması gereken yerdir. Ancak biz RTOS driver’ larını kullandığımız için main.c, thread kullanılması için ayarlanmıştır. Yani üstte ki while döngüsü çalışmayacaktır. Biz thread kullanmayacağımız için osKernelStart fonksiyonunun altında kendi döngümüzü oluşturacağız. Önce onBoard led lerimizi konfigure eden kodu altta satırın bi üstüne ekleyelim.
LED_Initialize(); //eklenecek kod #ifdef RTE_CMSIS_RTOS //while bu satırdan sonra gelecek
Eklememiz gereken kod şu şekildedir:
while (1) { LED_On(0); osDelay(1000); LED_On(0); osDelay(1000); LED_On(1); osDelay(1000); LED_On(1); osDelay(1000); }
Artık yazılımımız karta yüklemek gerekli. Bunun için soldaki project ekranından Target 1 üzerine sağ tıklıyaıp Options for Target -> Debug sekmesini açıyoruz. Burda sağ üstte tarafta ki comboBox’ dan ST-Link Debugger’ ı seçiyoruz. Seçim işleminden sonra sağdaki Settings butonuna tıklamalıyız. Açılan ekranda port menüsündeki JTAG seçeneğini SW olarak değişitiriyoruz.
Artık yazılımımız karta yüklenmeye hazır. Öncelikle klaveyeden F7 butonuna basarak projemizi derliyoruz. Derleme işlemi bitince üstteki menüden Download butonuna basıyoruz. Yazılımımız karta yüklenmeye başlıyor. Yüklendikten sonra RESET butonuna basmalısınız. Aksi taktirde STM32′ yi tekrar bağlayana kadar yazılımın çalıştığını göremezsiniz.
Şimdi onBoard butonun kullanımına bakalım. Butona bastığımızda yanan bir led örneği konuyu sonlandırabiliriz. Öncelikle eklememiz gereken kütüphane ve fonksiyonumuzu ekleyelim.
#include "Board_Buttons.h" // ::Board Support:Buttons
LED_Initialize(); Buttons_Initialize(); //eklenecek kod #ifdef RTE_CMSIS_RTOS //while bu satırdan sonra gelecek
Onboard butonumuzun ayarını yapmış olduk. Şimdi yazılımı düzenleyelim.
while (1) { if(Buttons_GetState()) { LED_On(0); while (Buttons_GetState()); } }
Bu şekilde STM32F4 üzerindeki onBoard butonu kullanabiliriz. Gördüğünüz gibi bu işlemler son derece basit. Ancak dahili olmayan elemanları kullanmaya sıra geldiğinde işlerin biraz daha karıştığını göreceksiniz. STM32F4CubeMx yardımı ile ilerki yazılarda STM32F4′ e dışardıdan eleman bağlayıp kullanmaya değineceğiz.
Teşekkürler…
Thanks for sharing this nice article.