STM32 ile Yeni Çalışmaya Başlayanlar için Tavsiyeler

İbrahim Furkan Güngör
6 min readApr 14, 2021

--

Herkese Merhaba,

Bu yazımda STM32 başlangıç seviyesindeki yeni gömülü sistem geliştirici arkadaşlara yol göstermek amaçlanmakta. Öncelikle STM32 olarak bildiğimiz ST Microelectronics firmasının bu mikrodenetleyici serisinin neden bu kadar çok tercih edildiğini anlamaya çalışalım. Ayrıca ARM mimarisine de kabaca değinmiş olalım. Öncelikle en yaygın yanlış bilgiler hakkında konuşmak gerekirse ST firması sadece mikroişlemci üreten bir teknoloji firması ve ST firmasının mikrodenetleyicileri ARM mimarisi kullanan tek mikrodenetleyici ailesi olarak görülmesi. Bu yanlış algıların asıl nedeni ST firmasının bizim gözümüzde ve çevremizde STM32 üzerinde popüler olması, ARM mimarisi kullanan (TI,NXP v.b) gibi öteki mikrodenetleyicilerin STM32 serisi kadar yaygın kullanılmaması denebilir. Bu yanlışları bilmemiz önemli çünkü bir iş mülakatında ve tecrübeli bir mühendis ile konuşurken ARM işlemci yerine STM32 dememiz gülünç sonuçlar doğurabilir.

Örnek bir ST markalı STM32 mikroişlemcisi

Genel olarak en yanlış bilinen doğrulara değindik. Şimdi isterseniz ARM mimarisi bize neler sağlıyor ve neden öğrenilmesi bu kadar önemli onlara değinelim. Öncelikle ARM kısaltmasının açılımı ile başlayalım. Kısaltmamız aslında Advanced RISC Machine şeklindedir. RISC mimarisine sahip mikroişlemcilerin ileri seviye üyeleri olarak ARM mikroişlemcileri belirleyebiliriz. RISC açılımı da aslında komut sayısı azaltılmış bilgisayar olarak geçmekte ARM işlemcilerin en çok kullanıldığı yerlerden biri de bu azaltılmış komut sayıları sayesinde olmuştur dersek yalan olmaz. Azaltılan komut sayıları sayesinde daha komplex (CISC) mikroişlemcilere göre çok daha az güç tüketimi sağlamakta ve bu işlemcileri kullandığımız durumlarda daha az güç ile daha performanslı ürünler ortaya çıkmakta. Ayrıca RISC mimarisi CISC mimarisine göre çok fazla sayıda register barındırır. RISC mimarisinin özelleşmiş registerları sayesinde kodu register seviyesinde izleyerek hatayı bulabiliriz ki bu seviyede yaptığınız çalışmalar ilerlemeyen bir projenin ilerlemesini sağlayabilecek çalışmalar olmaktadır. ARM mimarisine de kısaca değinmiş olduk şimdi ise STM32 mikrodenetleyicilerinden hangisi üzerine çalışmamız ve hangi geliştirme ortamlarını kullanmanız başlangıç aşamasında sizin için daha iyi olabilir onlara değinelim.

1-Mikrodenetleyici Tercihi

STM32F407 ve STM32F103C8T6 Mikrodenetleyicileri

Mikrodenetleyici tercihinde başlangıç seviyesinde yeterli sayıda kaynağın bulunduğu bir tercih yapmanız yerinde olur. STM32 serisinde en çok kullanılan mikrodenetleyiciler STM32F103C8T6(Blue Pill) mikrodenetleyicisi ve STM32F407 Discovery mikrodenetleyicileridir. Ayrıca STM32 Nucleo kullanımı da yaygındır. Başlangıç aşaması için STM32F407 ve STM32F103C8T6 ürünleri kaynak açısından sizi çok yormaz ve aradığınız projelerin çoğunu çok çabuk bulursunuz. Yalnız önemli bir nokta olarak STM32F103C8T6 mikrodenetleyicisi ST firmasının orijinal mikrodenetleyicisi değildir. ST firmasının sitesinde o ürünü göremezsiniz. Uygun fiyatlı bir ürün çıkarmak amacıyla Çin menşeili firmaların ürettiği bir üründür. Ayrıca aldığınız zaman çakma mikroişlemci ile gelebilir. Mikrodenetleyici üstünde(CKS32F103) gibi bir yazı olabilir. STM32F407 ise biraz pahalı bir kart olduğundan dolayı alınamayabilir. Ama bütçe açısından sıkıntınız yok ise kesinlikle STM32F4 kartı temin etmenizi şiddetle öneririm.

