Inhaltsübersicht
Bildschirmdrehung auf Riverdi STM32 7" Display
Die Drehung des Bildschirms ist eine häufige Anforderung in STM32-basierten Geräten, insbesondere wenn das mechanische Design eine Ausrichtung im Hochformat oder eine umgekehrte Montage erzwingt. Bei Systemen, die den LTDC Display-Controller verwenden, muss die Drehung in der Software erfolgen, da der Controller selbst keine native Framebuffer-Drehung bietet.
In diesem Artikel wird ein praktischer und häufig verwendeter Ansatz für die Bildschirmdrehung auf STM32-Systemen unter Verwendung von TouchGFX und der Touch-Ausrichtung erläutert, mit optionaler panel-seitiger Korrektur, wenn die physische Installation dies erfordert.
Typische Probleme
Probleme mit der Bildschirmdrehung äußern sich in der Regel durch eine oder mehrere der folgenden Erscheinungen:
- die Benutzeroberfläche wird in der falschen Ausrichtung relativ zum Gehäuse angezeigt
- der Bildschirminhalt nur lesbar ist, wenn das Gerät physisch gedreht wird
- Touch-Eingabe stimmt nicht mit sichtbaren UI-Elementen überein
Diese Symptome werden nicht durch Fehler in der Display-Hardware verursacht, sondern durch die Art und Weise, wie die Ausrichtung in der Software gehandhabt wird.
Annahmen zum System
Dieser Ansatz wurde an einem 7-Zoll-TFT-Display von Riverdi validiert, das über die LTDC-Schnittstelle mit einem STM32-Mikrocontroller verbunden ist. Das beschriebene Verhalten und die Konfiguration gelten für diese Klasse von Riverdi STM32-basierten Displays und sind repräsentativ für ähnliche Setups.
Wie die Orientierung auf STM32 LTDC gehandhabt wird
Das LTDC-Peripheriegerät scannt den Framebuffer in einer festen, durch das Speicherlayout definierten Reihenfolge. Sie unterstützt keine Drehung des Framebuffers um 90 oder 270 Grad in Hardware.
Aus diesem Grund wird die Bildschirmdrehung auf STM32-Systemen in der Regel in zwei unabhängige Aspekte unterteilt: die visuelle Ausrichtung der Benutzeroberfläche und die Zuordnung von Berührungskoordinaten. Beide müssen explizit behandelt werden.
Empfohlene Rotationsstrategie
Eine häufig verwendete und robuste Strategie besteht darin, 90-Grad-Ausrichtungsänderungen auf der Ebene des GUI-Frameworks zu behandeln und eine zusätzliche 180-Grad-Korrektur nur dann vorzunehmen, wenn dies aufgrund der mechanischen Befestigung erforderlich ist. Dadurch wird eine Drehung des Framebuffers während der Laufzeit vermieden und die CPU- und Speichernutzung bleibt vorhersehbar.
Handhabung der 90-Grad-Ausrichtung in TouchGFX
TouchGFX handhabt die Ausrichtung, indem die Benutzeroberfläche nativ für die konfigurierten Bildschirmabmessungen gerendert wird. Ein 90-Grad-Wechsel zwischen Hoch- und Querformat wird erreicht, indem Sie die entsprechende Breite und Höhe auswählen und die Benutzeroberfläche für diese Ausrichtung gestalten.
Der Framebuffer selbst wird nicht gedreht. Stattdessen wird die Benutzeroberfläche direkt in der gewünschten Ausrichtung generiert.


TouchGFX Designer zeigt ein für Hoch- oder Querformat konfiguriertes Projekt
Optionale 180-Grad-Korrektur auf Panel- oder Software-Ebene
Bei einigen Designs ist das Display im Verhältnis zur beabsichtigten Ausrichtung der Benutzeroberfläche verkehrt herum angebracht. In solchen Fällen kann eine zusätzliche 180-Grad-Korrektur erforderlich sein.
Diese Korrektur wird nicht von der LTDC-Peripherie durchgeführt. Stattdessen kann sie auf der Konfigurationsebene des Panels mit Hilfe von Display-Schnittstellenbefehlen oder alternativ in der Software durch Anwendung der Koordinatenumkehrlogik vorgenommen werden.
Bei dem im Screenshot gezeigten Ansatz auf der Panel-Seite wird die 180-Grad-Drehung durch eine einzige Änderung in der Initialisierungssequenz des DSI-Panels erreicht.
Auskommentieren dieses spezifischen DSI-Befehls (in diesem Beispiel Zeile 250) , der die Steuerregister des Panels freigibt:


Dies bewirkt, dass das Panel mit einer umgekehrten Scanrichtung arbeitet, was zu einer effektiven Drehung des angezeigten Bildes um 180 Grad führt.
In dieser Reihenfolge sind keine weiteren Änderungen erforderlich, um die Drehung anzuwenden.
Dieses Verhalten ist Panel-spezifisch und hängt davon ab, wie der Panel-Controller seine Initialisierungsbefehle interpretiert. Die Änderung betrifft nur die Panel-seitige Scan-Ausrichtung und funktioniert unabhängig vom LTDC-Framebuffer-Scan-Prozess. Es ist keine Hardware-Rotation des Framebuffers auf der STM32-Seite erforderlich.
Bei dieser Methode müssen die Touch-Koordinaten immer noch separat ausgerichtet werden, da der Touch-Controller weiterhin Rohkoordinaten basierend auf der physischen Ausrichtung des Sensors meldet.
Touchbedienung mit LITEK ILI2132A in Riverdi IPS-Displays
Alle Riverdi IPS-Displays bis zu 10 Zoll verwenden denkapazitiven Touch-Controller ILITEK ILI2132A. Wenn Sie mit Bildschirmdrehung auf STM32-basierten Systemen arbeiten, ist es wichtig zu verstehen, wie dieser Controller Touch-Koordinaten meldet und wie die Drehung gehandhabt werden muss.
Bericht über Rohkoordinaten korrigiert
Der ILI2132A meldet immer unbearbeitete, unveränderte Berührungskoordinaten, die direkt an die physische Ausrichtung des Berührungssensors gebunden sind. Der Controller bietet keine Konfigurationsoption, um zwischen Hoch- und Querformat umzuschalten, und unterstützt auch keine Drehung zur Laufzeit oder 180-Grad-Inversion der gemeldeten Koordinaten.
Es gibt kein Orientierungs- oder Rotationsregister, das verwendet werden kann, um dem Controller mitzuteilen, dass das Display gedreht wurde. Unabhängig von der Bildschirmausrichtung, die vom GUI-Framework oder Display-Controller verwendet wird, gibt der ILI2132A weiterhin die gleichen X- und Y-Rohwerte aus.
Dieses Verhalten ist konstruktionsbedingt und sollte als feste Eigenschaft des Controllers betrachtet werden.
Software-basierte Touch-Rotation und -Ausrichtung
Da der ILI2132A immer Rohkoordinaten meldet, muss die Touch-Ausrichtung vollständig in Software implementiert werden. Bildschirmdrehung und Touch-Mapping sind zwei unabhängige Schritte und müssen konsistent gehandhabt werden.
Der empfohlene Ansatz ist, die rohen Touch-Koordinaten entsprechend der endgültigen Bildschirmausrichtung zu transformieren, bevor sie an das GUI-Framework weitergegeben werden.
Bestimmen Sie zunächst die endgültige Bildschirmausrichtung, die das System verwendet, z.B. natives Querformat, Hochformat, umgekehrtes Querformat oder umgekehrtes Hochformat. Diese Ausrichtung wird in der Regel durch die TouchGFX-Projekteinstellungen oder durch die LVGL-Anzeigendrehung definiert.
Als nächstes lesen Sie die vom ILI2132A gemeldeten Rohkoordinaten der Berührung. In diesem Stadium spiegeln die Koordinaten immer die native Ausrichtung des Berührungssensors wider.
Wenden Sie dann eine Koordinatentransformation an, die auf der ausgewählten Bildschirmausrichtung basiert. Die Transformation hängt von der Breite und Höhe des Bildschirms nach der Drehung ab und beinhaltet in der Regel das Vertauschen von Achsen und das Invertieren eines oder beider Koordinatenbereiche.
Zum Beispiel:
- ohne Drehung, können die Rohkoordinaten direkt verwendet werden
- bei einer 90-Grad-Drehung werden X und Y vertauscht und eine Achse wird invertiert
- bei einer 180-Grad-Drehung werden beide Achsen invertiert
- bei einer 270-Grad-Drehung werden X und Y im Vergleich zum 90-Grad-Fall mit der entgegengesetzten Inversion vertauscht
Schließlich leiten Sie die transformierten Koordinaten an das GUI-Framework weiter. In TouchGFX geschieht dies über die Touch-Controller-Schnittstelle. In LVGL werden die korrigierten Koordinaten über den Callback des Eingabegerätetreibers bereitgestellt.
Das GUI-Framework selbst weiß nichts von der physischen Ausrichtung der Berührung und erhält immer bereits ausgerichtete Koordinaten.
Referenz der Rotationszuordnung
Nehmen Sie an:
- W ist die Breite des Bildschirms nach der Drehung
- H ist die Bildschirmhöhe nach der Drehung
- (x, y) sind rohe Berührungskoordinaten
- (x‘, y‘) sind transformierte Koordinaten, die an das GUI-Framework übergeben werden
Dann:
Keine Drehung (0 Grad)
Verwenden Sie die Rohkoordinaten direkt:
- x‘ = x
- y‘ = y
90-Grad-Drehung (Hochformat)
Tauschen Sie die Achsen und drehen Sie eine Achse um:
- x‘ = y
- y‘ = W – 1 – x
180-Grad-Drehung (umgekehrtes Querformat)
Beide Achsen invertieren:
- x‘ = W – 1 – x
- y‘ = H – 1 – y
270-Grad-Drehung (umgekehrtes Hochformat)
Tauschen Sie die Achsen und kehren Sie die gegenüberliegende Achse um:
- x‘ = H – 1 – y
- y‘ = x
Diese Transformationen werden in der Berührungsebene angewandt und haben keinen Einfluss auf das Display-Rendering.
Hinweis zu größeren Riverdi-Displays
Für größere Riverdi-Displays wird ein anderer Touch-Controller verwendet. IPS-Displays oberhalb dieses Größenbereichs verwenden in der Regel den ILITEK ILI2511 Touch-Controller. Während das allgemeine Prinzip der Trennung von Bildschirmdrehung und Touch Mapping gleich bleibt, können die Details der Implementierung abweichen und sollten für den jeweiligen Controller und die Display-Konfiguration überprüft werden.
Verifizierung
Nach Anwendung der oben beschriebenen Schritte sollte die Benutzeroberfläche in der richtigen Ausrichtung erscheinen und die Berührungseingabe sollte mit den Elementen der Benutzeroberfläche übereinstimmen. Eine Drehung des Framebuffers während der Laufzeit sollte nicht erforderlich sein. Wenn das Berührungsverhalten weiterhin nicht korrekt ist, sollten Sie die Achseninversion und die Auflösungsparameter erneut überprüfen.
Häufige Fallstricke
Zu den häufigen Problemen gehören die Annahme, dass LTDC die Hardware-Rotation unterstützt, das Drehen der Benutzeroberfläche ohne Korrektur der Berührungskoordinaten und die Vermischung der Invertierung auf der Panel-Seite mit Änderungen der Ausrichtung auf GUI-Ebene ohne klare Trennung.
Bildschirmdrehung mit LVGL
LVGL unterstützt die Bildschirmdrehung in 90-Grad-Schritten. Die Ausrichtung der Anzeige kann mit
lv_display_set_rotation(disp, LV_DISPLAY_ROTATION_xxx) geändert werden, wobei xxx entweder 0, 90, 180 oder 270 ist.
Wenn die Drehung aktiviert ist, aktualisiert LVGL sein internes Koordinatensystem und tauscht die horizontale und vertikale Auflösung nach Bedarf.
Auf STM32-Systemen, die LTDC verwenden, wird die Rotation vollständig in Software gehandhabt. LVGL verlässt sich nicht auf die Rotation des Hardware-Framebuffers. Je nach ausgewähltem Rendering-Modus können die Pixeldaten im Flush-Callback gedreht werden, bevor sie an das Display gesendet werden. Für gedrehte Bildschirme wird in der Regel LV_DISPLAY_RENDER_MODE_PARTIAL verwendet, da hier einzelne gerenderte Bereiche vor dem Flush gedreht werden können.
Dieser Ansatz wurde auf STM32-Systemen mit Riverdi-Displays unter Verwendung von LVGL Version 9.1 und neueren Versionen getestet.
Selbst wenn die LVGL-Drehung aktiviert ist, melden die Touch-Controller weiterhin die Rohkoordinaten. Bei Riverdi IPS-Displays, die ILITEK ILI2132A verwenden, müssen die Touch-Koordinaten immer noch in Software umgewandelt werden, um mit der gewählten Bildschirmausrichtung übereinzustimmen.
Weitere Einzelheiten zu den LVGL-Drehmodi, APIs und Beispielen finden Sie in der offiziellen LVGL-Dokumentation:
LVGL Bildschirmdrehung
Zusammenfassung
Auf STM32-Systemen, die LTDC verwenden, wird die Bildschirmdrehung vollständig in Software gehandhabt. TouchGFX wird verwendet, um die primäre Ausrichtung zu definieren, indem die Benutzeroberfläche für die erforderlichen Bildschirmabmessungen gerendert wird, während bei Bedarf eine zusätzliche 180-Grad-Korrektur auf der Panel- oder Softwareebene vorgenommen werden kann.
Dieser mehrschichtige Ansatz bietet eine zuverlässige und wartbare Lösung, ohne sich auf eine nicht unterstützte Hardware-Rotation des Framebuffers zu verlassen, und ist für langfristige industrielle Anwendungen geeignet.
ENTDECKEN SIE UNSER
Whitepaper
Erzielen Sie die perfekte Interaktion zwischen Benutzer und Display mit dem richtigen Touchsensor-IC. Hatten Sie jemals Probleme mit Phantomberührungen oder Zertifizierungen? Verbessern Sie Ihre Forschung und Entwicklung wie ein Profi mit unserem Whitepaper!



