Künye

Okuduğunuz yazı STM32 Uygulamaları Kategorisi altında 23/04/2010 Tarihinde Tarafından Yazıldı - 8.870 kez okunmuş

Yazı Seçenekleri : | Pdf Kayıt | Arkadaşına Gönder | Yazıyı Paylaş | Geri izleme | Yorum takibi

Etiketler : , , , , , , ,

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