Technisches Whitepaper: Ansteuern von LVDS-TFT-LCDs mit STM32-MCU
Aktie
Inhaltsverzeichnis
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