STD Periph ve HAL kütüphanelerinin karşılaştırması.

2-Kütüphane Tercihi

Kütüphane tercihi noktasında ST firmasının sağladığı STD Periph ve HAL kütüphaneleri bulunmaktadır. Ayrıca Register seviyesinde de kod yazılabilmektedir hatta ve hatta Arduino ile bile kod yazılabilmektedir. Fakat kesinlikle böyle bir işe girişmeyin. Açıkçası arduinonun mühendislik değeri olmadığını düşünüyorum :). Şimdi gelelim Register seviyesinde kodlamanın , STD Periph ve HAL kütüphaneleri arasında ne gibi farklar olduğuna.

-STD Periph

STD Periph kütüphanesinde tüm başlangıç ayarlamalarını kendimiz yapmak durumunda oluyoruz. Bazı geliştirme ortamlarında Mikrodenetleyicinin kütüphane dosyalarını ekleyip ayarlamalarını da yapmamız gerekmekte. Bu ayarlamalar da başlangıç seviyesinde zorlayıcı bir iş açıkçası . Eğer bu şekilde geliştirme yaparsak ne yaptığınızı, neden yaptığınızı bilmek açısından çok faydalı. Ayrıca kodu kendimiz yazdığımız için gereksiz gördüğümüz kısımları hiç koda eklemiyoruz ve o şekilde projemizi tamamlıyoruz. Bu nedenlerle birlikte STD Periph seviyesinde kod yazmanın genel nedeni donanıma daha yakın bir kütüphane olması ve hafızada daha az yer kaplaması diyebiliriz. Başlangıç seviyesi için bana göre kullanılmamalı ama ayrıntılı bir şekilde konuyu anlamak istiyorsanız inceleyebilirsiniz.

-Register

Register seviyesinde kod yazmak hakkında konuşursak eğer Register seviyesinde yazdığınız kodlar donanıma yakın yazabileceğiniz en alt seviyedir(Assembly kullanmıyorsanız tabi). Bu seviyede kod yazmak aşırı hızlı şekilde işlemleri gerçekleştirir. Fakat sıkıntımız yaptığımız işlemlerin debug yapıldığı zaman denetlenememesi.

Örnek olarak:

GPIOD->ODR=0x00

şeklinde bir işlem yaptığınızda kullandığınız geliştirme ortamı burada yazdığınız 0x00 değerinin doğru olup olmadığına bakmaz. Bunu bizim kontrol etmemiz gereklidir bu da Register seviyesi kodlamanın dezavantajı denilebilir. Bu bilgiler doğrultusunda tüm projeyi Register seviyesinde yazmanın çok karmaşık bir yapı oluşturduğu görülmektedir ve projenin geliştirme sürecini uzatacağından tercih edilmez. Açıkçası extrem durumlar olmadığı sürece tüm projeyi Register ile kodlamak mantıklı değildir. Fakat bazı beğenmediğiniz fonksiyonlar veya bir pinin durumunu gözlemeniz gerektiğinde Register seviyesinde kod yazabilirsiniz. Mesela o pinin giriş değerini okuma fonksiyonu döndürmek yerine o pinin data giriş Registerını okuyarak pin durumunu görebilirsiniz. Register seviyesinde çalışmalara bir miktar deneyim sahibi olunduktan sonra başlanması mantıklı olabilir. İlk başta Register seviyesinde kod yazmak STM32 üzerine bir önyargıya neden olabilir.

