← Tüm makaleler

STM32 mi, Arduino mu? Hangisini Seçmelisiniz?

Performans, soyutlama seviyesi ve öğrenme eğrisi açısından kapsamlı karşılaştırma

STM32 mi, Arduino mu? Hangisini Seçmelisiniz?

Arduino ile "çalışıyor" demek kolaydır. digitalWrite(13, HIGH) yazarsınız, LED yanar. Peki arkasında ne oldu? Hangi register değişti, hangi saat kaynağı açıldı, hangi pin modu yapılandırıldı? Arduino bunları sizden gizler — bu hem en büyük gücü hem de gizli tuzağıdır.

STM32'ye geçmeyi düşünüyorsanız, asıl soru "hangisi daha iyidir?" değildir. Asıl soru: donanımı anlamak mı istiyorsunuz, yoksa donanımı kullanmak mı?

Gömülü sistemlere yeni başlayan herkes bir noktada bu soruyla karşılaşır: Arduino mu, STM32 mi? İkisi de popüler, ikisi de makul fiyatlı, ikisi de LED yakıp söndürebilir. Ama aralarındaki fark, bir hesap makinesiyle bir mühendislik iş istasyonu arasındaki fark kadar büyük olabilir — doğru veya yanlış bir cevap yoktur, ama projenize göre doğru bir seçim vardır.


1. Arduino Nedir, Gerçekte Ne Çalıştırır?

"Arduino" iki şeyi birden ifade eder: bir donanım ailesi ve bir yazılım ekosistemi.

Klasik Arduino Uno, Atmel'in (şimdi Microchip) ATmega328P mikrodenetleyicisini çalıştırır:

Arduino'nun asıl gücü donanımda değil, ekosisteminde yatar. Arduino IDE, Wire, SPI, Serial gibi kütüphaneler ve binlerce hazır "shield" (genişleme kartı) sayesinde bir LED'i saniyelerde yakabilirsiniz:

void setup() {
    pinMode(13, OUTPUT);
}

void loop() {
    digitalWrite(13, HIGH);
    delay(500);
    digitalWrite(13, LOW);
    delay(500);
}

Bu kod çalışır, ama arkasında ne olduğunu bilmiyorsunuzdur: pinMode(13, OUTPUT) aslında ATmega328P'nin DDRB register'ına bir bit yazar. digitalWrite(13, HIGH) ise PORTB register'ının ilgili bitini 1 yapar. Arduino bu detayları sizden gizler — bu hem bir avantaj hem bir dezavantajdır.


2. STM32 Nedir?

STM32, STMicroelectronics'in ARM Cortex-M çekirdekli mikrodenetleyici ailesidir. Yüzlerce farklı modeli bulunur; bu platformda kullandığımız STM32F070RB (Nucleo-F070RB kartı) şu özelliklere sahiptir:

Aynı LED yakıp söndürme işi, STM32'de register düzeyinde şöyle görünür:

#include "stm32f0xx.h"

int main(void) {
    /* GPIOA saat kaynağını aç */
    RCC->AHBENR |= RCC_AHBENR_GPIOAEN;

    /* PA5'i çıkış olarak yapılandır */
    GPIOA->MODER |= (1 << 10);   /* MODER5 = 01 → general purpose output */
    GPIOA->MODER &= ~(1 << 11);

    while (1) {
        GPIOA->ODR ^= (1 << 5);  /* PA5'i toggle et */
        for (volatile int i = 0; i < 100000; i++);
    }
}

Hiçbir şey gizlenmez: hangi register'ı, hangi biti, neden değiştirdiğinizi bilmeniz gerekir.


3. Temel Farklar

3.1 Soyutlama seviyesi

Arduino bir soyutlama katmanı sunar. analogWrite() çağırırsınız, altta PWM donanımı devreye girer. Hızlı prototipleme için mükemmeldir; ancak zamanlamayı hassas kontrol etmek, kesintileri (interrupt) yönetmek veya DMA kullanmak istediğinizde soyutlama bir engele dönüşür.

STM32 bare-metal programlamada soyutlama katmanı yoktur. Register'lara doğrudan yazarsınız. Bu, öğrenme eğrisini artırır ama davranışı tamamen öngörülebilir kılar.

