Bilgisayarlar sadece makine dili (assembly) ile işlem yaparlar. Makine dili de yalnızca 0 ve 1’den oluşmaktadır. Mimari kısımlar ise bu aşamada farklılaşmaktadır. İşlemciler elektronik sistemlerdeki beyni oluşturur. Mimariler RISC ve CISC adı verilen 2 farklı yapıdan oluşmaktadır. İki mimarinin de tabloda da görüldüğü gibi farklı özellikleri bulunmaktadır ve özelliklerine göre tercih edilen ve yaygın kullanılan alanları da farklıdır. Örneğin CISC mimarisi zor işlemleri daha hızlı yaparken RISC mimarisinde ise enerji verimliliği ön plandadır. Bu yapılarından dolayı genellikle bilgisayarlarda işlem yoğunluğu fazla olduğu için CISC mimarisi kullanılır ve yüksek güce ihtiyaç duyarlar. (70 watt seviyelerine çıkabilmektedir işlemci çalışırken.) Buna rağmen telefonlarda işlem yoğunluğu değil enerji tüketimi daha ön planda olduğu için daha çok RISC mimarisi tercih edilir. (5 watt civarı güç tüketirler.) Arm da kendi içinde 3 farklı yapı barındırır. Bunlar Application, Real-time, Microcontrollerdır. Applications yüksek performanslı işlem yoğunluğu fazla cihazlarda, real-time gerçek zamanlı sistemlerde örneğin network ekipmanlarında, Microcontroller ise küçük maliyetli ve düşük güç tüketimi olan uygulamalarda tercih edilmektedir.
RISC | CISC |
Kısa ve az komutlar içerir. Bu nedenle çok hızlı çalışır. | Uzun komutları kolay işleme yeteneklerinden dolayı bellek verimliliği sağlar. |
Tek bir saat döngüsünde işlem yapar. | Çoklu saat döngülerinde işlem yapar. |
Uzun program ve basit komutlara sahiptir. | Kısa program ve karmaşık komutlara sahiptir. |
Daha fazla RAM ihtiyacı vardır. | RAM ihtiyacı düşüktür. |
çÇok fazla programlanabilir register'a sahiptir. | Az sayıda register'a sahiptir. |
Donanıma yöneliktir. | Programcıya yöneliktir. |
Genelde tablet, akıllı telefon gibi uygulamalarda kullanılır. | Genellikle dizüstü ve masaüstü işlem yükü fazla olan bilgisayarlarda kullanılır. |
ARM (Acorn RISC Machine) mimarisi de RISC kategorisindedir. Arm firması aslında çip üretmez. Çip üreten firmalara kendi tasarımlarını satarlar. ARM’ın müşterilerinden biri olan ST firması, arm tabanlı ürün çeşidi çok fazla olan bir firmadır, uygulamada da kullanılan ST firmasına ait STM32F100 serisi kartta Arm’ın Cortex-M3 işlemcisi bulunmaktadır. Ek olarak, Apple da Arm işletim sistemi kullanmaktadır. Genellikle telefonlar, gömülü sistemlerde düşük güç gerektiren uygulamalarda kullanılır. Bunlar da kendi içinde performanslarına- güç tüketimlerine göre değişkenlik gösterir. Kartlarda her serinin de kendi alt serisi var. Bu kartları ve özelliklerini detaylı incelemek için buradan ST’nin kendi sitesine göz atabilirsiniz.
Uygulamada kullanılan kart ST32F100 serisinden bir karttır. Genellikle STM32VLDISCOVERY olarak bilinmektedir. Kartın programlanması için IAR,Attolic, Cube MX, ve Keil uVision gibi farklı uygulamalar bulunmaktadır. Bu uygulamaların tercih edilmesi kullanım alışkanlıklarına göre değişmektedir. Bu uygulamada Keil’i kullanıldı ve kodlar C programlama dili ile yazıldı.
Kartların üstünde genelde iki bölüm olur. Biri programlayıcı bölümü ST'nin kendi sprogramlayıcısı ST-Link adı verilen kısım. İkinci kısım ve işlemci bölümü burada kullanıcı butonu ledler reset butonu bulunur. Kartı programlamaya geçerken sıkça yararlanacağımız kart ile ilgili dökümanlar gerekmektedir. Bunlar user manual ve reference manual.
STM32VLDISCOVERY Kartın Özellikleri:
STM32F100RB mikrokontrolcüsü, 128 KB flash hafızası, 8 KB RAM ve 64- pinli LQFP tasarımına sahip kare çip, ST-Link bulunmaktadır.
Kart 3V veya 5V ile beklenmektedir.
Kartın üstünde 2 adet kullanıcı ledi ve 1 adet push buton bulunmaktadır.
Pin bilgileri şekilde gösterildiği gibidir.
Uygulamada Kullanılan Malzemeler:
3 Led
STM32VLDISCOVERY kart
Jumper kablolar
Fritzing Devre Şeması:
#include "stm32f10x.h" // Device header
// farkli portlar kullanilarak 3 led yakma
void gpioConfig(); // Giris-Cikis pinlerin ayarlarinin yapilmasi fonksiyonu
void delay(); //bekleme fonksiyonu
int main (){
gpioConfig();
while(1){ // Kod blogunun sürekli calisacak yeri, Arduino'daki void(loop) gibi
GPIO_SetBits(GPIOB,GPIO_Pin_0); // B portunun 0. pinini set yap bu pine guc gidecek.
delay(3600000); // bekleme süresi fonksiyon ile olusturulmus delay bu clock ayari ile degil.
GPIO_ResetBits(GPIOB,GPIO_Pin_0); // B portunun 0. pinini resetle yani ledi söndür.
delay(3600000); // bekleme süresi
GPIO_SetBits(GPIOC,GPIO_Pin_0); //C portunun 0. pinini set yap, bu pine guc gidecek.
delay(3600000);
GPIO_ResetBits(GPIOC,GPIO_Pin_0);
delay(3600000);
GPIO_SetBits(GPIOA,GPIO_Pin_0); //A portunun 0. pinini set yap, bu pine guc gidecek.
delay(3600000);
GPIO_ResetBits(GPIOA,GPIO_Pin_0);
delay(3600000);
}
}
void gpioConfig(){
GPIO_InitTypeDef GPIOInitStructure1; // GPIO bir structure yapisindadir. içerisinde kullanilacak mode,pin,speed gibi tanimlar vardir.
GPIO_InitTypeDef GPIOInitStructure2;
GPIO_InitTypeDef GPIOInitStructure3;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); //her port iiçin clock hatti aktif edildi, kullanilacak hatlarin clocklari aktif edilmesi gerekir
RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOC,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIOInitStructure1.GPIO_Mode=GPIO_Mode_Out_PP; //pinin modu led outputu için pull push
GPIOInitStructure1.GPIO_Pin=GPIO_Pin_0;//çikisi hangi pine bagladigi
GPIOInitStructure1.GPIO_Speed=GPIO_Speed_50MHz; //hiz ayari
GPIOInitStructure2.GPIO_Mode=GPIO_Mode_Out_PP;
GPIOInitStructure2.GPIO_Pin=GPIO_Pin_1;
GPIOInitStructure2.GPIO_Speed=GPIO_Speed_50MHz;
GPIOInitStructure3.GPIO_Mode=GPIO_Mode_Out_PP;
GPIOInitStructure3.GPIO_Pin=GPIO_Pin_0;
GPIOInitStructure3.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIOInitStructure1); // B portu icin ayar yapildigi bildiriliyor.
GPIO_Init(GPIOC, &GPIOInitStructure2); // C portu içn ayar yapildigi bildiriliyor.
GPIO_Init(GPIOA, &GPIOInitStructure3); //A portu icin ayar yapildigi bildiriliyor.
}
void delay(uint32_t time){
while(time--);
}
Kommentare