Türlü çeşitli TFT grafik ekranları uzun zamandır STM32F103 mikrokontroller ile kullanıp duruyordum. Bunlardan bir bölümü SPI arayüzlü, kimisi de 8 bit paralel girişli ekranlar.
Kendi tasarladığım STM32 geliştirme kitlerinde ekran konnektörlerinde data pinlerini aynı porttan sıralı olarak, B8 B9 … B15 olarak verip basit bir algoritma ile sürüyorum. Ama, elimdeki hazır geliştirme kitlerinde ekrana giden bağlantılar böyle aynı porttan ve sıralı olmuyorlar.
Malzeme kutularımda yıllardır durmakta olan Nucleo kitine TFT takıp kullanmaya kalkışınca, ekran sürücü kodlarımı revize temek zorunda kaldım. Bu yayının konusu bu.
Kullanacağım TFT ekranın pinleri Arduino uyumlu, Nucleo’da da buna uygun düşen konnektörler var. TFT yi bu konnektörlere takınca, kontrol ve data pinlerine karşı düşen GPIO çıkışları aşağıdaki gibi oluyor:
Yukarıdaki kod parçacıklarında TFT nin hangi pinlerinin mikrokontrollerin hangi GPIO larına bağlandığı görülüyor. Bunları STM32CubeIDE nin cubeMX penceresinde aşağıdaki gibi yapılandırıyoruz:
Burada dikkat edilmesi gereken bir nokta var. TFT_RD pini, TFT den veri okurken “0”, yazarken de “1” seviyesine çekiliyor. Ben TFT den veri okumuyor, sadece yazıyorum, dolayısı ile TFT_RD yi kullanmıyorum, ama bunun “1” seviyesinde kalması gerekiyor.
Eğer System view penceresine geçip TFT_RD nin default değerini “1” olarak tanımlamazsak, cubeMX projeyi yaratırken bunu varsayılan “0” seviyesine ayarlar. Bu durumda bütün TFT data pinleri sürekli olarak çıkış konumunda kalır ve TFT gönderdiğimiz verileri almaz. İşi sağlama bağlamak için programın başlangıcında TFT_RD yi “1” seviyesine çekmekte yarar var.
Bu ayarları yaptıktan sonra Project menüsü altından Generate seçeceği ile projemizi yaratıyoruz.
Benim ekranın başlangıç ayarlarını yapan, temel fonksiyonları (ekrana text yazmak, daire, doğru dikdörteg vb. çizmek) içeren dosyalarım tft_basic_p.c ve tft_basic_p.h.
Bu dosyalardaki birkaç temel fonksiyonu aşağıdaki ekran kopyaları ile veriyorum:
Bu fonkksiyonlar TFT ye 8 bit veriyi göndermek için yukarılarda vermi olduğum makroyu yani “writeByteToAny8(d)” yi kullanıyorlar. Bu makro rasgele seçilmiş 8 GPIO pinine, bir byte lık veriyi yazıyor.
Böylece TFT ye bağlayacağım GPIO karın seçiminde özgür kalmış oluyorum. Burada dikkat edilmesi gereken şey : Her değişik pin dağılımı için makro yu değiştirmek gerekiyor.
Bunun için makro açıklamasını da aşağıya kopyalıyorum. Bunu ControllerTech adlı blogger sitesinden aldım. Burada 8 bit için kullanıyor da olsak, bu yöntem istenen uzunlukta bir veriyi, rasgele seçilmiş GPIO pinlere yazmak için çok kullanışlı.
Bu yayının sonu – Selçuk Özbayraktar Haziran 2020