STM32F7-Disco ile STemWin Kullanımı

Merhaba arkadaşlar;

Bu uygulamada Sizlere STM32F7 serisi ile Segger firmasının üretmiş olduğu emwin dan bahsedeceğim.

LCDli yaptığımız projelerde mutlaka görsel nesnelere ihtiyaç duyarız. Girdileri ve çıktıları ekranda göstermek isteriz. Bu gibi durumlarda manüel çizimlerle ekranda GUI nesneleri yapmaya çalışırız.

Segger firması ST için emwin adında GUI nesnelerinden oluşan bir kütüphane geliştirdi.

https://www.segger.com/products/user-interface/emwin/

Bu uygulamayı kullanabilmek için STM32 nin yanında TFT lcd ve dokunmatik modül gereklidir. Bunların olduğu STM32 Discovery eğitim setlerini kullanabilirsiniz. Bütün donanım kütüphanelerini ST tarafından indirebilirsiniz.

32F429IDISCOVERY:

https://www.st.com/en/evaluation-tools/32f429idiscovery.html

32F746GDISCOVERY:

https://www.st.com/en/evaluation-tools/32f746gdiscovery.html

32F769IDISCOVERY:

https://www.st.com/en/evaluation-tools/32f769idiscovery.html

Bunlar gibi discovery eğitim setlerinden birini kullanabilirsiniz. Bende F746-Disco olduğu için anlatımı bunun üzerinden devam edeceğim. Mantık hepsinde aynı cube mx de projemizi oluşturup gerekli donanım kütüphanelerini ekleyeceğiz.

İlk önce ST firmasının  STM32 serileri için geliştirmiş olduğu CUBEMX programını kullanacağız.

https://www.st.com/en/development-tools/stm32cubemx.html

Kurulum yaptıktan sonra gelelim projemizi oluşturmaya.

İlk olarak file menüsünden new proje ye tıklayarak listeden kartımızı seçeceğiz.

Eğer seçtiğiniz kartın kütüphanesi daha önceden hiç indirilmediyse sizden F7Cube paketinin indirilmesini isteyecek.

Sonra, size yeni proje açarken kartın donanım ayarları hazır gelsin mi gibi bir soru soracak, buna yes dediğimizde karşımıza hazır ayarlanmış bir proje gelecek.

 

Daha sonra hiç bir değişiklik yapmadan ilk önce projemizi kaydedelim. Project Manager dan Name ve Location ı seçeceğiz. Sonra hangi IDE yi kullanacaksak onun seçimini yapacağız. Ben TrueStudio seçtim.

File dan Save dedikten sonra donanım ayarlarına geçebiliriz.

Sol tarafta Middleware da GRAPHICS seçilir ve resimdeki gibi stemwin ve lcd türü seçilir.

daha sonra Frame buffer dan Color Conversion değiştirilir

sonra Multimedia dan LTDC ayarları değiştirilir. RGB888 yapılır.

Mevcut ayarları yaptıktan sonra kullanmadığımız modülleri kapatırsak açılışta yavaşlama olmayacaktır.

Ethernet:

SDMMC1:

USB OTG FS:

Bütün bunları kapattıktan sonra sıra dokunmatik için timer ı ayarlamamız gerekiyor. Timer 10 u resimdeki gibi ayarlayalım

Bu timer 50ms e ayarlanıp dokunmatik değerini GUI e aktaracaktır. Tabi kesmeleri de açmamız gerekiyor.,

Artık kodumuzu oluşturabiliriz. Sağ yukarıdan Generate Code a tıkladığımızda seçmiş olduğumuz IDE ortamında proje dosyaları oluşacaktır.

Projemizi IDE ortamında açıyoruz ve hiçbir değişiklik yapmadan derleyip herhangi bir hata var mı bakıyoruz. Default olarak ekranda Hello world yazması gerekiyor.

Karta programı yükleyip çalıştırdığımızda ekranda hello world yazacaktır.

