Biblioteka graficzna Segger STemWin dla STM32 – graficzne HMI bez problemu!

 

 

Pozostałe możliwości

Oprócz powyższych możliwości biblioteka pozwala także na wyświetlanie duszków – obrazki statyczne, bądź zmieniające się cyklicznie (rysunek 8, tabela 4) oraz kursorów (jeśli wykorzystujemy np. joystick lub myszkę). Te elementy graficzne są o tyle ciekawe, gdyż mogą być umieszczone w dowolnym miejscu i o dowolnym kształcie bez utraty tego co znajduje się „za” nimi – przy wyświetlaniu duszka/kursora tło przez niego zakrywane zapisywane jest w pamięci układu, a przy przemieszczaniu lub ukrywaniu dane w postaci wartości pikseli są odczytywane i ponownie przerysowywane.

Dostępna funkcja wielowarstwowości pozwala nie tylko organizować obiekty w grupy, ale także umożliwia realizację przenikania warstw (rysunek 10, 11). Przykładową syntezę dwóch warstw przedstawia rysunek 12, a za pomocą odpowiednich funkcji do ustawiania wartości kanału alpha można uzyskiwać łagodne przejścia między zawartością poszczególnych warstw.

Ciekawą jeszcze funkcjonalnością jaką udostępnia biblioteka jest możliwość zdalnego podglądu zawartości wyświetlacza orazsterowania pracą urządzenia na którym jest włączony serwer VNC. Przykładowo, jeżeli urządzenie z włączoną funkcją serwera VNC jest podłączone do typowej sieci komputerowej z obsługą protokołu TCP/IP (bezpośrednie podłączenie do komputera lub do routera) to na dowolnym komputerze w tej sieci po uruchomieniu klienta VNC i połączeniu się z urządzeniem docelowym można zdalnie pracować z jego interfejsem graficznym tak jakby to wyglądało fizycznie z wykorzystaniem ekranu i urządzeń wejścia.

 

Rys. 9. Przykład z dwoma duszkami

 

Tab. 4. Wybrane procedury biblioteki STemWin powiązane z duszkami (ang. sprites)

Procedura Opis
GUI_SPRITE_CreateEx() Procedura tworzy duszka, który jest opisany bitmapą do której przekazuje się wskaźnik jako argument. Duszek zostanie umieszczony w zadanej pozycji (x,y) w wybranej warstwie.
GUI_SPRITE_CreateExAnim() Procedura tworzy animowanego duszka na podstawie serii obrazków statycznych, przy czym czasy ich przełączania mogą być takie same (przekazanie wartości czasu w argumencie funkcji) lub różne (przekazanie wskaźnika do tablicy wartości czasów).
GUI_SPRITE_Hide() Ukrywa duszka.
GUI_SPRITE_SetLoop() Włącza lub wyłącza nieskończoną animację duszka.
GUI_SPRITE_Show() Pokazuje duszka.
GUI_SPRITE_StartAnim() Kontynuuje animowanie duszka.
GUI_SPRITE_StopAnim() Zatrzymuje animowanie duszka.

 

Rys. 10. Funkcja wielowarstwowości umożliwiająca realizację przezroczystości części obszaru

 

Rys. 11.  Hierarchia okien w poszczególnych warstwach

 

Rys. 12. Przykład syntezy dwóch różnych warstw z wykorzystaniem przezroczystości

 

Warstwa sprzętowa

Biblioteka STemWin obsługuje większość popularnych wyświetlaczy graficznych wyposażonych w różne kontrolery i wynika to nie tylko z dostępności sterowników konkretnych urządzeń, ale także z pewnej uniwersalności istniejących interfejsów komunikacyjnych za pomocą których można uzyskać bezpośredni lub pośredni dostęp do pamięci graficznej urządzenia. W przypadku, gdy występuje bezpośredni dostęp do pamięci graficznej komunikacja między mikrokontrolerem, a kontrolerem wyświetlacza odbywa się poprzez szynę adresową, szynę danych i linie sterujące (rysunek 13). Warto tutaj wspomnieć, że bardziej rozbudowane mikrokontrolery z serii STM32 posiadają moduł FSMC (FlexibleStatic Memory Controller) lub jego rozszerzonyodpowiednikFMC (Flexible Memory Controller) dedykowany do komunikacji z zewnętrzną pamięcią, a szczególnie z pamięcią graficzną wyświetlaczy.

 

Rys. 13. Typowy interfejs przy bezpośrednim dostępie do pamięci graficznej wyświetlacza

 

Natomiast w sytuacji, gdy dostęp do pamięci graficznej odbywa się pośrednio to komunikacja może się odbywać z wykorzystaniem jednego z poniższych interfejsów:

  • interfejs równoległy (typu 6800 lub 8080),
  • 4-liniowy interfejs SPI,
  • 3-liniowy interfejs SPI,
  • interfejs magistrali I2C.

Przykłady sterowników tego typu połączeń komunikacyjnychmożna znaleźć w katalogu Samples/LCD_Xpakietu emWin: LCD_X_6800.c, LCD_X_8080.c, LCD_X_SERIAL.c, LCD_X_Serial_3Pin.c, LCD_X_Serial_3Wire.c oraz LCD_X_I2CBUS.c, a w tabeli 5 zestawiono listę kontrolerów obsługiwanych przez pakiet STemWin. W plikach sterowników można znaleźć różne opcje konfiguracyjne, m.in. do ustawiania wymiarów w dwóch osiach obszaru roboczego wyświetlacza oraz do zmiany orientacji wyświetlanej zawartości.

 

