STM32F407 Sistem saat ayarları

Başlatan engerex, 30 Kasım 2013, 22:50:44

engerex



Yukarıdaki ayarlarda bir olumsuzluk görüyor musunuz? (APB1 prescaler 4 olarak görün.)

Aşağıdaki kodda led döngü ile 10 saniyede yanıp sönüyor. Bir problem yok. Bunu döngü değilde Timer2 kesmesi ile yapmak istediğimde zamanlama tutmuyor. Led 10 yerine 20 saniyede yanıp sönüyor. 2 kat fark var.
APB1 değerini 4 yerine 2 yaptığımda düzeliyor. Bu ayarları STM aracıyla yaptım. Bu araca göre APB1 prescaler ayarını 2 yapmam mümkün değil. İlgili frekans 42 Mhz'yi geçmemesi gerekiyor.

STM32F4 Discovery ve MikroC kullanıyorum.

void Timer2_interrupt() iv IVT_INT_TIM2 {
  TIM2_SR.UIF = 0;
  GPIOD_ODR=~GPIOD_ODR;
}

void main() {
char i=0;
GPIO_Digital_Output(&GPIOD_ODR, _GPIO_PINMASK_12 | _GPIO_PINMASK_13|_GPIO_PINMASK_14|_GPIO_PINMASK_15);

  // 10000ms
  RCC_APB1ENR.TIM2EN = 1;
  TIM2_CR1.CEN = 0;
  TIM2_PSC = 26249;
  TIM2_ARR = 63999;
  NVIC_IntEnable(IVT_INT_TIM2);
  TIM2_DIER.UIE = 1;
  TIM2_CR1.CEN = 1;

while(1)
{

//GPIOD_ODR=~GPIOD_ODR;
//Delay_ms(10000);

 }
}

z

Programin ilk hali hangi timer icindi?



https://www.picproje.org/index.php/topic,35721.msg255347.html#msg255347

Tablodan gorulecegi uzere timerlar farkli buslara bagli ve farkli frekansda kosuyorlar. Belki sorunun bundan kaynaklaniyordur.

  TIM2_PSC = 26249;
  TIM2_ARR = 63999;

Degerlerinden birisini yari yariya dusurursen sorunu kisa yoldan cozersin.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

engerex

Sadece Timer2'yi kullanıyorum.
APB1'i 2 yaptığımda timer2 zamanlaması düzeliyor ancak normalde 42mhz'yi geçmemesi gerekir. Bu ayar başka donanımları etkileyebileceği için vazgeçmiştim. Şimdilik sizinde dediğiniz gibi süreyi yarıya düşürmeye karar verdim. Bu seferde içime kuşku APB1 2 mi olması gerekiyor. Atladığım bir şey mi var? Bu sorunu çözmek için bulup incelediğim tüm projelerde kimse bu değerlere dikkat etmemiş görünüyor. Kimi projelerde fark 5-10 hatta 15 kata çıkıyor. MikroE'nin forumlarında kendi çalışanlarının paylaştığı örnek projelerde de aynı durum mevcut.

z

#3
Soruna odaklanmadan once gecmiste timerla ilgili yasadigimiz su konuya bir bakmakta fayda var.

https://www.picproje.org/index.php/topic,35896.msg256669.html#msg256669

Ustteki linkte soyle demisiz: Eğer APB prescaler 1 değilse Timerlar bağlı oluğu APB BUS frekansından 2 kat yüksek frekansla saydırılır.
(APB1 için prescaler değerimiz 4 dü. O halde Timer7 ye 42 değil 84Mhz giriyor.)

APB1 frekansi 42 MHZ fakat Timera 84Mhz giriyorsan

  TIM2_PSC = 26249;
  TIM2_ARR = 63999;

Timer prescaler cikisindaki frekansin 84E6/26250=3200Hz  Timer Int Frekansi=3200/64000=0.05 Hz  Zaman olarak 20 Sn. Pin 20 saniye birse 20 sn sifir. Bu durumda garip bir durum yok.

PSC ve ARR bagintilarinda icerik +1 olabilir dokumana bakmadim.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

engerex

#4
APB1 değerlerini 1 veya 2 yaparsam doğru süreyi elde ediyorum. Bu doğru bir yaklaşım mı?

mesaj birleştirme:: 01 Aralık 2013, 14:24:30

Hatam şu:
MikroE Timer Calculator aracını kullanarak STM32F4 işlemcisi 168 Mhz'de çalışacak Timer2 için 10 saniye kullanacağım diye seçiyorum. Oda bana TIM2_PSC = 26249; TIM2_ARR = 63999; değerlerini veriyor. Bende bu değerlerde 10 saniye elde edeceğim diye şartlanmışım ve debelenip duruyorum. Araç APB1 değerini ayarlama seçeneği mevcut olmadığı için 168Mhz için hep aynı değerleri veriyor.