Spis treści
Obrót ekranu na wyświetlaczu Riverdi STM32 7”
Obrót ekranu to częste wymaganie w urządzeniach opartych na układach STM32, zwłaszcza gdy konstrukcja mechaniczna wymusza orientację pionową lub montaż odwrócony. W systemach korzystających z kontrolera wyświetlacza LTDC obrót trzeba realizować programowo, bo sam kontroler nie obsługuje natywnego obracania bufora ramki.
W tym artykule opisano praktyczne i powszechnie stosowane podejście do obrotu ekranu w systemach STM32 z wykorzystaniem biblioteki TouchGFX i funkcji wyrównywania dotykowego, opcjonalnie z korektą po stronie panelu, jeśli wymaga tego fizyczna instalacja.
Typowe problemy
Problemy z obrótem ekranu zazwyczaj objawiają się w jednej lub kilku z poniższych form:
- interfejs użytkownika wyświetlany jest w niewłaściwej orientacji względem obudowy
- czytelność treści na ekranie jest wysoka tylko wtedy, gdy urządzenie jest fizycznie obrócone
- elementy dotykowe nie pokrywają się z widocznymi elementami interfejsu użytkownika
Te objawy nie wynikają z usterek wyświetlacza, tylko ze sposobu, w jaki oprogramowanie obsługuje orientację ekranu.
Założenia systemowe
To podejście przeszło walidację na 7-calowym wyświetlaczu TFT firmy Riverdi podłączonym do mikrokontrolera STM32 za pomocą interfejsu LTDC. Opisane zachowanie i konfiguracja dotyczą tej klasy wyświetlaczy Riverdi opartych na mikrokontrolerze STM32 i są reprezentatywne dla podobnych konfiguracji.
Jak działa obsługa orientacji w STM32 LTDC
Urządzenie peryferyjne LTDC skanuje bufor ramki w stałej kolejności określonej przez układ pamięci. Nie obsługuje ono sprzętowego obracania bufora ramki o 90 ani 270 stopni.
Z tego powodu obrót ekranu w systemach STM32 zazwyczaj dzieli się na dwa niezależne aspekty: orientację wizualną interfejsu użytkownika oraz mapowanie współrzędnych dotykowych. Każdy z nich trzeba obsłużyć osobno.
Zalecana strategia rotacji
Powszechnie stosowaną i niezawodną strategią jest obsługa zmian orientacji o 90 stopni na poziomie frameworka GUI oraz stosowanie dodatkowej korekty o 180 stopni tylko wtedy, gdy wymaga tego mechaniczny sposób montażu. Pozwala to uniknąć obracania bufora ramki w czasie wykonania i sprawia, że zużycie procesora oraz pamięci pozostaje przewidywalne.
Obsługa orientacji 90 stopni w TouchGFX
TouchGFX radzi sobie z orientacją ekranu, wykonując renderowanie interfejsu użytkownika natywnie dla skonfigurowanych wymiarów ekranu. Zmianę orientacji o 90 stopni z poziomej na pionową osiąga się poprzez wybranie odpowiedniej szerokości i wysokości oraz zaprojektowanie interfejsu użytkownika dla tej orientacji.
Bufor ramki nie jest obracany. Zamiast tego interfejs użytkownika jest generowany bezpośrednio w wymaganej orientacji.


TouchGFX Designer pokazujący projekt skonfigurowany dla orientacji pionowej lub poziomej
Opcjonalna korekcja o 180 stopni na poziomie panelu lub oprogramowania
W niektórych projektach wyświetlacz jest zamontowany do góry nogami względem zamierzonej orientacji interfejsu użytkownika. W takich przypadkach może być konieczna dodatkowa korekta o 180 stopni.
Ta korekta nie jest wykonywana przez urządzenie peryferyjne LTDC. Zamiast tego można ją zastosować na poziomie konfiguracji panelu za pomocą poleceń interfejsu wyświetlacza lub alternatywnie w oprogramowaniu poprzez zastosowanie logiki odwracania współrzędnych.
W podejściu opartym na panelu, pokazanym na zrzucie ekranu, obrót o 180 stopni osiąga się dzięki jednej zmianie w sekwencji inicjalizacji panelu DSI.
Wykomentuj to konkretne polecenie DSI (w tym przykładzie w linii 250), które odblokowuje rejestry sterujące kontrolera wyświetlacza:


Powoduje to, że panel działa z odwróconym kierunkiem skanowania, co skutkuje faktycznym obrotem wyświetlonego obrazu o 180 stopni.
Nie trzeba wprowadzać żadnych innych zmian w tej sekwencji, żeby zastosować obrót.
To zachowanie zależy od konkretnego panelu i od tego, jak kontroler wyświetlacza interpretuje polecenia inicjalizacyjne. Zmiana dotyczy wyłącznie orientacji skanowania po stronie panelu i działa niezależnie od procesu skanowania bufora ramki LTDC. Nie wiąże się to z żadnym sprzętowym obracaniem bufora ramki po stronie STM32.
Kiedy korzystasz z tej metody, współrzędne dotykowe nadal trzeba wyrównać osobno, bo kontroler dotyku wciąż przeprowadza raportowanie surowych współrzędnych opartych na fizycznej orientacji czujnika.
Obsługa dotykowa z wykorzystaniem układu LITEK ILI2132A w wyświetlaczach IPS firmy Riverdi
Wszystkie wyświetlacze Riverdi IPS o przekątnej do 10 cali wykorzystująkontroler dotyku Ilitek ILI2132A. Podczas pracy z funkcją obrótu ekranu w systemach opartych na STM32 ważne jest, żeby zrozumieć, w jaki sposób ten kontroler raportuje współrzędne dotyku i jak należy obsłużyć obrót ekranu.
Naprawiono raportowanie surowych współrzędnych
Układ ILI2132A zawsze przeprowadza raportowanie surowych, niezmodyfikowanych współrzędnych dotykowych, które są bezpośrednio powiązane z fizyczną orientacją czujnika dotykowego. Kontroler dotyku nie oferuje żadnej opcji konfiguracyjnej umożliwiającej przełączanie między trybem pionowym a poziomym, ani nie obsługuje obracania współrzędnych w czasie wykonania ani ich odwracania o 180 stopni.
Nie ma żadnego rejestru orientacji ani obrotu, którego można by użyć do poinformowania kontrolera, że wyświetlacz został obrócony. Niezależnie od orientacji ekranu ustawionej przez framework GUI lub kontroler wyświetlacza, układ ILI2132A nadal wysyła te same surowe wartości X i Y.
Takie zachowanie jest zamierzone i należy je traktować jako stałą cechę sterownika.
Oprogramowanie do obracania i wyrównywania ekranu dotykowego
Ponieważ układ ILI2132A zawsze przeprowadza raportowanie współrzędnych, wyrównanie dotykowe trzeba zrealizować całkowicie programowo. Obrót ekranu i mapowanie dotykowe to dwa niezależne etapy, które trzeba obsłużyć spójnie.
Zalecanym rozwiązaniem jest przekształcenie surowych współrzędnych dotykowych zgodnie z ostateczną orientacją ekranu przed przekazaniem ich do frameworka GUI.
Najpierw ustal ostateczną orientację ekranu używaną przez system, na przykład natywną pozioma, pionowa, odwrócona pozioma lub odwrócona pionowa. Orientacja ta jest zazwyczaj definiowana w ustawieniach projektu TouchGFX lub poprzez obrót wyświetlacza w LVGL.
Następnie odczytaj surowe współrzędne dotykowe raportowane przez układ ILI2132A. Na tym etapie współrzędne zawsze odzwierciedlają natywną orientację czujnika dotykowego.
Następnie zastosuj transformację współrzędnych w oparciu o wybraną orientację ekranu. Transformacja ta zależy od szerokości i wysokości ekranu po obrocie i zazwyczaj polega na zamianie osi oraz odwróceniu jednego lub obu zakresów współrzędnych.
For example:
- jeśli nie ma obrotu, można od razu użyć surowych współrzędnych
- po obrocie o 90 stopni osie X i Y zamieniają się miejscami, a jedna z osi zostaje odwrócona
- po obrocie o 180 stopni obie osie ulegają odwróceniu
- przy obrocie o 270 stopni osie X i Y zamieniają się miejscami, przy czym odwrócenie jest odwrotne niż w przypadku obrotu o 90 stopni
Na koniec prześlij przekształcone współrzędne do frameworka GUI. W TouchGFX robi się to za pomocą interfejsu kontrolera dotyku. W LVGL skorygowane współrzędne są przekazywane poprzez wywołanie zwrotne sterownika urządzenia wejściowego.
Sam framework GUI nie ma pojęcia o fizycznej orientacji dotykowej i zawsze otrzymuje współrzędne, które są już wyrównane.
Przewodnik po mapowaniu obrotowym
Załóżmy, że:
- W to szerokość ekranu po obrocie
- H to wysokość ekranu po obrocie
- (x, y) to surowe współrzędne dotykowe
- (x’, y’) to przekształcone współrzędne przekazywane do frameworka GUI
A potem:
Bez obrotu (0 stopni)
Użyj bezpośrednio współrzędnych surowych:
- x’ = x
- y’ = y
Obrót o 90 stopni (orientacja pionowa)
Zamień osie i odwróć jedną z nich:
- x’ = y
- y’ = W – 1 – x
Obrót o 180 stopni (odwrócony widok poziomy)
Odwróć obie osie:
- x’ = W – 1 – x
- y’ = H – 1 – y
Obrót o 270 stopni (odwrócony tryb pionowy)
Zamień osie i odwróć przeciwną oś:
- x’ = H – 1 – y
- y’ = x
Te przekształcenia są stosowane w warstwie obsługi dotykowej i nie mają wpływu na renderowanie wyświetlacza.
Uwaga dotycząca większych wyświetlaczy Riverdi
W przypadku większych wyświetlaczy Riverdi stosuje się inny kontroler dotyku. Wyświetlacze IPS powyżej tego zakresu rozmiarów zazwyczaj wykorzystują kontroler dotyku Ilitek ILI2511. Chociaż ogólna zasada oddzielenia obrótu ekranu od mapowania dotykowego pozostaje taka sama, szczegóły realizacji mogą się różnić i należy je sprawdzić dla konkretnego kontrolera oraz konfiguracji wyświetlacza.
Weryfikacja
Po wykonaniu powyższych kroków interfejs użytkownika powinien wyświetlać się w prawidłowej orientacji, a gesty dotykowe powinny pokrywać się z elementami interfejsu. Nie powinno być konieczne obracanie bufora ramki w czasie wykonania. Jeśli działanie dotykowe nadal nie jest poprawne, warto jeszcze raz sprawdzić odwrócenie osi i parametry rozdzielczości.
Typowe pułapki
Do typowych problemów należą: założenie, że LTDC obsługuje obrót sprzętowy, obracanie interfejsu użytkownika bez korygowania współrzędnych dotykowych oraz mieszanie odwrócenia po stronie panelu ze zmianami orientacji na poziomie GUI bez wyraźnego rozróżnienia.
Obrót ekranu za pomocą LVGL
LVGL obsługuje obrót ekranu w krokach co 90 stopni. Orientację wyświetlacza można zmienić za pomocą funkcji
lv_display_set_rotation(disp, LV_DISPLAY_ROTATION_xxx), gdzie xxx to 0, 90, 180 albo 270.
Gdy włączona jest funkcja obracania, LVGL aktualizuje swój wewnętrzny układ współrzędnych i w razie potrzeby zamienia rozdzielczość poziomą z pionową.
W systemach STM32 z LTDC obrót obrazu odbywa się całkowicie programowo. LVGL nie korzysta z sprzętowej funkcji obracania bufora ramki. W zależności od wybranego trybu renderowania dane pikseli można obrócić w procedurze flush callback przed wysłaniem ich na wyświetlacz. W przypadku obróconych wyświetlaczy zazwyczaj używa się LV_DISPLAY_RENDER_MODE_PARTIAL, bo pozwala to na obrót poszczególnych obszarów renderowanych przed flushingiem.
To podejście zostało przetestowane na systemach STM32 z wyświetlaczami Riverdi przy użyciu biblioteki LVGL w wersji 9.1 i nowszych.
Nawet gdy obrót LVGL jest włączony, kontrolery dotyku nadal raportują surowe współrzędne. W przypadku wyświetlaczy Riverdi IPS z układem Ilitek ILI2132A współrzędne dotykowe trzeba nadal przekształcać programowo, żeby dopasować je do wybranej orientacji ekranu.
Więcej informacji na temat trybów obracania w LVGL, interfejsów API i przykładów znajdziesz w oficjalnej dokumentacji LVGL:
Obrót ekranu w LVGL
Podsumowanie
W systemach STM32 z LTDC obrót ekranu jest obsługiwany całkowicie programowo. TouchGFX służy do zdefiniowania orientacji podstawowej poprzez renderowanie interfejsu użytkownika pod kątem wymaganych wymiarów ekranu, a w razie potrzeby można zastosować dodatkową korektę o 180 stopni na poziomie panelu lub oprogramowania.
To wielowarstwowe podejście zapewnia niezawodność i łatwość utrzymania, które nie opierają się na nieobsługiwanej funkcji obracania obrazu w buforze ramki sprzętowej i nadają się do długoterminowych zastosowań przemysłowych.
ODKRYJ NASZĄ
Whitepaper
Osiągnij idealną interakcję użytkownika z wyświetlaczem dzięki odpowiedniemu czujnikowi Touch Sensor IC. Czy kiedykolwiek zmagałeś się z problemami związanymi z fantomowymi dotknięciami lub certyfikacją? Rozwiń swoje prace B+R jak profesjonalista dzięki naszemu Whitepaperowi!



