güvenilir bir gecikme fonksiyonu , STM32F4 için

Başlatan magnetron, 26 Şubat 2013, 16:27:02

magnetron

merhaba forum,

STM32F4 'de mikrosaniye gecikmeler elde etmek için aşağıdaki fonksiyonu kullanıyorum
ama güvenilir değil lineer çalışmıyor ( diye şüpheleniyorum )

void Delay(volatile uint32_t nTime)
{
   while(nTime--);
}


bunun yerine önerebileceğiniz güvenilir bir mikrosaniye gecikme fonksiyonu var mı ?

teşekkür

fatih6761

SysTick veya kullanmadığınız yüksek çözünürlüklü bir Timer kurabilirsiniz. Zaten verdiğiniz yöntem işlemci saat frekansına bağlı.

z

Mikrosaniye bazında 1 kaç mikrosaniye gecikme mi lazım?

Gecikmenin üst sınırı nedir?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

haydarpasamikro

__nop();

ile 1 boş komut işleme süresi bellidir. Bu sisteminizin komut hızı ile sabittir. Küçük süreler için kullanılabilir. Parametre almayan bir fonksiyon ile farzedin 10 Mhz hızda 0,1us sürsün. 1 us için 10 adet gerek. Ancak fonksiyon çağırma ve dönme süreleri de 2 şer 0,2us olsa o zaman:

void Bekle_1us(void)   0, 2us
{
__nop();                     0,1us
__nop();                     0,1us
__nop();                     0,1us
__nop();                     0,1us
__nop();                     0,1us
__nop();                     0,1us
}                                0,2us

                 toplam      1us

Tabi bu arada tüm kesmeler genel kontrol kısa süreliğine pasif edelim ki araya girmesin.
Mikro Dünyası.Haydarpaşa Teknik ve Endüstri Meslek Lisesi Mikrodenetleyici Atl. Şefi

muhittin_kaplan

Nedense ARM la çalışmaya başladığımdan bu yanadır, Delay Yazdığımda Ulvi Bir ses "Olm Yapma Delay Yapma" diyor.

magnetron

cevaplara teşekkür ederim

ama programdaki hata başka bir yerden çıktı

STM32F103 de BRR ve BSRR registerleri vardı
ben de STM32F4 te bunların karşılığı zannederek BSRRH ve BSRRL registerlerini kullandım

ama aynısı değilmiş - bu yüzden istediğim sinyalleri oluşturamadım

ben de direk ODRye yazdım ve problemi çözdüm