35-VGA_Screen-Library (STM32F4)

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 :

ub_stm32f4_vga_screen_v100

Hier der komplette CooCox-Projektordner zum Download :

Demo_35_VGA1

2 Antworten auf 35-VGA_Screen-Library (STM32F4)

  1. Gast sagt:

    Du hast nicht zufällig auch einen PAL Testbildgenerator in petto?

    • admin_ub sagt:

      nein, im Moment nicht…kann ja aber noch kommen :-)


Wie hat Dir dieser Artikel gefallen?

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

2 Antworten zu 35-VGA_Screen-Library (STM32F4)

  1. Salvador sagt:

    Hola a ver si entiendes en la traduccion del español, soy de Mexico, de baja California Norte
    Compre una tarjeta STM32f429 y la e estado usando gracias a que encontre tus videos en la red de ahi me pase a tu Blog en WordPress y me encanto desde que vi tu Proyecto Oszi de Oscilloscopio, funciona perfecto tu codigo en mi tarjeta, ya pasaron muchos años desde 2014 queria saber si con este proyecto VGA podria utilizar el Osciloscopio en un monitor VGA pero supongo necesito relacionar ambos codigos, el de Oszi y esta biblioteca VGA, es posible? mi LCD se a roto
    Y otra cosa aprovechando
    no se nada mas que muy poco de Programacion y estaria dispuesto a aprender programacion en C para poder de momento compilar y despues tambien modificar o crear aplicaciones para esta u otras tarjetas, que me libro me recomiendas para empezar desde cero? ya lo buscaria yo en español para comprenderlo aun mejor

Schreibe einen Kommentar zu Salvador Antworten abbrechen

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