StemWin FreeRTOS kullandığı için program parçacıkları task lardan oluşmaktadır. Burada ise örnek GUI text yazısı GUI_App.c dosyasını içindedir. Bu aşamaya gelmeden önce gerekli donanım ayarları yapılır.

 

GRAPHICS_MainTask içerisine gerekli konutları yazacağız.

Bu aşamaya kadar sorunsuz çalıştıktan sonra gelelim dokunmatik kütüphanesini eklemeye. ST kitlerinde donamım için tasarlanmış BSP kütüphaneleri vardır. Bu kütüphanede kartınızla ilgili bütün sürücülere ulaşabilirsiniz. Biz Stemwin da dokunmatik kısmını BSP yardımı ile algılayıp GUI e göndereceğiz. Tabi bunun için CubeMX de indirilen kütüphanelerin olduğu klasörü açmalıyız.

F7 ile çalıştığım için elimdeki son güncel V1.15.0 klasörünü açıyorum.

C:\Users\kullanıcı adınız\STM32Cube\Repository\STM32Cube_FW_F7_V1.15.0

Aynı anda projenizin bulunduğu klasörü açın, çünkü BSP klasörlerini kopyalayacağız.

  • İlk önce kendi projenizde Drivers klasörünün içine BSP klasörü açın, BSP nin içerisine de STM32746G-Discovery klasörü açın
  • Sonra STM32Cube klasöründe \Drivers\BSP\STM32746G-Discovery içerisine girin,
  • Burada resimdeki seçili dosyaları açtığınız klasöre kopyalayın.
  • Projenizdeki Driver klasörüne geri gelin, içerisine Components klasörü oluşturun.
  • Bu klasöre STM32Cube daki Components klasöründen resimdeki klasörleri kopyalayın.
  • ve Components klasörüne Common klasörü oluşturun.
  • içerisine STM32Cube da Common klasörü içerisindeki ts.h dosyasını kopyalayın.
  • Sonra projenizde ki ana klasöre gelin ve Utilities klasörü açın, içerisine de cube daki STM32Cube_FW_F7_V1.15.0\Utilities içindeki Fonts klasörünü kopyalayın

Klasörlerin son hali resimdeki gibidir.

Dosya kopyalama işlemleri bitmiştir. Şimdi bu klasörleri derleyici de tanıtmalıyız. Hangi derleyici kullanıyorsanız klasörleri ekleyin, true studio da aşağıdaki gibi olacaktır.

Eklenecek dizin Yolları:

  • ../Drivers/BSP/STM32746G-Discovery
  • ../Drivers/BSP/Components/n25q128a
  • ../Drivers/BSP/Components/Common
  • ../Drivers/BSP/Components/ft5336
  • ../Drivers/BSP/Components/rk043fn48h
  • ../Utilities/Fonts

Artık BSP donanım kütüphanelerimiz hazır ve eklenmiş durumdadır. IDE üzerinden derleyip hata var mı diye bakalım?

Şimdi gelelim açtığımız kütüphaneleri c dosyalarına ekleyelim ilk önce main.c dosyasına aşağıdaki h dosyalarını ekleyelim. Bu arada biliyorsunuzdur cubemx ile çalıştığınızda sizin kod eklediğiniz bloklar ayrıdır ve bu bloklar güncelleme sırasında değişmez. BEGIN ve END ile belirtilmiştir.

GUI_App.c dosyasına ise aşağıdaki tanımlamaları ekliyoruz.

şimdi GUI_App.c dosyasına dokunmatik fonksiyonunu ekleyelim en alta.

Sonra hello world ün bulunduğu GRAPHICS_MainTask içine kendi kodlarımızı yazıp mevcut hello world ü silip yada yoruma alabilirsiniz.

