{"id":389,"date":"2017-11-24T21:58:32","date_gmt":"2017-11-24T20:58:32","guid":{"rendered":"http:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=389"},"modified":"2017-12-31T01:06:47","modified_gmt":"2017-12-31T00:06:47","slug":"35-vga_screen-library-stm32f4","status":"publish","type":"page","link":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/stm32f4\/komplette-library-liste-stm32f4\/35-vga_screen-library-stm32f4\/","title":{"rendered":"35-VGA_Screen-Library (STM32F4)"},"content":{"rendered":"<p><div id=\"nav-below\" class=\"navigation\"><div class=\"nav-previous\"><a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/stm32f4\/komplette-library-liste-stm32f4\/34-lcd_2x16-library-stm32f4\/\" title=\"34-LCD_2x16-Library (STM32F4)\"><span class=\"meta-nav\">\u2190<\/span> 34-LCD_2x16-Library (STM32F4)<\/a><\/div><\/div><!-- #nav-below --><div id=\"nav-below\" class=\"navigation\"><div class=\"nav-next\"><a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/stm32f4\/komplette-library-liste-stm32f4\/36-vga_graphic-library-stm32f4\/\" title=\"36-VGA_Graphic-Library (STM32F4)\">36-VGA_Graphic-Library (STM32F4) <span class=\"meta-nav\">&rarr;<\/span><\/a><\/div><\/div><!-- #nav-below --><\/p>\n<p>Mit dieser Library kann ein Monitor mit VGA-Anschluss direkt an das STM32 Discovery-Board angeschlossen werden.<\/p>\n<p>Als VGA-Mode wird der Industrie-Standard 640 x 480 @60Hz mit 31,5kHz Zeilenfrequenz erzeugt. Die Farbtiefe liegt bei 8bit (RGB332). Die tats\u00e4chliche Anzeigeaufl\u00f6sung betr\u00e4gt allerdings nur 320 x 240 Pixel (jedes Pixel besteht also aus 2\u00d72 Bildpunkten). Der Grund hierf\u00fcr ist, das im STM32F4 nicht gen\u00fcgend RAM vorhanden ist um 640\u00d7480 Byte zu speichern.<\/p>\n<p>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.<\/p>\n<p>Die Pinbelegung steht im C-File und einen Schaltplan gibts hier als Bild.<\/p>\n<p>Die Library bedient nur die Grundfunktionen wie Initialisierung, ClearScreen und setzen von einem Bildpunkt.<\/p>\n<p>-f\u00fcr die Grafik-Funktionen (Linen, Kreise, Bilder) gibt es eine VGA-Graphic-Library<br \/>\n-f\u00fcr Textausgabe gibt es eine VGA-Font-Library<\/p>\n<p>Hinweis :<br \/>\ndie Interrupt-Funktionen und der DMA sind sehr zeitkritisch jede verz\u00f6gerung macht sich hier sofort durch Bildfehler bemerkbar. Aus dem Grund wird an diesen Stellen in der Software direkt auf die Register zugegriffen (Assembler w\u00e4re hier noch besser)<\/p>\n<p>Ich habe nur <span style=\"text-decoration: underline;\">einen<\/span> 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\u00fcsst 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.<br \/>\n(falls ich da t\u00e4tig werden soll, schreibt mir)<\/p>\n<p><strong>Bilder :<\/strong><\/p>\n<div id=\"gallery-1\" class=\"gallery galleryid-1415 gallery-columns-3 gallery-size-thumbnail\">\n<dl class=\"gallery-item\">\n<dt class=\"gallery-icon\"><a title=\"vga_emo2\" href=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2013\/04\/vga_emo2.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"attachment-thumbnail\" src=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2013\/04\/vga_emo2-150x150.jpg\" alt=\"Testbild mit 320x240 Pixel\" width=\"150\" height=\"150\" \/><\/a><\/dt>\n<dd class=\"wp-caption-text gallery-caption\">Testbild mit 320\u00d7240 Pixel<\/dd>\n<\/dl>\n<dl class=\"gallery-item\">\n<dt class=\"gallery-icon\"><a title=\"vga_scheet\" href=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2013\/04\/vga_scheet.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"attachment-thumbnail\" src=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2013\/04\/vga_scheet-150x150.jpg\" alt=\"Schaltplan\" width=\"150\" height=\"150\" \/><\/a><\/dt>\n<dd class=\"wp-caption-text gallery-caption\">Schaltplan<\/dd>\n<\/dl>\n<dl class=\"gallery-item\">\n<dt class=\"gallery-icon\"><a title=\"vga_buchse\" href=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2013\/04\/vga_buchse.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"attachment-thumbnail\" src=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2013\/04\/vga_buchse-150x150.jpg\" alt=\"Verdrahtung\" width=\"150\" height=\"150\" \/><\/a><\/dt>\n<dd class=\"wp-caption-text gallery-caption\">Verdrahtung<\/dd>\n<\/dl>\n<p><br style=\"clear: both;\" \/><\/p>\n<\/div>\n<p><strong>Benutzte Pins :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">PB11      = HSync-Signal\r\nPB12      = VSync-Signal\r\nPE8+PE9   = Farbe BLAU\r\nPE10-PE12 = Farbe GR\u00dcN\r\nPE13-PE15 = Farbe ROT<\/pre>\n<p><strong>Voraussetzungen :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">Benutzte Module der CooCox-IDE : GPIO,TIM, MISC, DMA\r\nBenutzte Librarys : keine<\/pre>\n<p><strong>Standard Farben :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">#define  VGA_COL_BLACK          0x00\r\n#define  VGA_COL_BLUE           0x03\r\n#define  VGA_COL_GREEN          0x1C\r\n#define  VGA_COL_RED            0xE0\r\n#define  VGA_COL_WHITE          0xFF\r\n\r\n#define  VGA_COL_CYAN           0x1F\r\n#define  VGA_COL_MAGENTA        0xE3\r\n#define  VGA_COL_YELLOW         0xFC<\/pre>\n<p><strong>Funktionen :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">void UB_VGA_Screen_Init(void);                                 \/\/ init vom VGA-Screen\r\nvoid UB_VGA_FillScreen(uint8_t color);                         \/\/ f\u00fcllt den Screen mit einer Farbe\r\nvoid UB_VGA_SetPixel(uint16_t xp, uint16_t yp, uint8_t color); \/\/ zum setzen eines Pixels<\/pre>\n<p><strong>Beispiel :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">\/\/--------------------------------------------------------------\r\n\/\/ File     : main.c\r\n\/\/ Datum    : 27.04.2013\r\n\/\/ Version  : 1.0\r\n\/\/ Autor    : UB\r\n\/\/ EMail    : mc-4u(@)t-online.de\r\n\/\/ Web      : www.mikrocontroller-4u.de\r\n\/\/ CPU      : STM32F4\r\n\/\/ IDE      : CooCox CoIDE 1.7.0\r\n\/\/ Module   : CMSIS_BOOT, M4_CMSIS_CORE\r\n\/\/ Funktion : Demo der VGA-Library (320x240, 8bit)\r\n\/\/ Hinweis  : Diese zwei Files muessen auf 8MHz stehen\r\n\/\/              \"cmsis_boot\/stm32f4xx.h\"\r\n\/\/              \"cmsis_boot\/system_stm32f4xx.c\"\r\n\/\/--------------------------------------------------------------\r\n\r\n#include \"main.h\"\r\n#include \"stm32_ub_vga_screen.h\"\r\n\r\nint main(void)\r\n{\r\n  uint32_t n;\r\n\r\n  SystemInit(); \/\/ Quarz Einstellungen aktivieren\r\n\r\n  UB_VGA_Screen_Init(); \/\/ Init vom VGA-Screen\r\n\r\n  \/\/ Screen mit einer Farbe loeschen\r\n  UB_VGA_FillScreen(VGA_COL_BLUE);\r\n\r\n  \/\/ einen roten Strich zeichnen\r\n  for(n=0;n&lt;100;n++) {\r\n    UB_VGA_SetPixel(10+n,50,VGA_COL_RED);\r\n  }\r\n\r\n  while(1)\r\n  {\r\n\r\n  }\r\n}\r\n<\/pre>\n<p>Hier die Library zum\u00a0<strong>Download :<\/strong><\/p>\n<p><a href=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2013\/04\/ub_stm32f4_vga_screen_v100.zip\">ub_stm32f4_vga_screen_v100<\/a><\/p>\n<p>Hier der komplette CooCox-Projektordner zum\u00a0<strong>Download :<\/strong><\/p>\n<p><a href=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2013\/04\/Demo_35_VGA1.zip\">Demo_35_VGA1<\/a><\/p>\n<h3 id=\"comments-title\">2 Antworten auf <em>35-VGA_Screen-Library (STM32F4)<\/em><\/h3>\n<ol class=\"commentlist\">\n<li id=\"li-comment-1584\" class=\"comment even thread-even depth-1\">\n<div id=\"comment-1584\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/1.gravatar.com\/avatar\/1ec6b150a2bde9c12b68f13353feb0eb?s=40&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">Gast<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">23. April 2014 um 13:25<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Du hast nicht zuf\u00e4llig auch einen PAL Testbildgenerator in petto?<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/p>\n<ul class=\"children\">\n<li id=\"li-comment-1595\" class=\"comment byuser comment-author-admin_ub bypostauthor odd alt depth-2\">\n<div id=\"comment-1595\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/0.gravatar.com\/avatar\/67426419ead44d5afa132e92685bb460?s=40&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">admin_ub<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">25. April 2014 um 19:36<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>nein, im Moment nicht\u2026kann ja aber noch kommen <img decoding=\"async\" class=\"wp-smiley\" src=\"wp-includes\/images\/smilies\/icon_smile.gif\" alt=\":-)\" \/><\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/li>\n<\/ul>\n<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>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\u00e4chliche Anzeigeaufl\u00f6sung betr\u00e4gt allerdings nur &hellip; <a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/stm32f4\/komplette-library-liste-stm32f4\/35-vga_screen-library-stm32f4\/\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":144,"menu_order":35,"comment_status":"open","ping_status":"closed","template":"","meta":{"footnotes":""},"categories":[128],"tags":[9,7,97],"class_list":["post-389","page","type-page","status-publish","hentry","category-stm32f4","tag-library","tag-stm32f4","tag-vga"],"_links":{"self":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/pages\/389","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/comments?post=389"}],"version-history":[{"count":5,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/pages\/389\/revisions"}],"predecessor-version":[{"id":1754,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/pages\/389\/revisions\/1754"}],"up":[{"embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/pages\/144"}],"wp:attachment":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/media?parent=389"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/categories?post=389"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/tags?post=389"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}