{"id":395,"date":"2017-11-24T22:00:47","date_gmt":"2017-11-24T21:00:47","guid":{"rendered":"http:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=395"},"modified":"2017-12-30T19:34:56","modified_gmt":"2017-12-30T18:34:56","slug":"38-pwm_dma-library-stm32f4","status":"publish","type":"page","link":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=395","title":{"rendered":"38-PWM_DMA-Library (STM32F4)"},"content":{"rendered":"<p><div id=\"nav-below\" class=\"navigation\"><div class=\"nav-previous\"><a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=393\" title=\"37-VGA_Font-Library (STM32F4)\"><span class=\"meta-nav\">\u2190<\/span> 37-VGA_Font-Library (STM32F4)<\/a><\/div><\/div><!-- #nav-below --><div id=\"nav-below\" class=\"navigation\"><div class=\"nav-next\"><a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=397\" title=\"39-IRMP-Library (STM32F4)\">39-IRMP-Library (STM32F4) <span class=\"meta-nav\">&rarr;<\/span><\/a><\/div><\/div><!-- #nav-below --><\/p>\n<p>Mit dieser Library k\u00f6nnen 8 oder 16 GPIOs von einem Port zur PWM-Ausgabe benutzt werden.<\/p>\n<p>Es wird ein Timer, ein DMA und ein GPIO-Port daf\u00fcr ben\u00f6tigt. Ich habe im Beispiel Timer1 Port-E und DMA2 (Channel=6, Stream=5) benutzt. Es geht aber auch jede andere Kombination.<\/p>\n<p>Vorsicht : Die DMA Ausgabe schreibt 8 bzw. 16 Bit an den Port\u2026diese Pins d\u00fcrfen nicht von was anderem belegt sein !<\/p>\n<p>Im H-File kann eingestellt werden ob 8 Kan\u00e4le oder 16 benutzt werden sollen. Und wenn 8 Kan\u00e4le dann ob auf den Bits 0 bis 7 oder auf den Bits 8 bis 15.<br \/>\n(Ich habe 8Bit am Port-E Bit8 bis 15 benutzt weil die am Discovery-Board frei sind)<\/p>\n<p>Im H-File muss (bzw. kann) auch die Aufl\u00f6sung vom PWM und die Clock-Frq vom Timer eingestellt werden. Daraus ergibt sich dann die PWM-Frequenz.<\/p>\n<p><strong>Beispielbild :<\/strong><\/p>\n<p><a href=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2013\/03\/pwm.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-1082\" src=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2013\/03\/pwm-300x179.jpg\" alt=\"pwm\" width=\"300\" height=\"179\" \/><\/a><\/p>\n<p><strong>Voraussetzungen :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">Benutzte Module der CooCox-IDE : GPIO, TIM, DMA\r\nBenutzte Librarys : keine<\/pre>\n<p><strong>Funktionen :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">void UB_PWM_DMA_Init(void);                           \/\/ um den PWM per DMA zu initialisieren\r\nvoid UB_PWM_DMA_SetPWM(uint8_t kanal, uint16_t wert); \/\/ zum einstellen eines PWM wertes<\/pre>\n<p><strong>Beispiel :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">\/\/--------------------------------------------------------------\r\n\/\/ File     : main.c\r\n\/\/ Datum    : 04.05.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 PWM-DMA Library\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_pwm_dma.h\"\r\n\r\nint main(void)\r\n{\r\n  SystemInit(); \/\/ Quarz Einstellungen aktivieren\r\n\r\n  \/\/ init vom PWM per DMA\r\n  UB_PWM_DMA_Init();\r\n\r\n  \/\/ 8 PWM Werte einstellen\r\n  UB_PWM_DMA_SetPWM(0,10); \/\/ Kanal0 auf 10%\r\n  UB_PWM_DMA_SetPWM(1,25); \/\/ Kanal1 auf 25%\r\n  UB_PWM_DMA_SetPWM(2,30); \/\/ Kanal2 auf 30%\r\n  UB_PWM_DMA_SetPWM(3,40); \/\/ Kanal3 auf 40%\r\n  UB_PWM_DMA_SetPWM(4,50); \/\/ Kanal4 auf 50%\r\n  UB_PWM_DMA_SetPWM(5,60); \/\/ Kanal5 auf 60%\r\n  UB_PWM_DMA_SetPWM(6,75); \/\/ Kanal6 auf 75%\r\n  UB_PWM_DMA_SetPWM(7,90); \/\/ Kanal7 auf 90%\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\/05\/ub_stm32f4_pwm_dma_v100.zip\">ub_stm32f4_pwm_dma_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\/05\/Demo_38_PWM_DMA.zip\">Demo_38_PWM_DMA<\/a><\/p>\n<h3 id=\"comments-title\">8 Antworten auf <em>38-PWM_DMA-Library (STM32F4)<\/em><\/h3>\n<ol class=\"commentlist\">\n<li id=\"li-comment-811\" class=\"comment even thread-even depth-1\">\n<div id=\"comment-811\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/0.gravatar.com\/avatar\/2769861d5a3a1b7b78c07818b583ca25?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\">tueddel<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">18. September 2013 um 20:24<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Hallo,<\/p>\n<p>ist es m\u00f6glich per DMA den Inhalt eines Arrays Bitweise auf einen GPIO-Pin zu legen? Oder geht das wirklich nur Byteweise, auf quasi 8 IOs?<\/p>\n<p>Ich m\u00f6chte gerne den Inhalt vom Array<br \/>\nuint32_t data[10];<br \/>\nBitweise shiften und jeweils das unterste Bit (High\/Low) auf den GPIO geben. Der Takt zur Ausgabe soll von einem Timer kommen. Aktuell hab ich das per Overflow Interrupt mit dem Timer gel\u00f6st. Aber das ist ganz sch\u00f6n Zeit aufw\u00e4ndig und bei meiner Anwendung kommts aufs Timing an\u2026 Oder aber ich muss die Taktrate deutlich reduzieren, damit mich Verz\u00f6gerungen durch andere Interrupts nicht mehr st\u00f6ren. Daher meine \u00dcberlegung das komplett an den DMA abzuschieben, sofern das m\u00f6glich ist.<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/p>\n<ul class=\"children\">\n<li id=\"li-comment-815\" class=\"comment byuser comment-author-admin_ub bypostauthor odd alt depth-2\">\n<div id=\"comment-815\">\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\">19. September 2013 um 20:37<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>bei den DMA Einstellungen gehen nur 8bit, 16bit, 32bit. Event. wenn man nur ein GPIO-Pin als Ausgang deklariert\u2026w\u00e4re aber \u201cmurks\u201d. Wie schnell muss das ganze den sein und k\u00f6nnte man vor dem \u201csenden\u201d das ganze Array umkopieren so das es schon im richtigen Format vorliegt. Also eine Funktion die aus uint32_t data[10] ein bool bit_signal[320] macht ? damit w\u00e4re in der ISR nur drei Zeilen notwendig :<br \/>\n<code><br \/>\nGPIO = bit_signal[akt_pos];<br \/>\nakt_pos++;<br \/>\nif(akt_pos&gt;=320) {<br \/>\n\/\/ ende erreicht<br \/>\n}<br \/>\n<\/code><\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/li>\n<\/ul>\n<\/li>\n<li id=\"li-comment-1258\" class=\"comment even thread-odd thread-alt depth-1\">\n<div id=\"comment-1258\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/1.gravatar.com\/avatar\/1c4bd0ec32b4a11632ed5870bc1c6f67?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\">Felix<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">10. Januar 2014 um 19:08<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Hallo,<\/p>\n<p>erstmal ein gro\u00dfes Lob f\u00fcr die ganze M\u00fche. Die libs sind super!<\/p>\n<p>Ich benutze den PWM DMA Modus mit 1 kHz an PE0-PE7. Das ganze funktioniert auch wunderbar. Nun habe ich die GPIOs dieser Pins auf Open Drain ohne PullUp\/PullDown gestellt, da ich externe PullUps an 5V habe:<\/p>\n<p>GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;<br \/>\nGPIO_InitStructure.GPIO_OType = GPIO_OType_OD;<br \/>\nGPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;<br \/>\nGPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;<\/p>\n<p>Das Ergebnis ist spannend:<br \/>\nDie Frequenz sinkt auf 500 Hz. PWM funktionert weiterhin.<br \/>\nDer High-Pegel betr\u00e4gt jedoch nur 3.6V.<\/p>\n<p>Ohne externe PullUps liegt kein Signal am Ausgang.<br \/>\nOpen Drain scheint also aktiviert zu sein.<\/p>\n<p>Muss der GPIO auf \u201cAlternate Function\u201d gestellt werden?<\/p>\n<p>Gru\u00df<\/p>\n<p>Felix<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/p>\n<ul class=\"children\">\n<li id=\"li-comment-1261\" class=\"comment byuser comment-author-admin_ub bypostauthor odd alt depth-2\">\n<div id=\"comment-1261\">\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\">11. Januar 2014 um 12:38<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>nein \u201cOUT\u201d ist schon richtig. Welchen Widerstandswert hat dein PullUp und was hast du als \u201cLast\u201d an den Pin angeschlossen ? Sind deine \u201c5V\u201d auch gemessene 5V zu jedem Zeitpunkt ?<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/li>\n<\/ul>\n<\/li>\n<li id=\"li-comment-1262\" class=\"comment even thread-even depth-1\">\n<div id=\"comment-1262\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/1.gravatar.com\/avatar\/1c4bd0ec32b4a11632ed5870bc1c6f67?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\">Felix<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">11. Januar 2014 um 12:50<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Die 5V sind wirklich konstant 5V <img decoding=\"async\" class=\"wp-smiley\" src=\"wp-includes\/images\/smilies\/icon_wink.gif\" alt=\";-)\" \/><br \/>\nPullUp 4,7k<br \/>\nKeine Last (au\u00dfer Oszi)<br \/>\nKlappt an den normalen GPIOs auch wunderbar.<\/p>\n<p>Den geringeren High-Pegel k\u00f6nnte ich mir ja noch erkl\u00e4ren (z. B. interner PullUp noch aktiv).<br \/>\nAber warum sinkt die Frequenz der PWM auf 500 Hz?<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/li>\n<li id=\"li-comment-1534\" class=\"comment odd alt thread-odd thread-alt depth-1\">\n<div id=\"comment-1534\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/1.gravatar.com\/avatar\/d34d524bd3523575bdec4b3b69ebe5f1?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\">Ncysys<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">7. April 2014 um 20:06<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Hi Great Lib\u2019s and sample code. They really help when learning a new micro.<\/p>\n<p>I found a small problem with the PWM_DMA running on the STMF4 discovery board. The discovery board only has PE7 to PE15 to output the PWM signals. So if you select #define PWM_DMA_USE_BIT8TO15 2 \/\/ 8 Kan\u00e4le (an Port Bit8 bis Bit15) and change the main code to UB_PWM_DMA_SetPWM(8,10) \u2026 UB_PWM_DMA_SetPWM(15,90), the discovery board does not output any signals. The code in stm32_ub_pwm_dma.c \u2014void UB_PWM_DMA_SetPWM(uint8_t kanal, uint16_t wert) \u2014 #else will only support channels 0 to 7 and never 8 to 15.<\/p>\n<p>The solution for anyone wanting to get this example running quickly is to change the define in stm32_ub_pwm_dma.h to \u2014 #define PWM_DMA_USE_BIT0TO15 3 \/\/ 16 Kan\u00e4le (an Port Bit0 bis Bit15). or modify the code in stm32_ub_pwm_dma.c to support channels 0 to 7 or channels 8 to 15.<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/p>\n<ul class=\"children\">\n<li id=\"li-comment-1536\" class=\"comment byuser comment-author-admin_ub bypostauthor even depth-2\">\n<div id=\"comment-1536\">\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\">8. April 2014 um 09:13<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>thats not a bug\u2026its a feature <img decoding=\"async\" class=\"wp-smiley\" src=\"wp-includes\/images\/smilies\/icon_smile.gif\" alt=\":-)\" \/><br \/>\nthe parameter number for the function \u201cUB_PWM_DMA_SetPWM\u201d<br \/>\nis in 8bit Mode always 0\u20267. So if you use 8bit from Bit8 to Bit15 the first Channel (Bit8) is called by \u201cUB_PWM_DMA_SetPWM(0,value);\u201d<br \/>\nSounds crazy but this was the easiest way.<br \/>\nIn 16bit-Mode the nummers are from 0\u202615 to reach all 16 Channels.<br \/>\ne.g. the sample code is running directly on a STM32F4-Discovery<br \/>\nwith output on PE8 to PE15 \u2026CH0 = PE8\u2026CH7 = PE15.<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/li>\n<\/ul>\n<\/li>\n<li id=\"li-comment-4166\" class=\"comment odd alt thread-even depth-1\">\n<div id=\"comment-4166\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/0.gravatar.com\/avatar\/6f0447dd9c6777bceb9a4d32fe19c6c7?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\">Axel Opitz<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">21. September 2015 um 17:17<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Hallo,<br \/>\nes gelingt mir leider nur deine Routine mit Timer 1 oder Timer 8 zu realisieren.<br \/>\nMit Timer 4,(DMA1 Channel2 Stream6) oder Timer 2(DMA1, Channel3 Stream1) gelingt mir dies leider nicht. W\u00fcrde mich freuen, wenn Du mir helfen k\u00f6nntest.<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Mit dieser Library k\u00f6nnen 8 oder 16 GPIOs von einem Port zur PWM-Ausgabe benutzt werden. Es wird ein Timer, ein DMA und ein GPIO-Port daf\u00fcr ben\u00f6tigt. Ich habe im Beispiel Timer1 Port-E und DMA2 (Channel=6, Stream=5) benutzt. Es geht aber &hellip; <a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=395\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":144,"menu_order":38,"comment_status":"open","ping_status":"closed","template":"","meta":{"footnotes":""},"categories":[128],"tags":[149,9,57,7],"class_list":["post-395","page","type-page","status-publish","hentry","category-stm32f4","tag-dma","tag-library","tag-pwm","tag-stm32f4"],"_links":{"self":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=\/wp\/v2\/pages\/395","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=395"}],"version-history":[{"count":3,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=\/wp\/v2\/pages\/395\/revisions"}],"predecessor-version":[{"id":1577,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=\/wp\/v2\/pages\/395\/revisions\/1577"}],"up":[{"embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=\/wp\/v2\/pages\/144"}],"wp:attachment":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=395"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=395"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=395"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}