{"id":327,"date":"2017-11-23T21:07:07","date_gmt":"2017-11-23T20:07:07","guid":{"rendered":"http:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=327"},"modified":"2019-08-19T22:49:03","modified_gmt":"2019-08-19T20:49:03","slug":"22-graphic-dma2d-library-stm32f429","status":"publish","type":"page","link":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/stm32f429\/komplette-library-liste-stm32f429\/22-graphic-dma2d-library-stm32f429\/","title":{"rendered":"22-Graphic-DMA2D-Library (STM32F429)"},"content":{"rendered":"<p><div id=\"nav-below\" class=\"navigation\"><div class=\"nav-previous\"><a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/stm32f429\/komplette-library-liste-stm32f429\/21-usb_msc_host-library-stm32f429\/\" title=\"21-USB_MSC_HOST-Library (STM32F429)\"><span class=\"meta-nav\">\u2190<\/span> 21-USB_MSC_HOST-Library (STM32F429)<\/a><\/div><\/div><!-- #nav-below --><div id=\"nav-below\" class=\"navigation\"><div class=\"nav-next\"><a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/stm32f429\/komplette-library-liste-stm32f429\/23-ubs-hid_host-library-stm32f429\/\" title=\"23-USB-HID_Host-Library (STM32F429)\">23-USB-HID_Host-Library (STM32F429) <span class=\"meta-nav\">&rarr;<\/span><\/a><\/div><\/div><!-- #nav-below --><\/p>\n<p>Diese Library benutzt den internen DMA2D vom STM32F429 f\u00fcr das zeichnen von Linien Rechtecken, Kreisen und Bildern aus dem Flash.<\/p>\n<p>Der DMA2D ist um ein vielfaches schneller wie die gleiche Funktion per \u201cCPU\u201d<\/p>\n<p>z.B. dauert das l\u00f6schen vom kompletten Screen ohne DMA2D ca. 11ms und mit DMA2D sind es nur noch 1ms<\/p>\n<p>Im Beispiel werden 10.000 Kreise und 10.000 Rechtecke gezeichnet und danach kommt ein Beispiel wie man bewegte Objekte darstellen kann.<\/p>\n<p><em>Hinweis : die <a href=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=295\">LCD_ILI9341-Lib<\/a> muss mindestens Version 1.2 sein<\/em><\/p>\n<p>Hinweis zur Funktion \u201cUB_Graphic2D_CopyImgDMA\u201d<br \/>\nDer Funktion muss der Bildname und eine Struktur mit den Koordinaten \u00fcbergeben werden. Mit den Koordinaten wird festgelegt welcher Teilabschnitt vom Bild (sx,sy,w,h) an welcher Position vom Display (dx,dy) angezeigt werden soll.<\/p>\n<p><strong>DMA2D (Memory to Memory) :<\/strong><\/p>\n<div id=\"attachment_3113\" class=\"wp-caption alignnone\" style=\"width: 310px;\">\n<p><a href=\"wp-content\/uploads\/2013\/11\/dma2d_m2m.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-3113 \" style=\"border: 1px solid black;\" src=\"wp-content\/uploads\/2013\/11\/dma2d_m2m-300x210.jpg\" alt=\"DMA2D_M2M\" width=\"300\" height=\"210\" \/><\/a><\/p>\n<p class=\"wp-caption-text\">DMA2D_M2M<\/p>\n<\/div>\n<p><strong>Beispielbild :<\/strong><\/p>\n<p><a href=\"wp-content\/uploads\/2013\/11\/dma2d.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-2980\" src=\"wp-content\/uploads\/2013\/11\/dma2d-179x300.jpg\" alt=\"dma2d\" width=\"179\" height=\"300\" \/><\/a><\/p>\n<p><strong>Funktionen :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">void UB_Graphic2D_ClearSreenDMA(uint16_t c);                                                          \/\/ l\u00f6scht kompletten Screen\r\nvoid UB_Graphic2D_DrawPixelNormal(uint16_t xp, uint16_t yp, uint16_t c);                              \/\/ zeichnet ein Pixel\r\nvoid UB_Graphic2D_DrawLineNormal(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color); \/\/ zeichnet schr\u00e4ge Linie\r\nvoid UB_Graphic2D_DrawStraightDMA(uint16_t xp, uint16_t yp, uint16_t l, LCD_DIR_t d, uint16_t c);     \/\/ zeichnet Gerade Linie\r\nvoid UB_Graphic2D_DrawRectDMA(uint16_t xp, uint16_t yp, uint16_t w, uint16_t h, uint16_t c);          \/\/ zeichnet Rechteck\r\nvoid UB_Graphic2D_DrawFullRectDMA(uint16_t xp, uint16_t yp, uint16_t w, uint16_t h, uint16_t c);      \/\/ zeichnet gef\u00fclltes Rechteck\r\nvoid UB_Graphic2D_DrawCircleNormal(uint16_t xp, uint16_t yp, uint16_t r, uint16_t c);                 \/\/ zeichnet Kreis\r\nvoid UB_Graphic2D_DrawFullCircleDMA(uint16_t xp, uint16_t yp, uint16_t r, uint16_t c);                \/\/ zeichnet gef\u00fcllten Kreis\r\nvoid UB_Graphic2D_CopyImgDMA(UB_Image *img, DMA2D_Koord koord);                                       \/\/ zeichnet Teilimage aus dem Flash<\/pre>\n<p><strong>Beispiel :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">\/\/--------------------------------------------------------------\r\n\/\/ File     : main.c\r\n\/\/ Datum    : 26.11.2013\r\n\/\/ Version  : 1.1\r\n\/\/ Autor    : UB\r\n\/\/ EMail    : mc-4u(@)t-online.de\r\n\/\/ Web      : www.mikrocontroller-4u.de\r\n\/\/ CPU      : STM32F429\r\n\/\/ IDE      : CooCox CoIDE 1.7.4\r\n\/\/ GCC      : 4.7 2012q4\r\n\/\/ Module   : CMSIS_BOOT, M4_CMSIS_CORE\r\n\/\/ Funktion : Demo der DMA2D-Graphic-Lib\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\/\/ In Configuration diese Define hinzuf\u00fcgen :\r\n\/\/ \"STM32F429_439xx\" , \"__ASSEMBLY__\" , \"USE_STDPERIPH_DRIVER\"\r\n\/\/--------------------------------------------------------------\r\n\r\n#include \"main.h\"\r\n#include \"stm32_ub_lcd_ili9341.h\"\r\n#include \"stm32_ub_graphic2d.h\"\r\n#include &lt;stdlib.h&gt;\r\n\r\nint main(void)\r\n{\r\n  uint16_t x1,y1,x2,y2,r1,r2,c;\r\n  uint32_t n,m;\r\n  DMA2D_Koord koord;\r\n\r\n  SystemInit(); \/\/ Quarz Einstellungen aktivieren\r\n\r\n  UB_LCD_Init();\r\n  UB_LCD_LayerInit_Fullscreen();\r\n\r\n  \/\/ auf Vordergrund schalten\r\n  UB_LCD_SetLayer_2();\r\n\r\n  while(1)\r\n  {\r\n    \/\/-------------------------------\r\n    \/\/ 1.) 10.000 Kreise zeichnen\r\n    \/\/-------------------------------\r\n    for(n=0;n&lt;10000;n++) {\r\n      x1=rand() % (LCD_MAXX);\r\n      y1=rand() % (LCD_MAXY);\r\n      r1=rand() % (30);\r\n      c=rand() % (65535);\r\n      UB_Graphic2D_DrawFullCircleDMA(x1,y1,r1,c);\r\n    }\r\n    \/\/ kleine Pause\r\n    for(n=0;n&lt;30000000;n++);\r\n    \/\/-------------------------------\r\n    \/\/ 2.) 10.000 Rechtecke zeichnen\r\n    \/\/-------------------------------\r\n    for(n=0;n&lt;10000;n++) {\r\n      x1=rand() % (LCD_MAXX);\r\n      y1=rand() % (LCD_MAXY);\r\n      x2=rand() % (LCD_MAXX);\r\n      y2=rand() % (LCD_MAXY);\r\n      c=rand() % (65535);\r\n      UB_Graphic2D_DrawFullRectDMA(x1,y1,x2,y2,c);\r\n    }\r\n    \/\/ kleine Pause\r\n    for(n=0;n&lt;30000000;n++);\r\n    \/\/-------------------------------\r\n    \/\/ 3.) bewegter Kreis\r\n    \/\/-------------------------------\r\n    r1=0;r2=0;\r\n    x1=111;y1=111;\r\n    for(n=0;n&lt;5000;n++) {\r\n      UB_Graphic2D_ClearSreenDMA(RGB_COL_GREEN);\r\n      UB_Graphic2D_DrawFullCircleDMA(x1,y1,60,RGB_COL_RED);\r\n      UB_LCD_Refresh();\r\n      if(r1==0) {\r\n        x1++;\r\n        if(x1&gt;240-60) r1=1-r1;\r\n      }\r\n      else {\r\n        x1--;\r\n        if(x1&lt;60) r1=1-r1;\r\n      }\r\n      if(r2==0) {\r\n        y1++;\r\n        if(y1&gt;320-60) r2=1-r2;\r\n      }\r\n      else {\r\n        y1--;\r\n        if(y1&lt;60) r2=1-r2;\r\n      }\r\n    }\r\n    \/\/ kleine Pause\r\n    for(n=0;n&lt;30000000;n++);\r\n    \/\/-------------------------------\r\n    \/\/ 4.) bewegtes Teil Bild aus einem Image\r\n    \/\/-------------------------------\r\n    r1=0;r2=0;\r\n    x1=111;y1=111;\r\n    \/\/ Koordinaten (nur ein Teilbild von 100x80 Pixel)\r\n    koord.source_xp=20;\r\n    koord.source_yp=20;\r\n    koord.source_w=100;\r\n    koord.source_h=80;\r\n    koord.dest_xp=x1;\r\n    koord.dest_yp=y1;\r\n    for(n=0;n&lt;5000;n++) {\r\n      UB_Graphic2D_ClearSreenDMA(RGB_COL_GREEN);\r\n      UB_Graphic2D_CopyImgDMA(&amp;Emo2_Image,koord);\r\n      for(m=0;m&lt;500;m++); \/\/ pause (sonst flicker)\r\n      UB_LCD_Refresh();\r\n      for(m=0;m&lt;100000;m++); \/\/ pause (sonst zu schnell)\r\n      if(r1==0) {\r\n        x1++;\r\n        if(x1&gt;240-101) r1=1-r1;\r\n      }\r\n      else {\r\n        x1--;\r\n        if(x1&lt;2) r1=1-r1;\r\n      }\r\n      if(r2==0) {\r\n        y1++;\r\n        if(y1&gt;320-81) r2=1-r2;\r\n      }\r\n      else {\r\n        y1--;\r\n        if(y1&lt;2) r2=1-r2;\r\n      }\r\n      koord.dest_xp=x1;\r\n      koord.dest_yp=y1;\r\n    }\r\n    \/\/-------------------------------\r\n    \/\/ 5.) Ende\r\n    \/\/-------------------------------\r\n    \/\/ kleine Pause\r\n    for(n=0;n&lt;30000000;n++);\r\n    \/\/ wieder auf Vordergrund schalten\r\n    UB_LCD_SetLayer_2();\r\n    UB_LCD_SetTransparency(255);\r\n   }\r\n}\r\n<\/pre>\n<p>Hier die Library zum\u00a0<strong>Download :<\/strong><\/p>\n<p><a href=\"wp-content\/uploads\/2013\/11\/graphic_dma2d_f429_v101.zip\">graphic_dma2d_f429_v101<\/a><\/p>\n<p>Hier der komplette CooCox-Projektordner zum\u00a0<strong>Download :<\/strong><\/p>\n<p><a href=\"wp-content\/uploads\/2013\/11\/Demo_F429_22.zip\">Demo_F429_22<\/a><\/p>\n<hr \/>\n<h3 id=\"comments-title\">8 Antworten auf <em>22-Graphic-DMA2D-Library (STM32F429)<\/em><\/h3>\n<ol class=\"commentlist\">\n<li id=\"li-comment-1013\" class=\"comment even thread-even depth-1\">\n<div id=\"comment-1013\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/0.gravatar.com\/avatar\/a9f07a307dc42e8002cabf978c13d46e?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\">Manuel<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">10. November 2013 um 19:16<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Die Kugel k\u00f6nnte man in Verbindung mit dem Sensor auf der R\u00fcckseite kombinieren <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<li id=\"li-comment-1087\" class=\"comment odd alt thread-odd thread-alt depth-1\">\n<div id=\"comment-1087\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/1.gravatar.com\/avatar\/9fd3d5bde6304cf9f30120d717721ef9?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\">Fabrice<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">27. November 2013 um 22:51<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Super Beispiel f\u00fcr DMA2D Speicher zu Speicher kopieren <img decoding=\"async\" class=\"wp-smiley\" src=\"wp-includes\/images\/smilies\/icon_smile.gif\" alt=\":)\" \/><br \/>\nJetzt sind paar Sache ein bissen mehr klar <img decoding=\"async\" class=\"wp-smiley\" src=\"wp-includes\/images\/smilies\/icon_wink.gif\" alt=\";)\" \/><\/p>\n<p>Gru\u00df.<\/p>\n<p>Fabrice.<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/li>\n<li id=\"li-comment-1401\" class=\"comment even thread-even depth-1\">\n<div id=\"comment-1401\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/1.gravatar.com\/avatar\/d128ec672d82ee8353f699fee89743f3?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\">dhampir<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">17. Februar 2014 um 18:21<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Moin moin! Zuersteinmal ein gro\u00dfes Lob f\u00fcr die wirklich n\u00fctzlichen Libs.<\/p>\n<p>Ich bin gerade dabei ein 24 Bit Display anzusteuern und stelle daher gerade auf ARGB8888 um ( die 16 Bit Variante lief korrekt ), allerdings will mir das noch nicht so ganz gelingen.<\/p>\n<p>Bisher habe ich<br \/>\nLCD_FRAME_OFFSET verdoppelt,<br \/>\nLTDC_Pixelformat_ARGB8888 in UB_LCD_LayerInit_Fullscreen und UB_Graphic2D_ClearScreenDMA gesetzt (hier auch den Farbparameter auf 32 bit ge\u00e4ndert und zerlegt in die entsprechenden Felder des InitStructs gelegt),<br \/>\nUB_LCD_SetCursor2Draw von Byte-Faktor 2 auf 4 gestellt.<\/p>\n<p>Einige Sachen scheine ich aber zu \u00fcbersehen, da die Ausgabe statt eines Rechtecks einen recht motiviert rennenenden Pixelbrei ergibt.<\/p>\n<p>F\u00fcr einen Hinweis in welchen Ecken ich noch \u00c4nderuzngen durchf\u00fchren muss w\u00e4re ich sehr dankbar!<\/p>\n<p>Achja und bei dieser Lib hat sich ein kleiner Tippfehler eingeschlichen, bei UB_Graphic2D_ClearSreenDMA fehlt ein c <img decoding=\"async\" class=\"wp-smiley\" src=\"wp-includes\/images\/smilies\/icon_smile.gif\" alt=\":)\" \/><\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/p>\n<ul class=\"children\">\n<li id=\"li-comment-1405\" class=\"comment byuser comment-author-admin_ub bypostauthor odd alt depth-2\">\n<div id=\"comment-1405\">\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\">18. Februar 2014 um 19:46<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>sorry, da kenn ich mich nicht aus<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/li>\n<\/ul>\n<\/li>\n<li id=\"li-comment-1503\" class=\"comment even thread-odd thread-alt depth-1\">\n<div id=\"comment-1503\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/1.gravatar.com\/avatar\/fe4b0511a47c9944febd4221049ad403?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\">Milas<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">28. M\u00e4rz 2014 um 09:00<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Hallo zusammen,<\/p>\n<p>gute Arbeit!!!<\/p>\n<p>Dank der libs konnte ich mich in Rekordtempo mit dem STM32 einarbeiten.<\/p>\n<p>Ich habe nach den ersten Gehversuchen die einzelnen Hardwarekomponenten ans laufen bekommen inklusive COOS mit Powersave (Sleep und Stop).<br \/>\nDie Pinbelegung ist am STM32F429Disco mal nicht gerade berauschend (LCD und RAM belegen fast alle AF-Funktionen).<br \/>\nDaher habe ich statt HW-PWM eine SW-PWM implementiert =&gt; ein wenig l\u00f6ten am Board und schon ist die Hintergrundbeleuchtung am Display einstellbar.<\/p>\n<p>Nun habe ich die LCD_ILI9341-Lib, Graphic2D-Lib und Font-Lib per define auf RGB565, RGB888 und ARGB8888 erweitert. Das Blending f\u00fcr Bachground, Layer1 und Layer2 erm\u00f6glicht so im ARGB8888 Mode einfache GUI Programmierung. In RGB565 und RGB888 geht da durch Colorkeying (Transparente Farbe) auch eine ganze Menge.<\/p>\n<p>Hard-FPU aktiviert, und color konverter geschrieben (HSB to RGB, RGB to HSB, color to RGB, RGB to color, Color Fader)<\/p>\n<p>Farbkreisdarstellung + Cursor =&gt; Fertig ist ein Farbw\u00e4hler f\u00fcr RGB Lichtquellen.<\/p>\n<p>+ RTC + Teiltransparente Zeiger =&gt; coole analog Uhr gleich mit integriert<\/p>\n<p>+ COOS = Speicherverwaltung, Taskmanagement<br \/>\n+ Sleep\/Stop\/Standby =&gt; niedriger Stromverbrauch f\u00fcr Akkubetrieb<\/p>\n<p>ToDo:<br \/>\nNRF24 Modul implementierung und fertig ist eine RGB Fernbedienung.<br \/>\nNRF24 Modul + STM Nucleo Board + FET-Treiber =&gt; RGB-Treiber mit niedrigem Standby Stromverbrauch.<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/p>\n<ul class=\"children\">\n<li id=\"li-comment-1504\" class=\"comment odd alt depth-2\">\n<div id=\"comment-1504\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/0.gravatar.com\/avatar\/af5be9fa3f95b3ec9c424ed130b7f2d3?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\">Cortex-Einsteiger<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">28. M\u00e4rz 2014 um 12:26<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>das klingt beeindruckend,<br \/>\nhast du vor deine Ergebnisse online zu stellen? w\u00fcrde da gerne etwas dran rumprobieren<\/p>\n<p>mit dem NRF-Modul habe ich schon am STM32 gearbeitet, da gibts fertige Libs im Netz, aber auch so ist die Doku gut und die Module sehr umkompliziert, eine gute Wahl!<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/li>\n<\/ul>\n<\/li>\n<li id=\"li-comment-2001\" class=\"comment even thread-even depth-1\">\n<div id=\"comment-2001\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/0.gravatar.com\/avatar\/203dbbb5f23d951ee160a5d907803e0d?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\">Alexis<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">3. August 2014 um 05:26<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Wie kann ich ein anderes Bild reprroducir Beispiel? Ich habe versucht, die reemplazaer. C, die im Ordner bilder ist, aber es gibt mir Fehler. Danke!<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/p>\n<ul class=\"children\">\n<li id=\"li-comment-2037\" class=\"comment byuser comment-author-admin_ub bypostauthor odd alt depth-2\">\n<div id=\"comment-2037\">\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\">17. August 2014 um 11:08<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>zum erzeugen von Image-Files (*.c) kann mein <a href=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=140#P02\">ImageGenerator<\/a> Programm benutzt werden.<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/li>\n<\/ul>\n<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Diese Library benutzt den internen DMA2D vom STM32F429 f\u00fcr das zeichnen von Linien Rechtecken, Kreisen und Bildern aus dem Flash. Der DMA2D ist um ein vielfaches schneller wie die gleiche Funktion per \u201cCPU\u201d z.B. dauert das l\u00f6schen vom kompletten Screen &hellip; <a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/stm32f429\/komplette-library-liste-stm32f429\/22-graphic-dma2d-library-stm32f429\/\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":3,"featured_media":0,"parent":160,"menu_order":22,"comment_status":"open","ping_status":"closed","template":"","meta":{"footnotes":""},"categories":[129],"tags":[257,169,141,9,102],"class_list":["post-327","page","type-page","status-publish","hentry","category-stm32f429","tag-dma2d","tag-grafik","tag-graphic","tag-library","tag-stm32f429"],"_links":{"self":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/pages\/327","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\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/comments?post=327"}],"version-history":[{"count":5,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/pages\/327\/revisions"}],"predecessor-version":[{"id":2641,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/pages\/327\/revisions\/2641"}],"up":[{"embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/pages\/160"}],"wp:attachment":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/media?parent=327"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/categories?post=327"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/tags?post=327"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}