-HAL Library

HAL Library ST firmasının en yeni kütüphanesidir. Daha sonra değineceğimiz Cubemx ayarlamaları ile HAL kodu otomatik şekilde oluşturulur. Başlatma ayarları gerçekleştirilir. HAL Library’nin en büyük avantajı kullanım kolaylığıdır. HAL açılımını incelediğimizde Hardware Abstraction Layer Library olarak geçiyor. Türkçeleştirdiğimizde donanım soyutlama seviyesi kütüphanesi olarak çevirebiliriz. Çeviriden de anlayacağınız gibi donanım soyutlaması sayesinde kod yazmamız daha kolay hale gelmektedir. Fakat donanım soyutlaması aynı zamanda çalıştırılan kodda hakimiyet açısından sıkıntı yaratmaktadır. Yapılan ayarlamalar sonucu kodun otomatik oluşması donanımın nasıl çalıştığı hakkında hakimiyetimizi azaltır.

STM32 için kullanılabilen Geliştirme ortamlarından bazıları

3-Geliştirme Ortamı

Geliştirme ortamı bizim yazılımı denediğimiz yani kısaca debug yaptığımız kısım denebilir. Bazı geliştirme ortamları tamamen ücretsiz olduğu gibi bazı geliştirme ortamları da kod boyutuna göre ücretli veya ücretsiz olarak kullanılabilmektedir.

Geliştirme ortamı olarak birçok tercih yapabilmekteyiz. En çok Kullanılan geliştirme ortamları IAR, KEIL, ATOLLIC ve CUBE IDE olarak söylenebilir. Bu geliştirme ortamlarının kişiden kişiye artıları ve eksileri bulunmakta. Geliştirme ortamlarına kısaca değinecek olursak :

-IAR EMBEDDED WORKBENCH

Bahsettiğimiz geliştirme ortamları arasında en az kullanılanı.

Belli bir kod boyutuna kadar ücretsiz versiyonu bulunmakta ve bana göre sade bir arayüze sahip.

Genelde STD Periph kütüphanesi ile projeler geliştirilen bir IDE.

Debug noktasında bana göre kullanımı açık ara en olan.

Başlangıç seviyesi için çok tavsiye etmiyorum fakat bilmenizde yarar var.

-KEIL

Kaynak açısından çok fazla kaynağı bulunan debug kullanımı oldukça rahat olan bir geliştirme ortamı.

Belli bir kod boyutuna kadar ücretsiz versiyonu bulunmakta.

STD Periph ve HAL kütüphanesi üzerine proje geliştirebiliyorsunuz.

Kullandığınız mikrodenetleyici için gerekli olan driver yani gerekli yazılımları indirmenize olanak sağlıyor.

Başlangıç seviyesi için kullanılabilir, özellikle STD Periph ile yazılım geliştirilecek ise tercih edilebilir.

-ATOLLIC

Bahsettiğimiz yazılım geliştirme ortamları arasında bana göre en kötü olanı.

Debug ve kullanıcı arayüzü bana göre kötü bir geliştirme ortamı.

Tamamen ücretsiz bir geliştirme ortamıdır.

ST firması tarafından satın alınmıştır.

Başlangıç seviyesi için bana göre Keil veya Cube IDE daha iyi tercihlerdir.

-CUBE IDE

ST firmasının kendi yazılımıdır. Sadece HAL kütüphanesi ile geliştirme sağlayabileceğiniz bir geliştirme ortamıdır.

Uygulama içerisinde entegre bir şekilde Cube Mx barındırır. Entegre Cube Mx sayesinde belirlenen ayarlamaları başka bir geliştirme ortamı olmadan direkt koda aktarır.

Tamamen ücretsizdir.

Kullanımı rahattır.

Başlangıç seviyesi için kullanılabilecek en iyi geliştirme ortamıdır.

Yazımı baştan sona okuduğunuz için çok teşekkürler. Yanlış gördüğünüz bir yer veya aklınıza takılan bir nokta olursa bana ulaşmaktan çekinmeyin.

--

--