IAR ile STM8S – Clock, CCO ve GPIO

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

Bir önceki yazıda proje oluşturmayı ve basit bir led örneğini tamamlamıştık. Bu yazıda Clock ayarlarının nasıl yapıldığını ve temel GPIO komutlarının nasıl kullanıldığını göreceğiz. Öncelikle şunu belirtmek gerekirse ST yayınladığını standart kütüphanesi ile işleri bir hayli rahatlatıp basite indirgemiş. Kullandığınız kütüphane fonksiyonları tamamen elinizin altında. Yapacağı işin dışınca herhangi bir şeye müdahale etmiyor. Bu sayede register’leri kontrollü bir şekilde takip ediyor ve olağan dışı durumlar ile karşılaşmıyorsunuz. CCS C kullananlar bu durumlardan bir kaçını tecrübe etmiştir. İlk olarak yapılması gereken işlem her zaman olduğu gibi Clock ayarlarıdır.

Clock ayarlarını yapmak için öncelikle projemize stm8s_clk.c dahil etmemiz gerekmektedir. Ben önceki yazıda bulunan LED örneği üzerinden gideceğim. Benim kitim de harici bir kristal mevcut değil bu yüzden dahili olan 16 MHz’lik RC osilatörünü kullanacağım.
Yukarıda görmüş olduğunuz resim STM8S için Clock yapısıdır. Burada;

  • HSI (High Speed Internal)
  • LSI (Low Speed Internal)
  • HSE (High Speed External)

olmak üzere 3 çeşit clock modu vardır. Biz dahili olanı kullanacağız. Öncelikle CLK_DeInit fonksiyonu ile default hale getirip HSI’yı aktif ederek gerekli bölücü değerlerini ayarlamalıyız.

Burada CLK_ClockSwitchConfig fonksiyonu Clock kaynakları arasında geçiş yapmanızı sağlıyor. Eğer HSE kullanıyorsanız ve bir problem olduysa hızlı bir şekilde HSI’yı aktif edip durumu kurtarabiliriz. Özellikle bu durumu başka bir yazıda inceleyip test edeceğim. Bölücü değerlerini 1 olarak ayarlarsak maksimum hızı elde ederiz. Dikkat ettiyseniz burada bölücü değerleri tek bir fonksiyon ile yapılmış. Bu ST’nin azizliği 🙂 Clock ayarları bu şekilde tamamlanıyor. Burada eklemek istediğim diğer bir nokta CCO özelliğidir. CCO yani Configurable Clock Output benim işlemcimin PC4 bacağında bulunan ayarlanabilir bir Clock çıkışıdır. Sistemin izin verdiği değerleri dışarı aktararak hem sisteminizin Clock frekansını kontrol edebiliyor aynı zamanda farklı sinyal ihtiyaçlarını direk olarak MCU’dan alabiliyorsunuz. Üstelik bu özelliği aktif etmek çok kolay.

Bu şekilde CPU hızının 64′ bölünmüş halini PC4’den alabiliyoruz.

Aktif ve pasif hale getirmek için ise şu fonksiyonu kullanıyoruz.

Çeşitli frekansları elde etmek için şu parametreleri kullanabilirsiniz. Kütüphanede tanımlanan değerler;

Clock ayarlarının tamamladığımıza göre GPIO komutlarına geçelim. Öncelikle LED için konuşacak olursak bir pini çıkış için şu şekilde init ederiz.

İlk parametre Port, ikincisi Pin, son parametre ise pinin mode ayarıdır. Burada OUT çıkış olacağını PP çıkış tipinin Push-Pull olacağını LOW, lojik durumunu ve FAST ise hızını belirtir. SLOW 2 MHz FAST ise 10 MHz hız değerine sahiptir.

Pinin alacağı Mode değerini kütüphanede tanımlanan enum ile görebilirsiniz.

Özellikle High Inpedance durumu beni bir hayli şaşırttı. Daha önce karşılaşmadığım bir özellik.

Çıkışa değer atamak için kullanılan fonksiyonlar;

Şimdi PB4 pinin input yaparak bağladığımız buton ile LED’i kontrol edelim. Bunun için şu şekilde init fonksiyonu yapılmalıdır.

GPIO_MODE_IN_PU_NO_IT bu tanımlama pinin giriş olacağını ve dahili pull-up direnci kullanılacağını belirtiyor. Son kısımdaki NO_IT ise No Interrupt yani kesme olmayacağını belirtir.

Daha sonra okuma işlemi yaparak LED’i kontrol edebiliriz.

Pin okuma fonksiyonları;

Son olarak kodu şu şekilde tamamlayalım.

Ben burada clock durumu bir değişkene atayarak gerekli işlemleri yaptım. Bu sayede CLK_ClockSwitchConfig fonksiyonunun düzgün bir şekilde çalıştığını da görmüş olduk. Şu anda buton ile LED’i kontrol edebiliyor aynı zamanda CCO çıkışından Clock çıkışını alabiliyoruz. Bu yazıyı da burada sonlandıralım.

Bir sonraki yazıda görüşmek üzere. Esen kalın !

Bir Yorum Yazın