STM32F103C8T6 (STM32F1) Mikrodenetleyici İncelemesi

Önceki makalede çin malı STM32 geliştirme kartında STM32F103C8T6 mikrodenetleyicisinin bulunduğunu söylemiştim. Makale yeteri kadar uzadığı için mikrodenetleyiciyi ayrı bir makalede inceleme kararı aldım. Şimdi sadece mikrodenetleyicinin donanımını temel kaynaklar vasıtasıyla incelemeye başlayalım. Önceki makalede verdiğimiz bağlantıyı burada tekrarlayalım.

https://www.st.com/en/microcontrollers/stm32f103c8.html

Bu bağlantı STM32F103C8 serisine ait üretici tarafından sağlanan teknik bilgileri içermektedir. O yüzden bir mikrodenetleyici hakkında en güvenilir ve kapsamlı bilgiyi alacağımız kaynak bu olmalıdır. Tekrar belirttiğimiz üzere Youtube’daki çoluk çocuktan STM32 öğrenmeye kalkmak büyük hata olacaktır. Tutorial, video ve kurs gibi kaynakları kullanmayın demiyorum. Fakat bir tutorial ya da Youtube kanalını tek kaynak olarak görmek ve oradan öğrenmeyi beklemek büyük hata olacaktır. Bunlar ancak “öğrenmeye yardımcı” kaynak olabilir. Asıl öğrenme kaynakları ise kitaplardır. Amazon’a STM32 yazdığımızda çıkan kitaplar boş yere yazılmamıştır.

Amazon’a STM32 yazdığımızda kitap sonuçları arasında 88 kitap karşımıza çıkmaktadır. Bunların büyük bir kısmı İngilizce olsa da ciddi bir kısmı da Çincedir. Hatta Rusça kitap bile vardır. Öğrenmek için Türkçe kitap çıkmasını beklemek hata olacaktır. Türkçe kitapların da yayıncılığın da durumu malumdur. Bu kitaplar üniversitelerde ders kitabı olarak okunurken biz bunları bırakıp da Youtube videolarından ve blog sitelerinden öğrenmeye kalkmamalıyız. Ancak kitaplar “erişilebilir” olmadığı durumlarda mecburen bunları kullanmamız gerekebilir. STM32 ve ARM kitaplarının internetten erişilebilirliği ise gayet iyidir.

Bazen bir mikrodenetleyiciyi öğreneceğimiz zaman hakkında hiç tutorial veya kitap yazılmamış olabilir. Bu durumda “kaynak yok” dememiz doğru olmaz. Üretici datasheet ve teknik dokümanlarla yeteri kadar kaynağı sağlamaktadır. Bu blog yazısı gibi diğer kitap ve içerikler eğitim maksatlıdır.

Şimdi üreticinin sayfasından STM32F103C8 mikrodenetleyicisini inceleyelim.

ARM® 32-bit Cortex®-M3 CPU Çekirdeği 

Dikkat edilirse F0 ve L0 serilerinde M0 ya da M0+ çekirdek mevcuttu. Çekirdeğin daha üst seriden olması bize daha fazla mikroişlemci özelliği vermektedir. Mikroişlemcinin komutları arttıkça daha karmaşık uygulama yapabilme imkanımız olur.

72 MHz azami frekans

8-bit mikrodenetleyicilerin genel olarak azami 20MHz’de çalıştığını düşünürsek bu 8 bite göre oldukça performanslı bir işlemcimiz var demektir. Aynı zamanda ARM mimarisinde olması ve M3 çekirdeğine sahip olması da bu performansı etkilemektedir. 1.25 DMIPS/MHz Dhrystone 2.1 performans ölçüm programında (benchmark) çıkan sonuçtur.

– Tek-çevirim çarpım ve donanım bölmesi

Bu işlemcinin komut kümesine ait bir özelliktir. Basit mikroişlemcilerde çarpma ve bölme işlemleri sıkıntılı olabilir. En temel dört işleme bile donanım destek vermeyebilir. Örneğin çarpma işlemini “x” defa birbiriyle toplamak olarak elle yapabiliriz veya çarpma işlemi birden fazla çevirimde donanımsal olarak yapılabilir. Bir komutun birden fazla çevirimde yürütülmesi donanım yetersizliğinden kaynaklanmaktadır. Üretici de bu yüzden çekirdeğin sağlamlığını ilk sayfada açıklamak istemiştir. Çünkü rakiplere göre dikkate değer bir artıdır.

– 64/128KB Flash Hafıza

Program hafızası olarak kullanılan Flash hafızanın büyüklüğü bizim yazacağımız programın büyüklüğü ile doğru orantılı olmalıdır. Bu durumda 512KB hafızanın olması çoğu zaman gereksiz olacaktır. Yalnız bu işlemcilerde PIC ve AVR’de olduğu gibi bare metal yani alt seviye aracısız program yazmak yerine Firmware ve middleware kullanarak program yazmak isteyebiliriz. Bu durumda hafıza ve performans beklentisi yükselecektir.

 -20 KB SRAM

