06-LCD_ST7783-Library (STM32F4)

-diese Library dient zum ansteuern eines Grafik LC-Displays mit einem ST7783-Chip.
(240 x 320 Pixel und 16bit Farbe)

-das Display wird über den External-Memory-Contoller “FSMC” verwaltet und muss dementsprechend mit der CPU verbunden werden (siehe Pinbelegung in der Library)

-die Library bedient die Grundfunktionen wie Initialisierung, Screen-Ausrichtung, Hintergrundbeleuchtung, setzen vom Cursor und löschen vom Bildschirm.

-für die Grafik-Funktionen (Linen, Kreise, Bilder) gibt es eine Graphic-Library
-für Textausgabe gibt es eine Font-Library

Geschwindigkeit : ein “ClearScreen” mit einer Farbe dauert ca. 9ms

Backlight : (Hinweis)

Das CPU-Signal “LCD_Backlight” kann (und darf) nicht direkt an die LEDs der Hintergrundbeleuchtung angeschlossen werden !! Es muss ein PNP-Transistor dazwischengeschaltet werden (siehe Bild). [PB0 = LED_EN]

backlight

16bit 8080-Parallel-Mode :

1
2
3
4
IM0 = Lo
IM1 = Hi
IM2 = Lo
IM3 = Lo

Beispielbild (per Graphic-LIB) :

lcd

Benutzte Pins :

1
2
3
4
5
6
7
8
9
10
11
PB0  -> LCD_Backlight      PE3  -> LCD_RS
PD0  -> LCD_D2             PE7  -> LCD_D4
PD1  -> LCD_D3             PE8  -> LCD_D5
PD4  -> LCD_RD             PE9  -> LCD_D6
PD5  -> LCD_WR             PE10 -> LCD_D7
PD7  -> LCD_CS             PE11 -> LCD_D8
PD8  -> LCD_D13            PE12 -> LCD_D9
PD9  -> LCD_D14            PE13 -> LCD_D10
PD10 -> LCD_D15            PE14 -> LCD_D11
PD14 -> LCD_D0             PE15 -> LCD_D12
PD15 -> LCD_D1

Voraussetzungen :

1
2
Benutzte Module der CooCox-IDE : GPIO,FSMC
Benutzte Librarys : keine

Standard Farben :

1
2
3
4
5
6
7
8
9
10
11
#define  RGB_COL_BLACK          0x0000
#define  RGB_COL_BLUE           0x001F
#define  RGB_COL_GREEN          0x07E0
#define  RGB_COL_RED            0xF800
#define  RGB_COL_WHITE          0xFFFF
 
#define  RGB_COL_CYAN           0x07FF
#define  RGB_COL_MAGENTA        0xF81F
#define  RGB_COL_YELLOW         0xFFE0
 
#define  RGB_COL_GREY           0xF7DE

Funktionen :

1
2
3
4
5
6
7
ErrorStatus UB_LCD_Init(void);                             // init vom LCD
void UB_LCD_SetCursor2Draw(uint16_t xpos, uint16_t ypos);  // setzt den Cursor zum zeichnen
void UB_LCD_FillScreen(uint16_t color);                    // füllt den Screen mit einer Farbe
void UB_LCD_Backlight_On(void);                            // Backlight einschalten
void UB_LCD_Backlight_Off(void);                           // Backlight ausschalten
void UB_LCD_SetMode(LCD_MODE_t mode);                      // Modus : Portrait,Landscape
void UB_LCD_SetWindow(uint16_t xstart, uint16_t ystart, uint16_t xend, uint16_t yend); // setzt ein Window zum zeichnen

Beispiel :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
//--------------------------------------------------------------
// File     : main.c
// Datum    : 18.02.2013
// Version  : 1.1
// Autor    : UB
// EMail    : mc-4u(@)t-online.de
// Web      : www.mikrocontroller-4u.de
// CPU      : STM32F4
// IDE      : CooCox CoIDE 1.7.0
// Module   : CMSIS_BOOT, M4_CMSIS_CORE
// Funktion : Demo der LCD-Library (ST7783)
// Hinweis  : Diese zwei Files muessen auf 8MHz stehen
//              "cmsis_boot/stm32f4xx.h"
//              "cmsis_boot/system_stm32f4xx.c"
//--------------------------------------------------------------
 
#include "main.h"
#include "stm32_ub_lcd_st7783.h"
 
int main(void)
{
  uint32_t n;
 
  SystemInit(); // Quarz Einstellungen aktivieren
 
  UB_LCD_Init(); // Init vom LCD
 
  // Display mit einer Farbe loeschen
  UB_LCD_FillScreen(RGB_COL_BLUE);
 
  // Cursor setzen
  UB_LCD_SetCursor2Draw(10,50);
  // einen roten Strich zeichnen
  for(n=0;n<100;n++) {
    LCD_RAM=RGB_COL_RED;
  }
 
  while(1)
  {
 
  }
}

Hier die Library zum Download :

ub_stm32f4_lcd_st7783_v106

Hier der komplette CooCox-Projektordner zum Download :

Demo_06_LCD1