Burada yaptığımız işlem GUI_Exec i 50ms de bir çalıştırmak, bu işlem bütün ekranın yenilenmesine ve çalışmasına yetecektir. while a girmeden önce dikkat ettiyseniz GUI_CURSOR_Show() u kullandım bu da ekranda mouse imlecini sürekli göreceksiniz. Bu gibi GUI komutlarını anlatan detaylı pdf i indirilen Cube kütüphanesi içerisinde bulabilirsiniz.

Şimdi gelelim görsel ekranımızı oluşturmaya. Bunun için Cube kütüphanesinde bulunan GUI Builder i kullanacağız.

C:\Users\kullanıcı adınız\STM32Cube\Repository\STM32Cube_FW_F7_V1.15.0\Middlewares\ST\STemWin\Software

içindeki GUIBuilder.exe çalıştırıyoruz. Bu program bileşenleri tanıdık gelebilir, visual studio kullandıysanız yabancılık çekmeyeceksiniz.

Zemini oluşturmak için 2 nesneden birini ekleyebiliriz,

  • Window
  • Framewin

Ben ilk olarak window ekliyorum ve boyutlarını lcd ölçülerine göre ayarlıyorum.

Şimdi içerisine istediğimiz nesneleri ekleyebiliriz, örnek olarak led yakıp söndürelim. Bunun için bir tane check box ve bir kaç buton text ekleyelim. Her eklediğimiz nesnelerin özelliğini değiştirmek için sağ tıklayın.

Şimdi gelelim tasarladığımız ekranı program içerisine kaydedelim. Bunun için file da save tıklıyoruz ve aynı klasöre WindowDLG.c  dosyası oluşturuyor. Bu dosyayı STemWin\App içerisine kopyalıyoruz.

Eklediğimiz her nesnenin bütün eylemleri bu dosya içerisindedir biz hangi eylemde ne olmasını istiyorsak user ifadeleri içine yazarak istediğimizi yaptırabiliriz.

Kart üzerindeki led i kullanmak için BSP led i init yapmamız gerekiyor. Main.c de gerekli komutları yazalım. Bu arada dokunmatik init ve timer ı da başlatıyoruz.

BSP_LED_Init(LED_GREEN) ile led ayarını yapmış oluyoruz.

Şimdi GUI_App.c de hazırladığımız ekranı yükleyeceğiz. Hazırladığımız ekran CreateWindow() olarak tanımlanmıştır. While girmeden önce bunu çağırıyoruz. Tabi önce en başa bunu yazmalıyız.

şimdi ekleyebiliriz

GUI_App.h a bu tanımlamayı ekliyoruz

Daha sonra GUI_App.h ı main e ekliyoruz.

şimdi  main.c de timer kesmesi içerisine dokunmatik fonksiyonumuzu ekleyeceğiz.

main.c de HAL_TIM_PeriodElapsedCallback içinde bunu ekliyoruz

 

Kodumuzu derleyip hata varmı diye bakıp kartımıza yüklediğimizde tasarladığımız ekranı görmüş olacağız.

Son olarak led için gerekli komutları WindowDLG.c içerisine yazacağız. Buradaki sistem her nesnenin ürettiği eylem gerekli başlıklar halinde yazıyor biz bunların içerisine kodlarımızı yazacağız. Check box nesnesindeki click i buluyoruz. ID_CHECKBOX_0 -> WM_NOTIFICATION_CLICKED içerisine değeri okuyup 1 ise len on 0 ise ledoff yapacağız.

Buton içinde messagebox çıkartalım.

Artık projemizi derleyip çalıştırabiliriz.

GUI ile ilgili ayrıntılı bilgiyi kendi pdf inden bulabilirsiniz.

C:\Users\kullanıcı adınız\STM32Cube\Repository\STM32Cube_FW_F7_V1.15.0\Middlewares\ST\STemWin\Documentation

Tüm projeyi bu linkten bulabilirsiniz. F746emwin

Bir sonraki projede görüşmek üzere kolay gelsin.

“STM32F7-Disco ile STemWin Kullanımı” için 2 yorum

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.