Technisches Whitepaper: Ansteuern von LVDS-TFT-LCDs mit STM32-MCU

Einführung

Dieser Blog beschreibt die erforderlichen Schritte zur Verbindung einer MCU der STM32F7-Serie mit dem Tianma TM121JDGP30 TFT-LCD mithilfe des LVDS-Transmitters SN75LVDS83A. Die STM32F7-MCU steuert das Display über GPIO, DMA und Timer an. Der SN75LVDS83A wandelt die parallelen RGB-Signale des STM32F7 in die vom TFT-LCD benötigten LVDS-Signale um.

Zentrale Herausforderungen

  • Richten Sie GPIO, Timer und DMA des STM32F7-MCU ein, um korrekte RGB-Daten zu erzeugen
  • LVDS-Signale müssen korrekt erzeugt und an das LCD übertragen werden
  • Richtiges Timing und Synchronisierung sind zwischen MCU, LVDS-Sender und TFT-Display unerlässlich

Systemübersicht

Schlüsselkomponenten

STM32F745 MCU

  • GPIO-Pins: Werden zur Übertragung von RGB-Daten (D0 bis D23) und Steuersignalen (HSYNC, VSYNC, DE, PCLK) verwendet.
  • Timer: Werden zum Generieren von Pixeltakt- (PCLK), HSYNC-, VSYNC- und DE-Signalen verwendet.
  • DMA: Wird verwendet, um Pixeldaten effizient an GPIO-Pins zu übertragen.

LVDS-Sender SN75LVDS83A

  • Eingabe: 24-Bit-RGB-Paralleldaten
  • Ausgang: LVDS-Differenzpaare
  • Takt: Differenztakteingang
  • Spannung: 3,3 V Logik

TM121JDGP30 TFT-LCD

  • Auflösung: 1280x800 (WXGA)
  • Schnittstelle: 24-Bit-RGB-Eingang über LVDS
  • Spannung: 3,3 V Logik für Steuerung und Daten

Externe Komponenten: Pegelwandler (falls erforderlich), Widerstände, Kondensatoren usw.

STM32F745 MCU (GPIO & DMA) --> SN75LVDS83A LVDS-Sender --> TM121JDGP30 TFT LCD

LVDS-Signalanforderungen

  • Das TFT-LCD TM121JDGP30 verwendet einen 24-Bit-RGB888-Eingang und der SN75LVDS83A wandelt diese Signale in LVDS um.
  • Das LCD benötigt Synchronisierungssignale wie HSYNC, VSYNC und DE, um Inhalte korrekt anzuzeigen.

Schritte zum Verbinden von STM32F745 mit LVDS-TFT-LCD (TM121JDGP30)

Schritt 1: Hardware-Verbindung

MCU zu SN75LVDS83A

  • Verbinden Sie die 24-Bit-RGB-Datenleitungen (D0–D23) von den STM32F745-GPIOs mit den entsprechenden Pins auf dem SN75LVDS83A.
  • Verbinden Sie zur Synchronisierung HSYNC-, VSYNC- und DE-Signale vom STM32F745 mit dem SN75LVDS83A.
  • Verbinden Sie PCLK von STM32F745 mit dem Takteingang des SN75LVDS83A.

SN75LVDS83A bis TM121JDGP30

  • Der SN75LVDS83A wandelt die parallelen RGB-Signale in LVDS-Signale um. Verbinden Sie die LVDS-Datenpaare und den Takt mit den entsprechenden Pins des TM121JDGP30.

Schritt 2: GPIO-Initialisierung

  • Konfigurieren Sie STM32F745 GPIO-Pins für 24-Bit-RGB-Daten und Synchronisierungssignale.
  • Stellen Sie die Pins für den alternativen Funktionsmodus ein, um die Hochgeschwindigkeitsdatenübertragung und -synchronisierung zu handhaben.

void GPIO_Init(void) {
// GPIO für RGB- und Synchronisierungssignale konfigurieren (HSYNC, VSYNC, DE, PCLK)
// GPIO für 24-Bit-RGB konfigurieren und Signale mithilfe der STM32F745-GPIO-Bibliothek synchronisieren
}

Schritt 3: Timer-Initialisierung

  • Richten Sie Timer ein, um die Signale Pixeltakt (PCLK), Horizontalsynchronisation (HSYNC), Vertikalsynchronisation (VSYNC) und Datenfreigabe (DE) zu generieren.
  • Konfigurieren Sie die Timer mit den erforderlichen Frequenzen, damit sie der Timing-Spezifikation TM121JDGP30 entsprechen.