PIC mikrodenetleyicilerde daha iyi görsek de AVR mikrodenetleyicilerde özellikle TFT ekran ve VGA gibi görüntü uygulamalarında ciddi bir RAM yetersizliği söz konusuydu. 1, 2 ya da 4KB olan RAM bellek böyle fazla veri işlememiz gereken uygulamalarda yetersiz kalıyordu. Hatta bazı PIC mikrodenetleyicilerde bu RAM oranı birkaç yüz bayt ile ifade edilmektedir. 20KB yine program hafızası gibi çok yüksek olmasa da bu seviyedeki bir mikrodenetleyici için yeterli olacaktır.

– 2.0-3.6V Çalışma Gerilimi

32-bit mikrodenetleyiciler ile beraber 5 voltluk beslemeyi unutmamız gereklidir. Artık 3.3V ile işimizi yapmamız gerekecektir. Bu çoğu zaman mantık seviyelerinin farklılığından dolayı uyumsuzluk sorunu olarak karşımıza çıkacaktır. Pek çok modül halen 5V ile çalışmaktadır. Eğer 3.3V’da çalışmaya uyumlu değilse mantık seviyesini çevirecek entegreleri kullanmamız gerekir. Bu 5V seviyede çalışırken de bizim için sorun olmaktadır. Örneğin 5 voltla çalışan bir sistemde SD kart kullanmak istediğimizde gerilim bölücü kullanmak zorundayız.

– POR, PDR, ve Programlanabilir Gerilim Tespit Edici(PVD)

Her mikrodenetleyicide olduğu gibi bunda da çeşitli güç ve reset özellikleri bulunmaktadır. POR yani power-on-reset gibi temel özelliğin yanında çeşitli birimler de bulunmaktadır. Bunları yeri geldiğinde sonra inceleyeceğiz.

– 4-16MHz Kristal Osilatör
– Dahili 8MHz RC Osilatör

Dilersek kristal osilatör kullanacağımız gibi dilersek dahili osilatör kullanarak devreden tasarruf yapabiliriz. Ama dahili osilatörlerin doğruluğu kristallere göre daha az olduğu için hassas uygulamalarda öncelikli olarak harici kristal kullanmamız gereklidir.

– Dahili 40KHz RC Osilatör
Bu osilatör uyku modunda ve güç tasarrufunda oldukça işimize yarayacaktır. Mikrodenetleyici ne kadar hızlı çalışırsa o kadar güç tüketir. O yüzden güç tasarrufunu sağlamak için daha yavaş hıza çekmemiz gereklidir. Bunu günümüzde dizüstü bilgisayarlar bile yapmaktadır. Burada ise bunu 40KHz osilatör ile yapmaktayız.

– RTC için 32KHz kalibre edilmiş osilatör

Bu mikrodenetleyicilerde dahili RTC bulunduğu gibi bu saati çalıştıracak 32KHz osilatör de bulunmaktadır. Bu mikrodenetleyicinin kullanıldığı uygulamalarda zaman verisi önemli olup sıklıkla RTC entegreleri kullanılmaktadır. Bu ihtiyacı ortadan kaldıran bir özellik olarak karşımıza çıkıyor.

– Sleep, Stop and Standby modları
AVR mikrodenetleyicilerde gelişmiş bir uyku ve çalışma kontrolünün olduğundan bahsetmiştik. AVR derslerimizi okuduğunuzda bunu görebilirsiniz. Burada da çeşitli çalışma modları bulunmaktadır. Bunların ayrıntısını datasheetin ilerleyen sayfalarında göreceğiz.

– RTC ve yedekleme yazmaçları için VBAT desteği

Bilindiği üzere RTC sıfırlanmamak ve çalışmak için bir pile ihtiyaç duymaktadır. Elektrik kesildiğinde belleğindeki veriler silinmektedir. O yüzden küçük bir pil ile bunu besleyebiliriz. Bu mikrodenetleyici de bunu desteklemektedir.

• 2 x 12-bit, 1 µs ADC  (16 kanala kadar)

AVR’nin ADC’si  saniyede 150k’ya kadar bir ölçüm yapabiliyordu. Burada ise 1us yani saniyede 1 milyon ölçüm yapan bir ADC görüyoruz. STM32F3’de ise saniyede 5 milyon ölçüm yapıyordu. 12 bit olması sayesinde AVR’ye göre 4 kat daha hassas ölçüm yapabiliyoruz. Yalnız ölçüm aralığı 0 ve 3.6V arasında oluyor. PIC ve AVR’den STM32’ye geçecekler dikkat etmeli.

Ayrıca örnek tutma, çift ölçüm ve sıcaklık algılayıcısı da mevcut. Sıcaklık algılayıcısı mikrodenetleyicinin içinde olduğundan ortamın sıcaklığını ölçmek için kullanılması pek doğru olmaz. Bizim kullandığımız bilgisayarlardaki işlemci sıcaklığı algılayıcısı olarak düşünebiliriz.