Not: STM32 için de HAL (Hardware Abstraction Layer) mevcuttur. STM32 HAL, Arduino'nun sunduğuna benzer bir soyutlama sağlar — ancak çok daha ince ayarlıdır ve altta yatan donanıma erişimi her zaman açık bırakır.

3.2 Performans

Kriter Arduino Uno (ATmega328P) STM32F070RB
Çekirdek 8-bit AVR 32-bit ARM Cortex-M0
Saat 16 MHz 48 MHz
Flash 32 KB 128 KB
SRAM 2 KB 16 KB
Kayan nokta Yazılımsal (yavaş) Yazılımsal (hızlı)
Tipik GPIO geçiş hızı ~100 ns ~20 ns

ATmega328P'nin 2 KB SRAM'i, bir dizi veya birkaç string tanımladığınızda hızla dolabilir. STM32F070RB'nin 16 KB SRAM'i çok daha büyük veri yapılarına izin verir.

3.3 Çevresel birimler (Peripherals)

Arduino Uno üzerinde bir tane donanımsal UART, bir tane SPI ve bir tane I2C arabirimi bulunur. STM32F070RB'de birden fazla USART, SPI ve I2C birimi mevcuttur — aynı anda birden fazla cihazla haberleşebilirsiniz.

3.4 Güç tüketimi

STM32 serisinin büyük çoğunluğu gelişmiş güç yönetimi modlarına sahiptir: Stop modu, Standby modu. Bataryayla çalışan bir ürün geliştiriyorsanız bu fark kritiktir. ATmega328P de uyku modlarına sahiptir, ama STM32'nin esnekliği çok daha geniştir.

3.5 Ekosistem ve topluluk

Arduino'nun topluluğu ve kütüphane ekosistemi çok daha büyüktür. Hemen her sensör için hazır bir Arduino kütüphanesi bulabilirsiniz. STM32 ekosistemi daha çok profesyonel geliştiricilere yönelik olduğundan kütüphaneler daha sınırlıdır — ama protokolleri (I2C, SPI) kendiniz yazıyorsanız zaten bu kütüphanelere ihtiyacınız yoktur.


4. Hangi Durumda Hangisini Seçmelisiniz?

Arduino seçin, eğer:

STM32 seçin, eğer:


5. "Arduino ile Başlayıp Sonra STM32'ye Geçeyim mi?"

Bu sık sorulan bir sorudur ve cevabı kişinin hedefine bağlıdır.

Eğer gömülü sistem mühendisi olmak istiyorsanız, doğrudan STM32 ile başlamak daha verimlidir. Arduino'nun soyutladığı katmanlar — GPIO register'ları, saat kaynakları, timer yapılandırması — tam olarak bir gömülü sistemci'nin anlaması gereken şeylerdir. Arduino ile "çalışıyor" demek mümkündür, ama neden çalışıyor sorusunun cevabını vermek güçleşir.

Eğer hızlı prototipleme veya hobby amaçlıysa, Arduino makul bir başlangıç noktasıdır. Ancak bir süre sonra donanıma daha yakın olmak istediğinizde STM32'ye geçiş sizi sıfırdan öğrenmek zorunda bırakacaktır — çünkü Arduino ve STM32'nin zihinsel modelleri birbirinden çok farklıdır.

Pratik öneri: Eğer zaman kısıtlamanız yoksa doğrudan STM32 ile başlayın. İlk birkaç hafta daha yavaş gidebilirsiniz, ama register seviyesinde kazanılan sezgi uzun vadede çok daha değerlidir.


Özet

Kriter Arduino STM32
Öğrenme eğrisi Düşük Orta–Yüksek
Donanım kontrolü Sınırlı Tam
Performans Düşük Yüksek
Ekosistem Zengin Daha sınırlı
Ürün geliştirme Zor Uygun
Güç yönetimi Temel Gelişmiş
İdeal kullanım Prototip, eğitim (genel) Gömülü sistem öğrenimi, ürün geliştirme

STM32'ye geçmek veya bare-metal programlamayı derinlemesine öğrenmek istiyorsanız, bu platformdaki STM32 kurs serisine göz atabilirsiniz — register seviyesinden başlayarak gerçek donanım üzerinde adım adım ilerleyen bir müfredat sunulmaktadır.

Kitap serisini incele →