void Timer_Init(void) {
// Timer-Konfiguration zur Generierung von Synchronisationssignalen (HSYNC, VSYNC, DE) und Pixeltakt (PCLK)

Schritt 4: DMA-Setup

  • Verwenden Sie DMA, um Pixeldaten für eine effiziente Datenübertragung vom Speicher auf die GPIO-Pins zu übertragen.
  • Konfigurieren Sie den DMA im Speicher-zu-Peripherie-Modus, um RGB888-Daten zu übertragen.

void DMA_Init(void) {
// DMA-Konfiguration zur effizienten Übertragung von Pixeldaten vom Speicher zu GPIO-Pins
}

Schritt 5: Synchronisierungssignalerzeugung

Zur Erzeugung der Synchronisationssignale (HSYNC, VSYNC, DE) werden die horizontalen und vertikalen Timing-Parameter aus dem Datenblatt des TM121JDGP30 verwendet. Dazu gehören die Timings für Austastperioden und aktive Anzeigebereiche.

void Sync_Generation(void) {
// Logik zur Erzeugung des Horizontalsynchronsignals (HSYNC)
// Logik zur Erzeugung des vertikalen Synchronisationssignals (VSYNC)
// Logik zur Generierung des Datenfreigabesignals (DE)
}

Die detaillierten Timing-Parameter aus dem Datenblatt steuern, wann diese Signale aktiv sind. Hier ist ein Beispiel für die Generierung des Sync-Signals:

  • HSYNC ist während der horizontalen Austastperiode aktiv und während des aktiven Videobereichs inaktiv.
  • VSYNC wird zu Beginn jedes Frames generiert.
  • DE ist während der Pixeldatenübertragungszeit aktiv (wenn sowohl HSYNC als auch VSYNC aktiv sind).

Schritt 6: Frame-Puffer-Verwaltung

Der Bildspeicher speichert die Pixeldaten (RGB888) und wird regelmäßig aktualisiert. Der DMA überträgt die Pixeldaten vom Bildspeicher an die GPIO-Pins, die mit dem LVDS-Sender verbunden sind.

void loadImageData(uint8_t* imageData) {
// RGB888-Daten in den Frame-Puffer laden
}
void updateFrameBuffer(void) {
// DMA-Übertragung vom Frame-Puffer zum GPIO
}

Schritt 7: Hauptprogramm

In der Hauptschleife wird der Bildpuffer kontinuierlich aktualisiert und für jedes Bild werden Synchronisierungssignale generiert.

int main(void) {
HAL_Init();
GPIO_Init();
Timer_Init();
DMA_Init();
während (1) {
updateFrameBuffer(); // Aktualisiere den Frame-Puffer regelmäßig
HAL_Delay(50); // Verzögerung für gewünschte Bildrate anpassen (zB 60 Hz)
}
}

Softwareüberlegungen

Initialisierungscode

  • Initialisieren Sie GPIO-Pins für RGB-Daten und Synchronisierungssignale.
  • Richten Sie Timer ein, um die erforderlichen Synchronisierungssignale und den Pixeltakt zu generieren.
  • Konfigurieren Sie DMA, um Pixeldaten vom Speicher an GPIO-Pins zu übertragen.

Pixeldatenformatierung

  • Die Pixeldaten liegen im RGB888-Format vor, es ist also keine Konvertierung erforderlich.
  • Jedes Pixel wird durch 24 Bit dargestellt: 8 Bit für Rot, 8 Bit für Grün und 8 Bit für Blau.

Display-Update

  • Aktualisieren Sie die Anzeige regelmäßig, indem Sie neue Datenrahmen per DMA an den LVDS-Sender senden.

Synchronisierungssignal-Timing

Die Timing-Spezifikation TM121JDGP30 definiert die folgenden Parameter zum Generieren von Synchronisierungssignalen:

  • Horizontale Gesamtperiode (tH): Die Gesamtzeit für eine horizontale Linie.
  • Horizontal Back Porch (tHBP): Die Austastperiode vor dem aktiven Anzeigebereich.
  • Horizontal Front Porch (tHFP): Die Austastperiode nach dem aktiven Anzeigebereich.
  • Vertikale Gesamtperiode (tV): Die Gesamtzeit für ein Bild.
  • Vertical Back Porch (tVBP) und Vertical Front Porch (tVFP) ähneln ihren horizontalen Gegenstücken, jedoch mit vertikaler Achse.

Diese Zeitparameter bestimmen, wann mit der Generierung von HSYNC-, VSYNC- und DE-Signalen begonnen und wann damit aufgehört wird.

Abschluss

Die STM32F745 MCU kann das TFT-LCD TM121JDGP30 erfolgreich über den LVDS-Transmitter SN75LVDS83A ansteuern. Durch die Konfiguration von GPIO, Timern und DMA kann die MCU die erforderlichen Synchronisationssignale und Pixeldaten generieren und an den LVDS-Transmitter übertragen, der dann das LCD ansteuert. Dieser Ansatz bietet Flexibilität und Kontrolle über das Display, auch ohne dedizierten LCD-Controller.

Verweise

  • STM32F745 Referenzhandbuch
  • SN75LVDS83A Datenblatt
  • TM121JDGP30TFT LCD-Datenblatt
  • LVDS-Signalstandards
  • STM32 HAL-Bibliotheksdokumentation
Zurück zum Blog