• 7 Kanal DMA Denetleyicisi 
DMA (Direct Memory Access) CPU’dan bağımsız olarak veriye erişmemizi sağlar. Böylece işlemcinin yükünü hafifletmiş oluruz. Aynı zamanda birden çok işlemi eş zamanlı yürütme görevinde de kullanılır. Bu birim zamanlayıcı, ADC, SPI, I2C ve USART çevrebirimlerini desteklemektedir.

• 80’e varan hızlı I/O Portu

Giriş ve çıkış portlarının  hızlı olması her zaman yapabileceğimiz uygulamaların sayısını artırır. Örneğin Arduino’da 150KHz gibi oldukça yavaş bir giriş ve çıkış olması iletişim, sinyal ve frekans uygulamalarında oldukça sıkıntı ortaya çıkarmaktaydı. AVR’de sadece basit giriş ve çıkış yazmaçlarıyla aynı kartta 4MHz’e kadar bir çıkış alabilmemiz mümkündü. SBI ve CBI işlemci komutlarının 1 çevirim yerine 2 çevirimde çalışması bunu iki kat yavaşlatır. Eğer bir çevirimde çalışsalardı 10MHz’e kadar çıkış alabilirdik. (Eğer 20Mhz osilatör kullanılıyorsa)

Bütün giriş ve çıkışlar 16 dış kesme vektörüne haritalandırılabilir ve hemen hepsi 5V toleranslıdır.

-Debug Modu

STM32 mikrodenetleyicilerde ister F0 serisi olsun ister F7 serisi olsun yani en alt seviyeden en üst seviyeye kadar olan denetleyicilerin hepsinde ST-LINK adlı ucuz bir programlayıcı ve hata ayıklayıcı cihazı kullanılır. Bu uygun fiyatlı ürün SWD ve JTAG arayüzlerini desteklemektedir. Mikrodenetleyicinin sayfasında da bu modu desteklediği belirtilmektedir.

– 7 Adet Zamanlayıcı

Arduino ile zamanlayıcılardan bihaber program yapanlar da olsa da bazen AVR’nin üç adet zamanlayıcısı bile uygulamamızda yetersiz kalmaktadır. Örneğin hem frekans okumak ve hem de zamanlayıcı ile frekans üretmek istediğimizde tek bir 16-bit zamanlayıcıyı kullanamadığımızdan iki ayrı mikrodenetleyici kullanmak durumunda kalıyoruz. 8-bit zamanlayıcılar ise kısıtlı bir zaman aralığında çalıştığı için istediğimiz hassasiyeti veremeyebilir.

Burada 3 adet 16-bit zamanlayıcı yanında 16-bit motor kontrol PWM zamanlayıcısı da bulunmaktadır. 2 adet watchdog zamanlayıcısı ve SysTick zamanlayıcısı 24-bit sayacıyla bulunmaktadır.  Üst seri denetleyicilerde bu zamanlayıcı sayıları çok daha fazla olsa da üç adet 16-bit genel maksatlı zamanlayıcı 8-bit mikrodenetleyicilere göre işimizi oldukça kolaylaştırmaktadır.

– 9 Adete Kadar İletişim Arayüzü 

Gelişmiş bir mikrodenetleyicinin olmazsa olmazı iletişim arayüzlerinin fazlalığıdır. Bilindiği gibi dijital sistemler tek bir protokol ile birbirleriyle iletişime geçmez. Bazen PWM bile iletişim maksatlı kullanılmaktadır. Bu durumda bu mikrodenetleyiciye bağlayabileceğimiz birimlerin ve sistemlerin fazlalığı desteklediği iletişim protokolleri ile doğru orantılıdır. Denetleyicinin desteklediği protokoller şunlardır,

  • 2 x I2C
  • 3 x USART
  • 2 x SPI
  • CAN Bus
  • USB 2.0

Mikrodenetleyicinin dikkate değer özellikleri bunlardır. Görüldüğü gibi çok ahım şahım olmasa da 8-bit mikrodenetleyicilerin kesinlikle yerini dolduracak seviyededir. Üstelik 8-bit denetleyicilerden uygun fiyatlı olması da başka bir artısıdır. Fakat yine de 8-bit denetleyiciler basitliği ve kullanım kolaylığı ile bir artıya sahiptir.

UYARI!!

Gökhan Dökmetaş

"Arduino Eğitim Kitabı" ve "Arduino ve Raspberry PI ile Nesnelerin İnterneti" kitaplarının yazarı. Başkent Teknoloji ve Dedektör Merkezi'nde Ar-ge Sorumlusu. Araştırmacı-Yazar.

You may also like...

2 Responses

  1. Anonim dedi ki:

    Hocam elinize emeğinize sağlık.Teşekkürler.

  2. Anonim dedi ki:

    teşekkürler

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.