diese Library dient zum ansteuern eines Grafik LC-Displays mit einem ILI9341-Chip.
(240 x 320 Pixel und 16bit Farbe)
das Display wird per SPI angesteuert (aus dem Grund wird auch noch die SPI-Library benötigt)
in der Library ist das löschen vom Bildschirm und das setzen von Punkten, zeichnen von Linien und Kreisen dabei.
weil das ganze nur über SPI angesteuert wird, ist es nicht gerade sehr schnell aber dafür braucht man nur 4 Leitungen.
MISO wird nicht benötigt, Reset muss an Vcc und die LED-Hintergrundbeleuchtung kann man per Vorwiderstand auch an Vcc klemmen.
Hinweis zur Benutzung der Textausgabe :
Es können die Zeichensätze der Font-Library benutzt werden, allerdings muss der Include Pfad in den Font.c Files angepasst werden.
Bild von der Display Rückseite :
Benutzte Pins :
1 2 3 4 5 | PB11 : CS (ChipSelect) PB12 : D/C (DATA/CMD) PB13 : SPI_CLK PB14 : SPI_MISO (MISO / SDO) [nicht notwendig] PB15 : SPI_MOSI (MOSI / SDI) |
Funktionen :
1 2 3 4 5 6 7 8 | ErrorStatus UB_LCD_Init(void); // init vom LCD void UB_LCD_FillScreen(uint16_t color); // füllt den Screen mit einer Farbe void UB_LCD_SetWindow(uint16_t xstart, uint16_t ystart, uint16_t xend, uint16_t yend); // setzt ein Window zum zeichnen void UB_LCD_DrawPixel(int16_t xpos, int16_t ypos, uint16_t color); // zum zeichnen eines Pixels void UB_LCD_DrawLine(int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color); // zum zeichnen einer Linie void UB_LCD_DrawCircle(int16_t x0, int16_t y0, int16_t radius, uint16_t color); // zum zeichnen eines Kreises void UB_Font_DrawChar(uint16_t x, uint16_t y, uint8_t ascii, UB_Font *font, uint16_t vg, uint16_t bg); // zum schreiben eines Buchstabens void UB_Font_DrawString(uint16_t x, uint16_t y,char *ptr, UB_Font *font, uint16_t vg, uint16_t bg); // zum schreiben eines Strings |
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 | //-------------------------------------------------------------- // File : main.c // Datum : 23.11.2013 // Version : 1.0 // Autor : UB // EMail : mc-4u(@)t-online.de // Web : www.mikrocontroller-4u.de // CPU : STM32F4 // IDE : CooCox CoIDE 1.7.4 // GCC : 4.7 2012q4 // Module : CMSIS_BOOT, M4_CMSIS_CORE // Funktion : Demo der LCD-ILI9341 Library // Hinweis : Diese zwei Files muessen auf 8MHz stehen // "cmsis_boot/stm32f4xx.h" // "cmsis_boot/system_stm32f4xx.c" //-------------------------------------------------------------- #include "main.h" #include "stm32_ub_lcd_ili9341_spi.h" int main(void) { SystemInit(); // Quarz Einstellungen aktivieren // init vom LCD UB_LCD_Init(); // LCD mit grün löschen UB_LCD_FillScreen(RGB_COL_GREEN); // einen Blauen Kreis zeichnen UB_LCD_DrawCircle(120,160,60,RGB_COL_BLUE); while(1) { } } |
Hier die Library zum Download :
ub_stm32f4_lcd_ili9341_spi_v101
Hier der komplette CooCox-Projektordner zum Download :
klasse!
Da werd ich das alte Display doch nochmal aus Schublade rauskramen.
Ein TFT mit 4 Leitungen ansteuern macht einen fliegenden Laboraufbau viel einfacher, bei den anderen Beispielen musste man immer schauen ob sich nicht doch irgendwo eine der 20 Leitungen gelöst hatte.
funktioniert gut,
aber die Geschwindigkeit ist leider mies, beim Bildschirmfüllen fällt es extrem auf, für Linien oder Kreise ist es allerdings ok,
leider ist die Font-Lib nicht kompatibel, da bekomme ich wegen dem fehlenden Display-Mode sowie LCD-RAM Fehlermeldungen
das ist kein Problem. Füge einfach eine Variable ein und setz sie fest auf einen Wert
und ersetze alle stellen in denen ins RAM geschrieben wird, z.B.
für die X/Y-Adressen musst du dir den Code ansehen wie die berechnet werden und “UB_LCD_SetCursor2Draw” braucht man gar nicht mehr.
den Speed kannst du event. etwas verbessern, in dem du in der SPI-Lib den SPI-Vorteiler kleiner einstellst…bis das Display nicht mehr reagiert. Ich denke 10MHz sollte das Display noch mittmachen.
Habe nach deiner Anleitung den Code an allen nötigen Stellen geändert, nun läuft die Textanzeige auch, danke für die schnelle Hilfe.
Mein Display läuft mit 21MHz SPI-Takt zuverlässig, da hätte ich auch selbst drauf kommen können… man sieht zwar den Bildaufbau noch aber man hat keine “Wartezeit” mehr
Hallo,
kann man die Font Lib für das Display verwenden. Ich habe es versucht, allerdings meckert der Compiler, dass einige Funktionen doppelt definiert sind. Es gibt die Headerdatei für das Display ili9341 und für das Display st7783. Beide zusammen stören sich. Wo muss ich denn welche Headerdateien einbinden, damit ich die Font Lib benutzen kann?
Gruß
Kai
Hat sich erledigt. Habe es hinbekommen.
Hallo,
ich habe von adafruit ein Display mit dem ili9340.
Kann man die Library auch dafür verwenden.
Gruß
Kai
Wahrscheinlich benutzt adafruit nur ein anderes Breakout, letztendlich wirst du es einfach mal probieren müssen.
Es funktioniert. Ich habe es aber an SPI3 gehängt.
Guten Tag,
Ich versuche ein Display mit dem ili9340 anzusteuern.
Wir haben alle Pins zu (SPI1) umbenannt aber es funktioniert nicht.
Der Versuch alle SPI2 namen in SPI1 umzuschreiben hat uns auch nicht weitergebracht.
Gibt es eventuell eine einfache Möglichkeit, unser Display über SPI1 zum Laufen, zu bekommen?
Liebe Grüße,
Malte
wenn du statt SPI2 den SPI1 benutzen willst :
1.)
musst du zuerst die zwei Files : “stm32_ub_spi2.c” und “stm32_ub_spi2.h” löschen und durch die zwei files “stm32_ub_spi1.c” und “stm32_ub_spi1.h” ersetzen.
(Diese Files finden sich in der Library “15-SPI_LoLevel”)
2.)
Im “stm32_ub_spi1.c” sind die benötigten SPI-Pins der CPU eingetragen.
3.)
Im File “stm32_ub_lcd_ili9341_spi.h” muss der Include auf die neue “stm32_ub_spi1.h” geändert werden.
4.)
Und alle Funktionen in der “stm32_ub_lcd_ili9341_spi.c” die “SPI2″ enthalten müssen auf “SPI1″ umbenannt werden.
5.)
Das compilieren darf keine Fehler melden
Sehr vielen Dank für die Hilfe
Nice work!
LCD works great!
Is possible to display string? Is there any library? I searching for Discovery board and no luck …
Best regards,
Klemen
please download Version 1.1 and try “UB_Font_DrawString”. You also need Font-Files included here : http://mikrocontroller.bplaced.net/wordpress/?page_id=527. And you have to change the include path in the font.c files to “stm32_ub_lcd_ili9341_spi.h”
Erst mal Klasse, dass Du dein Wissen mit anderen teilst und den Einstieg mit dem ili9431 enorm unterstützt!
Jedoch wollte ich gerne das Display rotoeren lassen bzw. von “PORTRAIT auf LANDSCAPE ändern. Jedoch finde ich keine Funktion zum Modus…hast DU da einen Tip für mich oder muß ich das datasheet nochmal büffeln?
Nochmals, coole Leistung!
Christian
das muss im Datenblatt irgendwo stehen.
Hallo,
das Display wird deutlich schneller, wenn man die SPI mit der DMA fütttert. Der Speicherplatz reicht zwar nur für 1 Page aber die passt auch noch so eben rein. Dann kann man auf der Page arbeiten. Ok, die CPU muss ständig den internen Bus freigeben so dass sie auch langsamer rechnet aber den Faktor 10 kriegt man schon hin.