Stm32 serisi keil ile timer hakkında merak ettiklerim

Katılım
28 Mar 2021
Mesajlar
2
Puanları
1
Yaş
24
iyi günler. iyi forumlar öncelikle
stm32f103c6bx te mdk-arm v5 kullanıyoruz. okulda gördüğümüz timer , timer kesmesi konusunda hocanın sorduğu bir soruya kimseden yanıt gelmedi. üzerinde çok düşündüm ve cevabını hala merak ediyorum.
SORU:
tek timer kullanarak 3 farklı ledi farklı zamanlarda stop emri vermeden nasıl çalıştırırız
(hoca süreleride söyledi led_1=200 ms , led_2=300 ms , led_3=400 ms te bir yanıcak ve ortak katlarında beraber yanıcaklar yani sıra sıra yanma söz konusu değil led_1 2.kez yanarken led_3 ilk kez yanıcak)
bunu nasıl yapabilirim. yardımcı olursanız çok sevinirim
dipnot=ilk forumum bi yanlışım varsa affola
 
interrupti 100 ms ayarlarsin.
Her interruptta a,b,c degiskenlerini arttirirsin.
a=2 de yak a=4 de söndür a yi sıfırla
b=3 de yak b=6 da söndür b yi sıfırla
c=4 de yak c=8 de söndür c yi sifirla
 
Hal Library mi SPL mi kullanacaksın?

hassas olmasını istiyorsan timeri 1 ms kurarsın ama timer kesme içinde, ama timer callback içinde birerli arttırırsın. whlile içinde de kontrol eder işlem yaparsın.
Burada dikkat edeceğin şey while içinde delay kullanmaman olacak. Altda ki kod gösterim amaçlıdır.

uint16_t led1_say = 0, led2_say = 0, led3_say = 0; timer_call_back() { led1_say ++; led2_say ++; led3_say ++; } int main(void) { gpio_ayarla(); timer_init_yap(); whilw(1) { if(led1_say >= 200){ led1_yak; } if(led1_say >= 400){ led1_son; led1_say = 0;} if(led2_say >= 300){ led2_yak; } if(led2_say >= 600){ led2_son; led2_say = 0;} if(led3_say >= 400){ led3_yak; } if(led3_say >= 800){ led3_son; led3_say = 0;} } }
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için onları kabul etmelisiniz. Daha fazla bilgi edin…