Tab. 5. Lista obsługiwanych przez bibliotekę kontrolerów wyświetlaczy graficznych [1]

Epson S1D19122
FocalTech FT1509
Himax HX8301, HX8340, HX8347, HX8352, HX8353, HX8325A
Hitachi HD66772
Ilitek ILI9220, ILI9221, ILI9320, ILI9325, ILI9328, ILI9335,
ILI9338, ILI9340, ILI9341, ILI9342, ILI9481
LG Electronics LGDP4531, LGDP4551
Novatek NT39122
OriseTech SPFD5408, SPFD54124C, SPFD5414D
Renesas R61505, R61516, R61526, R61580
Samsung S6D0117, S6E63D6
Sitronix ST7628, ST7637, ST7687, ST7712, ST7735
Solomon SSD1355, SSD1961, SSD1963, SSD2119
Syncoam SEPS525
Pozostałe kontrolery z liniową adresacją pamięci graficznej i bezpośrednim dostępem

 

Dodatkowo biblioteka zawiera sterowniki urządzeń wskazujących (Pointer Input Devices) do których należą: panel dotykowy, myszka i joystick, a także sterowniki klawiatury. Domyślnie pakiet STemWin obsługuje panele dotykowe zarówno w trybie analogowym jak i cyfrowym, przy czym oprogramowanie jest zdolne do rozpoznawania tylko pojedynczych dotknięć – oprogramowanie z opcją MultiTouch (dotyczy paneli typu pojemnościowego) jest dostępne jako oddzielny pakiet dopełniający.

 

Wymagania sprzętowe

System wbudowany, w jakim ma zostać zaimplementowana bibliotekaSTemWin, powinien spełniać podstawowe wymagania [2]:

  • posiadać 8/16/32/64-bitową jednostkę przetwarzającą (wszystkie mikrokontrolery producenta ST z rdzeniem Cortex M0, M3 oraz M4 posiadają 32-bitową jednostkę CPU),
  • udostępniać niezbędne minimum ilość pamięci do wykorzystania przez bibliotekę (tabelka 6) z możliwością pracy w trybie 8-, 16- i 32-bitowym; zapotrzebowanie pamięci ROM wzrasta wraz z implementacją czcionek oraz plików graficznych,
  • zawierać wyświetlacz graficzny dowolnego typu (monochromatyczny, kolorowy) i rozdzielczości – ważne jest aby był dostępny odpowiedni sterownik.

Określenie dokładnej wartości ilości pamięci wymaganej przez bibliotekę nie jest możliwe w prosty sposób. Należy tutaj uwzględnić także fakt, że zależy ona również od tego jakie elementy biblioteki będą wykorzystywane oraz od stopnia optymalizacji kodu przez kompilator. W systemach z niewielką ilością pamięci RAM można zaimplementować bibliotekę bez włączonego menedżera okien, przy czym wtedy nie będzie możliwym uzyskanie pełnowartościowego interfejsu graficznego m.in. z funkcją automatycznego przerysowywania modyfikowanych okienek, czy zarządzania ich ułożeniem w hierarchii oraz wysyłania sygnałów od zdarzeń i wywoływania funkcji zwrotnych.

 

Tab. 6. Przybliżone wymagania pamięciowe biblioteki STemWin w zależności od wykorzystanych opcji [2]

Zasoby Systemy z ograniczoną ilością zasobów
(brak menedżera okien)
Systemy z dużą ilością zasobów
(z menedżerem okien i widżetami)
Pamięć RAM 100 B 2 – 6 kB
Pamięć ROM 10 – 25 kB 30 – 60 kB
Stos 600 B 1200 – 1800 B

 

Dodatkowo, wymagania pamięciowe wzrastają w przypadku implementacji systemu operacyjnego czasu rzeczywistego – warto o tym wspomnieć, gdyż interfejs graficzny zaprojektowany z wykorzystaniem bibliotekiSTemWin może działać jako jedno z zadań w systemie, przy czym taka struktura oprogramowania znacząco upraszcza implementację obsługi innych procesów (np. odczyt wartości z czujników). Aby biblioteka graficzna mogła współpracować wraz z systemem czasu rzeczywistego należy zmodyfikować wartość makrodefinicji GUI_OS poprzez ustawienie jej na 1 (można również ustawić maksymalną liczbę zadań do wykorzystania przez bibliotekę – do tego celu służy makrodefinicja GUI_MAXTASK). W przypadku, gdy włączona jest funkcja serwera VNC zużycie pamięci ROM wzrasta od 3,5 kB do 5 kB. Dodatkowe informacjedotyczące wymaganej pamięci można znaleźć w dokumencie [1].

Jan Szemiet

 

Literatura

[1] AN4323: Gettingstarted with STemWin Library

[2] UM03001: emWin, Graphic Library with Graphical User Interface, User & Reference Guide

[3] http://www.segger.com/emwin.html – oficjalna strona biblioteki emWin

[4] http://www.st.com/web/en/catalog/tools/PF259225 – oficjalna strona biblioteki STemWin

O autorze