STM32-Özel Kütüphane
| Merhaba, STM32; arm cortex m3 core tabanlı bir işlemcidir. Özellikleri tek kelimeyle mükemmel denebilir. Hızı 72Mhz’dir ama yeni versiyonlarında 120Mhz’e kadar çıkıyor. Dahili donanım microcontroller olarak nerdeyse herşey var. (12bit ADC, DAC, DMA, I2C, SPI, UART, USB vs.) Programlanması ise ST kütüphanesini kullanırsanız çok basittir ama çok fonksiyonel olmaz. Avantajı ise pek kafa patlatmazsınız, nasılsa hazır fonksiyonlar.
Benim seçtiğim yol ise en zoru diyebiliriz. Kendi kütüphanemi kendim oluşturdum ve 1bit/16bit/32bit erişim saylayan bir kütüphane oluşturdum. ST kütüphanesini kullanan arkadaşların çoğu arka planda işlemci neyapıyor bilmez. Bu kütüphaneyi oluşturmam yaklaşık 10 günümü aldı ama mükemmel sonuç oldu diyebilirim.
Öncelikle şunu söylüyeyim kütüphaneyi burada paylaşmıyacağım fakat kod örnekleri olacak, bilmeyenler mantığı kapacaktır. C ve derleyicinin gücü sayesinde böyle bir kütüphane oluşturulabilir.
Aşağıda bazı örnekler ekliyeceğim ve 32bite PIC’e bit bit yazıldığı gibi yazıldığını göreceksiniz. Size yeni fikirler verecektir.
/**********************************************************/ /**********************************************************/ /*============Aykut ULUSAN, Elektronik Mühendisi, İzmir============= */ /**********************************************************/ /**********************************************************/ #define mylcd my_lcd_reg->lcd // porta mylcd olarak isim verdim mylcd.bits.rs=1; // 1bit yazılır - Register Selecte Bagli pin 1 mylcd.bits.data_4bit=da_ta>>4; // 4bit yazılır - high order nibble mylcd.bits.enb=1; // 1bit yazılır - enable 1 // systick'in load registerine 32bit sayı yükle stk_load.b32=(u32)us*k_us; // systick'in Control registerinin Enable bitini 1 yap stk_ctrl.bits.ENABLE=1; // systick'in Control registerinin COUNTFLAG == 0 iken bekle while(!stk_ctrl.bits.COUNTFLAG);// bekle // porta'nın 9'unu 50Mhz bus hızı ve alternate pushpull yap // 2'şer bit erişim gpioa_crh.bits.MODE9=GpioMODE_50mhz_out; // 50mhz out gpioa_crh.bits.CNF9=GpioCNF_PUPD_in_APP_out; // alternate pushpull // 16bit erişim usart1_brr.b16.low=0x16DA; // 9600, rcc_apb2enr.b16.low=0x007d; // A,B,C,D,E ve AF enable /* Aşağıda STM32 Reset Clock Configurasyon ayarlarını yapan program var, Programın nasıl yapıldığını gösteren bir örnek. */ void rcc_init(void){ rcc_cr.bits.HSION=1; while(!rcc_cr.bits.HSIRDY); //Reset SW[1:0], HPRE[3:0], PPRE1[2:0], PPRE2[2:0], ADCPRE[1:0] and MCO[2:0] rcc_cfgr.b32&=(u32)0xF8FF0000; rcc_cr.b32&=(u32)0xFEF6FFFF; // HSEBYP bit clear rcc_cr.b32&=0xFFFBFFFF; // PLLSRC, PLLXTPRE, PLLMUL[3:0] and USBPRE bits clear rcc_cfgr.b32&=(u32)0xFF80FFFF; rcc_cir.b32=0; rcc_cr.bits.HSERDY=0; rcc_cr.bits.HSEON=1; // enable while(!rcc_cr.bits.HSERDY); rcc_cfgr.bits.HPRE=0; rcc_cfgr.bits.PPRE2=0; rcc_cfgr.bits.PPRE1=4; // 56/8=7Mhz'de çalışsın , acelesi yok rcc_cfgr.bits.ADCPRE=3; flash_acr.b32&=((u32)0x00000038); flash_acr.bits.LATENCY=2; flash_acr.bits.PRFTBE=1; // Prefetch buffer enable, flash'a yazmak için gerekli // Pllclk=8mhz*7mhz=56mhz rcc_cfgr.bits.PLLXTPRE=0; // xtal'i bölme rcc_cfgr.bits.PLLSRC=1; // PLL'e HSE'yi bağla rcc_cfgr.bits.PLLMUL=5; // pll nable rcc_cr.bits.PLLON=1; while(!rcc_cr.bits.PLLRDY); rcc_cfgr.bits.SW=2; while(rcc_cfgr.bits.SWS!=2); } /**********************************************************/ /**********************************************************/ /**********************************************************/
sn.aykut bey bir sorum olacak.ds picin diğer norma piclerden farkı nedir?bir mikroişlemcimidir?biraz acıklarsanız sevinirim.birde ben daha pic16f serisi picler programlıyorum.daha ileri gitmem için ne önerebilirsiniz?
Merhaba Mustafa,
Aşağıdaki linkte oldukça açık ve örneklerle açıklamıştım, inceleyebilirsin.
Hemde C30 kullanmasını öğrenebilirsin.
http://dergi.picproje.org/dspic30fxxx-serisine-giris-c30-ile-nokia-grafik-lcd-uygulamasi
Selam Nasılsınız siteniz Çok Güzel paylaşım Ve Bilgi Sağlıyor ilk yorumum benim teşekür ederim
AYKUT HOCA TEŞEKÜR
bende bunu anlamıyorum. madem paylaşmıyacaksınız bu yazıyı niye yazıyorsunuz ki.
Merhaba Hasan Ali,
İsteseydim mesajını silerdim ama benim karekterime ters olduğu için yapmadım. Sorun hakkında ise çünkü bu site kişisel bir site, her yapılan, söylenen paylaşılacak diye birşey yok. Bu paylaşımdan sen bişeyler çıkaramamışsın ama çok kişi çok şeyler öğrendi veya dahada geliştirdi. Sorun bu şekilde değilde, mantığını öğrenme açısından olsaydı, daha çok şey kazanırdın değil mi?.
Hocam , Verdiğiniz bilgiler için çok teşekkürler… Çok güzel paylaşımlarda bulunuyorsunuz. Emeklerinize Sağlık…
Merhaba. 32-Bit konusunda yeniyiz. BLDC motor ve yanında bazı başka şeylerin de kontrolü, ve C dilini PC’den direk kullanabilmek açısından 32-Bit MCU kullanmayı düşünüyoruz. PIC, TI, Atmega ‘dan birini seçeceğiz. Kit’ler açısından PIC en gelişmiş görünüyor. Bu amaçla hangi PIC kit’ini kullanmayı tavsiye edersiniz? Teşekkürler.
Merhaba,
PIC derken pic32’den mi bahsediyorsunuz? Yoksa 8bit PIC serinden bahsediyorsanız, STM32 ile onu kıyaslamak STM32’ye hakaret kabul edilir. Aralarında uçurum fark var. PIC32’den bahsediyorsanız, hiç kullanmadım pek bilgim yok ama
STM32 kendini kanıtlamış bir işlemci, her türlü projede çok kullanıldı ve sorunsuz. PIC32 ise yeni, ben henüz endüstriyel bir cihazda PIC32 görmedim ama yüzlerce stm32 gördüm.
PIC serisi tavsiyesi bekliyorsanız, 16bitlik PIC24 serisinden port ve donanım modülleri yeterli olanlardan seçebilirsiniz, onlarda yetenekli ama STM32 ile yine kıyaslanamaz.