15 Antworten auf 06-LCD_ST7783-Library (STM32F4)

  1. Hans sagt:

    Woher bekommt man ein Display mit einem ST7783 Controller?

    • admin_ub sagt:

      Meines war bei dem Motherboard von EBay dabei…aber es funktioniert auch ein Display mit SSD1289-Controller (den gibt es häufiger). Man muss dann nur die Initialisierung anpassen. (da hab ich ein Beispiel hier)

  2. Hans sagt:

    Ja ein SSD1289 Display habe ich hier. Könntest du mir die Initialisierung dafür zur Verfügung stellen?
    Wäre sehr nett.

    • admin_ub sagt:

      ok, geb mir etwas zeit…ich melde mich per Email wieder.

    • admin_ub sagt:

      du hast post….sag bescheid ob die LIB geht oder nicht

  3. Andreas sagt:

    Ich würde mich auch für die LIB für das SSD1289 interessieren. Wäre super, wenn es funktioniert und du mir dann die LIB zukommen lassen könntest.

    Vielen herzlichen Dank schon mal im voraus!

    • admin_ub sagt:

      Hi, auf der Startseite im Blog gibt es die Version 1.0 zum download. Damit kannst du (und alle die wollen) testen.

  4. Hi,

    erstmal respekt für Deine Arbeit, danke. Die libs haben mir ein paar Tage Einarbeitung gespart. Ich habe mir die stm32F3 und stm32F4 – Discovery Boards zugelegt.
    Meine Frage; deine ST7783-Library nutzt den FSM-Controller, u.a den Pin PE3 als LCD_RS (FSMC_A19). PE3 ist auf dem F4-Board auch als Chipselect für den LIS302 angeschlossen. Gibs da Probleme im Bertrieb wenn ich ich beides nutze, LCD und LIS302? Ich “stricke” auf basis deiner Grafik-Lib eine HX8347D-Lib zusammen.

    Gruß

    • admin_ub sagt:

      Hi Marco,
      Ich kann das Display und den LIS302 gleichzeitig benutzen, aber nur wenn ich nicht den DMA benutze, sondern einzeln darauf zugreife. Beim Discovery-Board muss man halt einige abstriche machen. Sauber wäre natürlich wenn die Signale getrennt wären.

      • Danke für die Antwort, dann muss wohl ein anderes Board her.

  5. Guido sagt:

    Erst mal RESPEKT für Deine Arbeit! Dank Dir trau ich mich jetzt wohl mal an den STM32F4 ran :)

    Kann es sein, das es zu dem Discovery Board die unterschiedlichsten LC Displays gibt? Ich hab hier nämlich ein mit einem SSD2119 Controller und suche dementsprechend dafür die Libs. Da hast Du nicht zufällig was für?

  6. Guido sagt:

    Kleiner Nachtrag: Habe nun nach ein paar “Spielereien” ein zu 1/4 initialisiertes Display mit rotem Hintergrund und einer blauen Linie – Farben also genau falschherum :) Also grundsätzlich funktioniert da irgendwas, nur die Register sind wohl leicht anders vom SSD2119.

    Ich musste auch (und ich bin blutiger Anfänger mit dem STM32 – umsteiger vom Atmel) zwecks Test den Pin PB0 (Backlight für SSD2189) mal für den Reset Pin missbrauchen, damit sich das Display überhaupt rührt.

    Pinbelegung vom DM-LCD35RT (Farnell / ST) ist soweit identisch wie die vom anderem Display. Allerdings liegt auf PD13 die PWM Hintergrundbeleuchtung und an PD3 halt RESET.

    Nun wed ich mal die Register studieren und schauen, wo da der Wurm drin ist. Aber echt schön das es die Seite hier gibt und schon nach weniger als 8 Stunden das Display zappelt – DANKE!

    • admin_ub sagt:

      da muss es ein Register geben in dem “BGR” auf “RGB” umgestellt werden kann.

  7. Frank sagt:

    Hallo,
    erstmal möchte ich mich für deine Arbeit bedanken.
    Ich bin gerade am programmieren und werde erst in Wochen ein Display bekommen. Da ich keine lust habe dann meine komplette Visualisierung neu zu gestellten, würde ich diese gerne direkt richtig programmieren :)

    Ich habe lediglich eine kleine Frage, wo befinden sich die Curserpositionen?
    Wo befindet sich die absolute Koordinate x=0, y=0? In der oberen linken Ecke des Displays?
    Wo befindet sich der Curser bei der Textausgabe? Unten links, oben links, oben rechts etc?
    Schon mal danke im voraus.

    Gruß

    Frank

    • admin_ub sagt:

      Cursor 0,0 ist in der Ecke links oben. Auf dem Bild da wo das Signalstärke-Symbol ist.
      x geht bis 239 (dass ist dann ganz rechts)
      y geht bis 319 (dass ist ganz unten)

      Die Textausgabe benutzt die gleichen Koordinaten, bei 0,0 erscheint der Text
      ganz oben links … 319 für y geht bei Text nicht, weil der Text selber ja eine bestimmte höhe hat (z.B. 10 Pixel) dann ist die letzt gültige Position (320-10)

      auf dem Link siehst du die Textausgabe und die zugehörenden Pixelpositionen :
      http://mikrocontroller.bplaced.net/wordpress/?page_id=527


Wie hat Dir dieser Artikel gefallen?

1 Stern2 Sterne3 Sterne4 Sterne5 Sterne (Noch keine Bewertungen)
Loading...

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert