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);
}
/**********************************************************/
/**********************************************************/
/**********************************************************/

27/06/2010 01:07
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?
30/06/2010 20:54
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
11/10/2010 12:16
Selam Nasılsınız siteniz Çok Güzel paylaşım Ve Bilgi Sağlıyor ilk yorumum benim teşekür ederim
7/07/2011 17:16
AYKUT HOCA TEŞEKÜR