{"id":3286,"date":"2025-03-12T13:08:46","date_gmt":"2025-03-12T13:08:46","guid":{"rendered":"https:\/\/blog.embeddedexpert.io\/?p=3286"},"modified":"2025-03-12T13:09:40","modified_gmt":"2025-03-12T13:09:40","slug":"using-micropython-for-stm32f411-pwm-output","status":"publish","type":"post","link":"https:\/\/blog.embeddedexpert.io\/?p=3286","title":{"rendered":"Using Micropython for STM32F411: PWM Output"},"content":{"rendered":"\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"1024\" src=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/03\/029042c8-52b1-4f7e-900b-4981ea409a10.webp\" alt=\"\" class=\"wp-image-3287\" srcset=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/03\/029042c8-52b1-4f7e-900b-4981ea409a10.webp 1024w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/03\/029042c8-52b1-4f7e-900b-4981ea409a10-300x300.webp 300w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/03\/029042c8-52b1-4f7e-900b-4981ea409a10-150x150.webp 150w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/03\/029042c8-52b1-4f7e-900b-4981ea409a10-768x768.webp 768w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/03\/029042c8-52b1-4f7e-900b-4981ea409a10-750x750.webp 750w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/03\/029042c8-52b1-4f7e-900b-4981ea409a10-400x400.webp 400w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/03\/029042c8-52b1-4f7e-900b-4981ea409a10-250x250.webp 250w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>In this guide on Micropython on STM32F411RE Nucleo-64, we shall see how to develop PWM driver to control various systems like LEDs DC motors etc.<\/p>\n\n\n\n<p>In this guide, we shall cover the following:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>What is PWM.<\/li>\n\n\n\n<li>Micropython Driver.<\/li>\n\n\n\n<li>Hardware connection<\/li>\n\n\n\n<li>Results.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">1. What is PWM:<\/h2>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"295\" src=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/IMG_3029.jpg\" alt=\"\" class=\"wp-image-2384\" srcset=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/IMG_3029.jpg 800w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/IMG_3029-300x111.jpg 300w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/IMG_3029-768x283.jpg 768w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/IMG_3029-750x277.jpg 750w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/IMG_3029-400x148.jpg 400w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/IMG_3029-250x92.jpg 250w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/figure>\n\n\n\n<p><strong>Pulse-width modulation (PWM)<\/strong>, also known as&nbsp;<strong>pulse-duration modulation (PDM)<\/strong>&nbsp;or&nbsp;<strong>pulse-length modulation (PLM)<\/strong>, is a technique used to represent a signal as a rectangular wave with a varying duty cycle (and sometimes a varying period). Let\u2019s break it down:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Duty Cycle<\/strong>: The duty cycle refers to the ratio of the time the signal is \u201con\u201d (high) to the total time of one complete cycle. It is expressed as a percentage. For example, if a signal is on for 60% of the time and off for 40%, the duty cycle is 60%.<\/li>\n\n\n\n<li><strong>Average Power Control<\/strong>: PWM is particularly useful for controlling the average power or amplitude delivered by an electrical signal. By switching the supply between 0% and 100% at a rate faster than the load can respond, we can effectively control the average power delivered to the load.<\/li>\n\n\n\n<li><strong>Applications<\/strong>:\n<ul class=\"wp-block-list\">\n<li><strong>Motor Control<\/strong>: PWM is commonly used to control motors (such as in fans, pumps, and robotics) because motors are not easily affected by discrete switching.<\/li>\n\n\n\n<li><strong>Solar Panels<\/strong>: It\u2019s a key method for controlling the output of solar panels to match battery requirements.<\/li>\n\n\n\n<li><strong>Digital Controls<\/strong>: PWM works well with digital controls, allowing precise duty cycle adjustments.<\/li>\n\n\n\n<li><strong>Communication Systems<\/strong>: In some cases, PWM duty cycles have been used to convey information over communication channels.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Switching Frequency<\/strong>: The switching frequency (how often the signal switches on and off) varies depending on the application. It can range from several times a minute (e.g., electric stoves) to tens or hundreds of kilohertz (e.g., audio amplifiers).<\/li>\n\n\n\n<li><strong>Advantages<\/strong>:\n<ul class=\"wp-block-list\">\n<li>Low power loss in switching devices (almost zero current when off).<\/li>\n\n\n\n<li>Works well with digital control systems.<\/li>\n\n\n\n<li>Used in various applications due to its flexibility.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Disadvantages<\/strong>:\n<ul class=\"wp-block-list\">\n<li>Choosing the right switching frequency is crucial for smooth control.<\/li>\n\n\n\n<li>Too high a frequency can stress mechanical components.<\/li>\n\n\n\n<li>Too low a frequency can cause load oscillations.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<p>In summary, PWM allows precise control of average power delivery by rapidly switching the signal on and off.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2. Micropython Driver:<\/h2>\n\n\n\n<p>First, we need to configure Thonny to work with STM32F411 Nucleo-64. Please refer to <a href=\"https:\/\/blog.embeddedexpert.io\/?p=3237\" data-type=\"link\" data-id=\"https:\/\/blog.embeddedexpert.io\/?p=3237\" target=\"_blank\" rel=\"noreferrer noopener\">this guide<\/a> for how to install and configure Thonny.<\/p>\n\n\n\n<p>First, we need to find which pins are connected to TIM2. From the datasheet of the STM32F411RE, we can find that PA0 to PA3 are connected to TIM2_CH1 to TIM2_CH4 respectively.<\/p>\n\n\n\n<p>However, PA2 and PA4 are used for UART for micropython core. Hence, they can&#8217;t be used in out firmware.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"811\" src=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2021\/08\/Screen-Shot-2021-08-16-at-7.03.00-AM-1024x811.png\" alt=\"\" class=\"wp-image-333\" srcset=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2021\/08\/Screen-Shot-2021-08-16-at-7.03.00-AM-1024x811.png 1024w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2021\/08\/Screen-Shot-2021-08-16-at-7.03.00-AM-300x238.png 300w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2021\/08\/Screen-Shot-2021-08-16-at-7.03.00-AM-768x608.png 768w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2021\/08\/Screen-Shot-2021-08-16-at-7.03.00-AM-1536x1216.png 1536w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2021\/08\/Screen-Shot-2021-08-16-at-7.03.00-AM-2048x1622.png 2048w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2021\/08\/Screen-Shot-2021-08-16-at-7.03.00-AM-1150x911.png 1150w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2021\/08\/Screen-Shot-2021-08-16-at-7.03.00-AM-750x594.png 750w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2021\/08\/Screen-Shot-2021-08-16-at-7.03.00-AM-400x317.png 400w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2021\/08\/Screen-Shot-2021-08-16-at-7.03.00-AM-250x198.png 250w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>After finding which pins are connected to TIM2, we shall use PA0 as our PWM pin.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>We start by importing pyb (pyboard) as following:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;clike&quot;,&quot;mime&quot;:&quot;text\/x-csrc&quot;,&quot;theme&quot;:&quot;dracula&quot;,&quot;lineNumbers&quot;:false,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;C&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;c&quot;}\">import pyb<\/pre><\/div>\n\n\n\n<p>Also, time to handle the delays as following:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;clike&quot;,&quot;mime&quot;:&quot;text\/x-csrc&quot;,&quot;theme&quot;:&quot;dracula&quot;,&quot;lineNumbers&quot;:false,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;C&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;c&quot;}\">import time<\/pre><\/div>\n\n\n\n<p>Next, we shall configure timer2 as following:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;clike&quot;,&quot;mime&quot;:&quot;text\/x-csrc&quot;,&quot;theme&quot;:&quot;dracula&quot;,&quot;lineNumbers&quot;:false,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;C&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;c&quot;}\">timer2 = pyb.Timer(2, freq=1000)  # Set Timer 2 at 1 kHz<\/pre><\/div>\n\n\n\n<p>pyb.Timer shall configure timer2 with frequency of 1KHz. and store the object to configure TIM2 parameters.<\/p>\n\n\n\n<p>Next, we shall configure the pin for PWM which can be achieved as following:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;clike&quot;,&quot;mime&quot;:&quot;text\/x-csrc&quot;,&quot;theme&quot;:&quot;dracula&quot;,&quot;lineNumbers&quot;:false,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;C&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;c&quot;}\">ch1 = timer2.channel(1, pyb.Timer.PWM, pin=pyb.Pin.board.PA0, pulse_width_percent=0)<\/pre><\/div>\n\n\n\n<p>The function shall take the following parameters:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Time channel.<\/li>\n\n\n\n<li>Timer output type which is PWM in this case.<\/li>\n\n\n\n<li>Pin to be used which is PA0.<\/li>\n\n\n\n<li>Duty cycle (pulse width modulation percent), initially, it is zero.<\/li>\n<\/ul>\n\n\n\n<p>Next, in while true loop:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;clike&quot;,&quot;mime&quot;:&quot;text\/x-csrc&quot;,&quot;theme&quot;:&quot;dracula&quot;,&quot;lineNumbers&quot;:false,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;C&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;c&quot;}\">while True:\n  # Fade in\n  for duty in range(0, 101, 2):  # 0% to 100% duty cycle\n    ch1.pulse_width_percent(duty)\n    time.sleep(0.02)  # Small delay for smooth transition\n\n          # Fade out\n  for duty in range(100, -1, -2):  # 100% to 0% duty cycle\n    ch1.pulse_width_percent(duty)\n    time.sleep(0.02)<\/pre><\/div>\n\n\n\n<p>The function:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;clike&quot;,&quot;mime&quot;:&quot;text\/x-csrc&quot;,&quot;theme&quot;:&quot;dracula&quot;,&quot;lineNumbers&quot;:false,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;C&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;c&quot;}\"> ch1.pulse_width_percent(duty)<\/pre><\/div>\n\n\n\n<p>will set the percentage of the duty cycle of the PWM signal.<\/p>\n\n\n\n<p>This will vary the duty cycle according to the for loop.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Thats all for the driver.<\/p>\n\n\n\n<p>Click on run as following:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"706\" src=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/02\/2025-02-15_15-36-02-1024x706.jpg\" alt=\"\" class=\"wp-image-3246\" srcset=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/02\/2025-02-15_15-36-02-1024x706.jpg 1024w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/02\/2025-02-15_15-36-02-300x207.jpg 300w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/02\/2025-02-15_15-36-02-768x530.jpg 768w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/02\/2025-02-15_15-36-02-1536x1059.jpg 1536w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/02\/2025-02-15_15-36-02-2048x1412.jpg 2048w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/02\/2025-02-15_15-36-02-1150x793.jpg 1150w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/02\/2025-02-15_15-36-02-750x517.jpg 750w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/02\/2025-02-15_15-36-02-400x276.jpg 400w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/02\/2025-02-15_15-36-02-250x172.jpg 250w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">3. Hardware Connection:<\/h2>\n\n\n\n<p>The connection as following:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"673\" src=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/03\/Screenshot-2025-03-12-at-3.51.18\u202fPM-1024x673.png\" alt=\"\" class=\"wp-image-3288\" srcset=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/03\/Screenshot-2025-03-12-at-3.51.18\u202fPM-1024x673.png 1024w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/03\/Screenshot-2025-03-12-at-3.51.18\u202fPM-300x197.png 300w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/03\/Screenshot-2025-03-12-at-3.51.18\u202fPM-768x504.png 768w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/03\/Screenshot-2025-03-12-at-3.51.18\u202fPM-1536x1009.png 1536w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/03\/Screenshot-2025-03-12-at-3.51.18\u202fPM-2048x1345.png 2048w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/03\/Screenshot-2025-03-12-at-3.51.18\u202fPM-1150x755.png 1150w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/03\/Screenshot-2025-03-12-at-3.51.18\u202fPM-750x493.png 750w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/03\/Screenshot-2025-03-12-at-3.51.18\u202fPM-400x263.png 400w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/03\/Screenshot-2025-03-12-at-3.51.18\u202fPM-250x164.png 250w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Since PA0 is connected to A0 pin of the arduino pins. Hence, we shall connect our LED to this pin.<\/p>\n\n\n\n<p>Don&#8217;t forger to add 220Ohm to limit the current.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">4. Results:<\/h2>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/youtu.be\/Q_NTHrt7z0M\n<\/div><\/figure>\n\n\n\n<p>Happy coding \ud83d\ude09<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this guide on Micropython on STM32F411RE Nucleo-64, we shall see how to develop PWM driver to control various systems like LEDs DC motors etc. In this guide, we shall cover the following: 1. What is PWM: Pulse-width modulation (PWM), also known as&nbsp;pulse-duration modulation (PDM)&nbsp;or&nbsp;pulse-length modulation (PLM), is a technique used to represent a signal [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2,11,12],"tags":[],"class_list":["post-3286","post","type-post","status-publish","format-standard","hentry","category-embedded-systems","category-peripheral-drivers","category-stm32"],"_links":{"self":[{"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=\/wp\/v2\/posts\/3286"}],"collection":[{"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3286"}],"version-history":[{"count":2,"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=\/wp\/v2\/posts\/3286\/revisions"}],"predecessor-version":[{"id":3290,"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=\/wp\/v2\/posts\/3286\/revisions\/3290"}],"wp:attachment":[{"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3286"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3286"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3286"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}