ST32F3xxx HRTIM kesmesi.

Başlatan Logan, 08 Nisan 2016, 17:13:35

Logan

Merhaba arkadaşlar.

STM32F334'ün HRTIM ile 2 kanal 40khz PWM üretiyorum. Bu PWM'i h-bridge sürmek için kullanacağım. A ve B kanal PWM'in aktif ve pasif olma durumlarını sırasıyla "Timer Period" - "Compare1" - "Compare2"ve "Compare3" olaylarına bağladım. Compare1 ve 3 ile PWM'lerin iş sürelerini kontrol ediyorum. Buraya kadar sıkıntı yok.

Ancak "Timer Period" her sıfıra düştüğünde kesme almak istiyorum. MXcube içinde yer alan HRTIM ayar penceresinde "NVIC Settings" sekmesi altında kesme kaynaklarını seçiyoruz. 3 ayrı kesme kaynağı var.

1- Master timer global interrupt
2- Timer A global interrupt (Sanırım bunu kullanmalıyım)
3- Fault global interrupt

PWM üretirken TimerA sayıcısını kullandığım için sanırım 2. kesmeyi aktif etmeliyim diye düşünüyorum. Bu kesmeyi aktif ettiğimizde "stm32f3xx_it.c" dosyasına "HRTIM1_TIMA_IRQHandler" ekliyor. Ancak programı debug moda aldığımda buraya uğramadığını görüyorum. Nette bu konu ile ilgili örnek maalesef yok. Acaba programın başında kesmeyi aktif etmiyor muyum?

Konu hakkında fikir sahibi olan arkadaşlar yorum yaparsa çok sevinirim.

İyi çalışmalar.
İmza.

Klein

NVIC üzerinden kesmeyi aktif hal getiriyorsun. ancak TIM üzerinde bu kesmeyi aktif etmemiş olabilirsin.

Logan

#2
Merhaba.

İnit programında "hhrtim1.Init.HRTIMInterruptResquests = HRTIM_IT_NONE;" kısmında "HRTIM_IT_NONE" yerine "HRTIM_TIM_IT_RST" yazdım olmadı. "HRTIM_TIM_IT_CMP1" yazdım yine çalışmadı. Sanırım başka bir yerden aktif ediliyor.

Edit;

Timer A sekmesi altında "Timing Unit" içerisinde "Interrupt request source selection" var. Buraya 1 yazıp aktif ediyorum. Hemen altında "1st Interrupt Request Source" aktif oluyor. Ancak burada yer alan bütün kesme seçenekleri pasif!
İmza.

magnetron

F1xx te ben şöyle yapıyorum

bir NVIC aktif etme
  NVIC_InitStructure.NVIC_IRQChannel = TIM6_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 5;//3;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

  NVIC_Init(&NVIC_InitStructure);


bir de timer kesmesini aktif etme
TIM_ITConfig(TIM6,TIM_IT_Update , ENABLE);


F3xx serisinde de benzer olabilir

Logan

Merhaba arkadaşlar.

Problem devam ediyor. Bir önceki mesajımda bahsettiğim "Interrupt Source Selection" kısmını aktif ettim. Kesme kaynağı olarak da "Timer Compare 1 Interrupt Enable" seçtim. Ancak program kesme rutinine gelmiyor. Hatta her iki kesmeyi de aktif ettim (HRTIM Master Timer Global Interrupt ve HRTIM Timer A Global Interrupt). "stm32f3xx_it.c" içerisine alt programları da oluşturuyor. Fakat dediğim gibi program bu prosedürlere dallanmıyor.

@magnetron'un mesajından yola çıkarak kesmeleri elle aktif etmeyi denedim ve programın USER Code kısmına;

   HAL_NVIC_SetPriority(HRTIM1_TIMA_IRQn, 0, 0);
   HAL_NVIC_EnableIRQ(HRTIM1_TIMA_IRQn);

ekledim. Yine çalışmadı.

Fikri olan var mı acaba? Yoksa uğraşmaya devam.
İmza.

Logan

Günaydın arkadaşlar.

Dün bir önceki mesajı yazdıktan sonra "stm32f3xx_hal_hrtim.c" programı içindeki 127 prosedürü (yaklaşık 8000 satır) tek tek okudum ve birkaç denemeden sonra kesme rutinini aktif ettim. Şimdi istediğim gibi sorunsuz çalışıyor. Problemi çözdüm. 931. satırda yer alan yer alan "HAL_HRTIM_SimpleBaseStart_IT" ile aktif ediliyor.

İyi çalışmalar.
İmza.