Sıfırdan STM32F0 Dersleri – Harici Kesme (External Interrupt)

  • 3 sene önce, Baran EKREM yazdı.
  • 0 Yorum
  • 302 Kişi Okudu

stm32f0discoveryBu yazıda STM32F0 ile External Interrupt (Harici Kesme) yi göreceğiz.Kesmelerden biraz bahsetmek gerekli.Kesmeyi en iyi örnek ile anlayabiliriz.Ana program da bir sürü işimiz var ama arada sırada 1 saniyelik bekleme yapmamız gerekiyor.Bu beklemeleri yaparsak diğer işlerimiz aksayacak o zaman ne yapabiliriz ? Mesela bir timer kurarız.Bu timer 1 saniyeye ayarlanır ve her saniyede bir kere kesme üretir.Kesme oluştuğunda bir değişkeni set ederiz ve ana programda bunu kontrol ederiz.Bu sayede hiç bir işi aksatmadan 1 saniyelik aralıklar ile hiç bir şeyi aksatmadan istediğimiz yapabiliriz.Hatta günlük hayatta bile kullanırız.Yemek pişirirken başında bekliyoruz.
Kapı çaldı ocağı söndürmeyiz dimi ? Kapıya koşar misafiri karşılarız.Tabi bir gözümüz ocakta ! Yemek pişince cosss ! diye bir ses, kapıdaki kişiye ara verip yemeğe koşarız. Bu süper örneği kim anlattı bilmiyorum ama bence artık projeye geçelim.Laf lafı açıyor. :) Bildiğimiz üzere harici kesme herhangi bir pini(Bu özelliği olan pinler) High to low yada Low to high geçişini algılayarak oluşturulan kesmeye denir.Bu pin logic konumda olmalıdır.Ayarlarımıza göre bu pini lojik 0 dan lojik 1’E geçtiği anda kesme üretebilecek şekilde kontrol edebiliriz.Buton okuma işlemi gibi düşünebiliriz ama butonu sürekli kontrol etmemize gerek yoktur çünkü herhangi bir geçişte otomatik kesme üretir.L-H, H-L özelliğine yükselen kenar(Rising) – Düşen kenar(Falling)denir.Biz butona bastığımızda kesme üreten ve her bastığımızda LED’i Toggle eden bir uygulama yapalım.Bu uygulamada Rising kullanalım.Bu durumda bu pini low da tutmak için pull-down yapalım.Kitin kendi üzerinde 2 adet LED ve bir adet kullanıcı bulunuyor.Kitin şemasında görüldüğü üzere C portunun 8. ve 9. pinlerinde LED ler A portunun 0.pinin de ise button mevcut.Şimdi kesmelere ufak bir giriş yapmadan önce NVIC den bahsetmek istiyorum.NVIC birden fazla kesme olduğundan bu kesmelerin bir arada uyumlu çalışmasını sağlamak için yapılmış bir sistem olarak yorumlayabiliriz.Bir örnek düşünelim. Timer kesmesi olsun ve harici kesme de aktif olsun.Timer bir saniyelik kesme oluştursun.Bu kesme tam oluşurken butona basıp harici kesme oluşturduk.Olmaz demiyoruz teorik olarak bir düşünelim. :) Yani iki kesme çakıştı.Önceliği hangisine vereceğimiz NVIC ile ayarlıyoruz.NVIC in bir diğer özelliği kesme fonksiyonlarının isimlerinin belirtmesidir.Şimdi kodlar ile bu işi nasıl yaptığımızı görelim.

Öncelikle Clock verme işlemlerini yapıyoruz.

Daha sonra structure ları tanımlıyoruz.

GPIO init işlemlerini yapıyoruz.A portunun 0. pinine bağlı butonu kullanacağımız için pini giriş olarak tanımladık ve dahili olarak pull-down direncini kullandık. C portunun 8. bitin deki mavi LED’ i çıkış olarak ayarladık.

Şimdi hangi portun hangi bitini harici kesme olarak kullanacağımızı belirtiyoruz ve ayaları yapıyoruz.

NVIC ile ilgili süper örneğim den sonra kod üzerinde şu şekilde göstereyim. :)
IRQChannel ile kesme fonsiyonunun prototipinin veriyoruz.Bunlar belirlidir.Hangisi nedir diye öğrenmek istersek stm32f0xx.h’ı açıp 210 nolu satıra gidiyoruz.
NVIC_IRQChannelPriority ile bu kesmenin önceliğini belirtiyoruz.(0-3)Aktifleştirip ayarları yüklüyoruz.

Bu değişikliği main içerisinde kontrol ederek LED durumunu değiştirebiliriz.Yada kesme içinde değiştiririz.Ama Gökhan ağabeyden öğrendiğim gibi “Kesme içinde iş yapılmaz.Değişken set edilir ana programda kontrol edilir.” :)

Kodların tamamı;

Bir Yorum Yazın