Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Cortex ARM => Konuyu başlatan: promate - 18 Şubat 2012, 12:03:43

Başlık: STM32F407VG Gecikme Kütüphanesi
Gönderen: promate - 18 Şubat 2012, 12:03:43
1us den sn arası geçikme rutini belki ihtiyacı olan vardır.
gecikme hassasiyetini define deki katsayılarla ayarladım.

#define SysClock 168.0L //Sistem 168 Mhz de çalışıyor
#define DELAY_uS(A)  _usDelay(((long double) A * ((long double) SysClock)-5.50L) / 21.50L);

void _usDelay(long double Count)
{
  u32 i=0;
for(i=0;i< (unsigned long)Count;i++);
}


Kullanımı:
DELAY_uS(50.5);// 50.5 mikro saniye geçikme
DELAY_uS(55500); //55.5 mili saniye
DELAY_uS(2000000);// 2 saniye
Başlık: Ynt: STM32F407VG Gecikme Kütüphanesi
Gönderen: CLR - 18 Şubat 2012, 12:39:45
Paylaşım için teşekkürler fakat delay için systick veya başka timer kullanırsanız interrupt ile de kullanabilirsiniz, işlemci aynı yerde dönüp durmaz.
Aşağıda interrupt kısımlarınıda aktif edebilirsiniz. Tabii bu yapı cortex m3 için, m4 için benzetebilirsiniz.


void
dly_us(u16 us){
    stk_load.b32=(u32)us*k_us;      // reload reg. us*1us için deðeri yükle
    stk_val.b32=0;
    stk_ctrl.bits.ENABLE=1;
    while(!stk_ctrl.bits.COUNTFLAG);//0 iken bekle
    stk_ctrl.b32=0;
    stk_val.b32=0;
}


void
dly_ms(u16 ms){
    stk_load.b32=(u32)ms*k_ms;      // reload reg. 1ms için deðeri yükle
    stk_val.b32=0;                  // counterlarý ve flagleri temizle
//  stk_ctrl.bits.TICKINT=1;        // int. enable
    stk_ctrl.bits.ENABLE=1;         // systick enable
//  while(ms);                      // zaman süresince bekle
// int.siz kullaným
    while(!stk_ctrl.bits.COUNTFLAG);//0 iken bekle
    stk_ctrl.b32=0;                 // disable ve int kapalý, coreclock seçili
    stk_val.b32=0;                  // counterlarý ve flagleri temizle 
}


void
Systick_Init(u8 sysfreq){
    stk_ctrl.b32=(u32)0x0;          //int disable, clock kaynagi core clock, systick disable
    k_us=sysfreq/8;    
k_ms=(u16)k_us*1000;
}
Başlık: Ynt: STM32F407VG Gecikme Kütüphanesi
Gönderen: promate - 18 Şubat 2012, 12:48:05
evet  delay için en mantıklısı systick. ama böyle bir çözümde kullanılabilir