Mit dieser Library kann ein Monitor mit VGA-Anschluss direkt an das STM32 Discovery-Board angeschlossen werden.
Als VGA-Mode wird der Industrie-Standard 640 x 480 @60Hz mit 31,5kHz Zeilenfrequenz erzeugt. Die Farbtiefe liegt bei 8bit (RGB332). Die tatsächliche Anzeigeauflösung beträgt allerdings nur 320 x 240 Pixel (jedes Pixel besteht also aus 2×2 Bildpunkten). Der Grund hierfür ist, das im STM32F4 nicht genügend RAM vorhanden ist um 640×480 Byte zu speichern.
Die HSync- und VSync-Signale werden mit einem Timer erzeugt (TIM2) und die 8bit-Bilddaten werden per Timer (TIM1) und DMA2 direkt vom RAM an den GPIOs ausgegeben.
Die Pinbelegung steht im C-File und einen Schaltplan gibts hier als Bild.
Die Library bedient nur die Grundfunktionen wie Initialisierung, ClearScreen und setzen von einem Bildpunkt.
-für die Grafik-Funktionen (Linen, Kreise, Bilder) gibt es eine VGA-Graphic-Library
-für Textausgabe gibt es eine VGA-Font-Library
Hinweis :
die Interrupt-Funktionen und der DMA sind sehr zeitkritisch jede verzögerung macht sich hier sofort durch Bildfehler bemerkbar. Aus dem Grund wird an diesen Stellen in der Software direkt auf die Register zugegriffen (Assembler wäre hier noch besser)
Ich habe nur einen Display-RAM angelegt, es gibt KEINEN zweiten Bildpuffer. Die Anzeige und die Pixel-Write Funktionen greifen also gleichzeitig auf das RAM zu. Wenn ihr bewegte Sachen darstellen wollt, müsst ihr event. entweder eine Funktion schreiben, die auf das RAM nur dann zugreift, wenn gerade kein Bild angezeigt wird. Oder ihr implementiert einen zweiten RAM-Bereich als Bildpuffer und schaltet zwischen den beiden hin und her.
(falls ich da tätig werden soll, schreibt mir)
Bilder :
Benutzte Pins :
1 2 3 4 5 | PB11 = HSync-Signal PB12 = VSync-Signal PE8+PE9 = Farbe BLAU PE10-PE12 = Farbe GRÜN PE13-PE15 = Farbe ROT |
Voraussetzungen :
1 2 | Benutzte Module der CooCox-IDE : GPIO,TIM, MISC, DMA Benutzte Librarys : keine |
Standard Farben :
1 2 3 4 5 6 7 8 9 | #define VGA_COL_BLACK 0x00 #define VGA_COL_BLUE 0x03 #define VGA_COL_GREEN 0x1C #define VGA_COL_RED 0xE0 #define VGA_COL_WHITE 0xFF #define VGA_COL_CYAN 0x1F #define VGA_COL_MAGENTA 0xE3 #define VGA_COL_YELLOW 0xFC |
Funktionen :
1 2 3 | void UB_VGA_Screen_Init(void); // init vom VGA-Screen void UB_VGA_FillScreen(uint8_t color); // füllt den Screen mit einer Farbe void UB_VGA_SetPixel(uint16_t xp, uint16_t yp, uint8_t color); // zum setzen eines Pixels |
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 | //-------------------------------------------------------------- // File : main.c // Datum : 27.04.2013 // Version : 1.0 // 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 VGA-Library (320x240, 8bit) // Hinweis : Diese zwei Files muessen auf 8MHz stehen // "cmsis_boot/stm32f4xx.h" // "cmsis_boot/system_stm32f4xx.c" //-------------------------------------------------------------- #include "main.h" #include "stm32_ub_vga_screen.h" int main(void) { uint32_t n; SystemInit(); // Quarz Einstellungen aktivieren UB_VGA_Screen_Init(); // Init vom VGA-Screen // Screen mit einer Farbe loeschen UB_VGA_FillScreen(VGA_COL_BLUE); // einen roten Strich zeichnen for(n=0;n<100;n++) { UB_VGA_SetPixel(10+n,50,VGA_COL_RED); } while(1) { } } |
Hier die Library zum Download :
Hier der komplette CooCox-Projektordner zum Download :
Du hast nicht zufällig auch einen PAL Testbildgenerator in petto?
nein, im Moment nicht…kann ja aber noch kommen