{"id":3335,"date":"2025-03-27T11:10:22","date_gmt":"2025-03-27T11:10:22","guid":{"rendered":"https:\/\/blog.embeddedexpert.io\/?p=3335"},"modified":"2025-03-27T11:11:25","modified_gmt":"2025-03-27T11:11:25","slug":"using-micropython-for-stm32f411-timer-in-output-compare-mode","status":"publish","type":"post","link":"https:\/\/blog.embeddedexpert.io\/?p=3335","title":{"rendered":"Using Micropython for STM32F411: Timer in Output Compare Mode"},"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\/DALL\u00b7E-2025-02-13-09.56.17-A-detailed-high-quality-digital-illustration-depicting-the-process-of-compiling-and-flashing-MicroPython-onto-an-STM32F411-Nucleo-board.-The-image-sh.webp\" alt=\"\" class=\"wp-image-3336\" srcset=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/03\/DALL\u00b7E-2025-02-13-09.56.17-A-detailed-high-quality-digital-illustration-depicting-the-process-of-compiling-and-flashing-MicroPython-onto-an-STM32F411-Nucleo-board.-The-image-sh.webp 1024w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/03\/DALL\u00b7E-2025-02-13-09.56.17-A-detailed-high-quality-digital-illustration-depicting-the-process-of-compiling-and-flashing-MicroPython-onto-an-STM32F411-Nucleo-board.-The-image-sh-300x300.webp 300w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/03\/DALL\u00b7E-2025-02-13-09.56.17-A-detailed-high-quality-digital-illustration-depicting-the-process-of-compiling-and-flashing-MicroPython-onto-an-STM32F411-Nucleo-board.-The-image-sh-150x150.webp 150w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/03\/DALL\u00b7E-2025-02-13-09.56.17-A-detailed-high-quality-digital-illustration-depicting-the-process-of-compiling-and-flashing-MicroPython-onto-an-STM32F411-Nucleo-board.-The-image-sh-768x768.webp 768w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/03\/DALL\u00b7E-2025-02-13-09.56.17-A-detailed-high-quality-digital-illustration-depicting-the-process-of-compiling-and-flashing-MicroPython-onto-an-STM32F411-Nucleo-board.-The-image-sh-750x750.webp 750w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/03\/DALL\u00b7E-2025-02-13-09.56.17-A-detailed-high-quality-digital-illustration-depicting-the-process-of-compiling-and-flashing-MicroPython-onto-an-STM32F411-Nucleo-board.-The-image-sh-400x400.webp 400w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/03\/DALL\u00b7E-2025-02-13-09.56.17-A-detailed-high-quality-digital-illustration-depicting-the-process-of-compiling-and-flashing-MicroPython-onto-an-STM32F411-Nucleo-board.-The-image-sh-250x250.webp 250w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>In this guide, we shall see how output compare mode works and develop a driver that will toggle the LED using hardware.<\/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>Timer in output compare.<\/li>\n\n\n\n<li>Micropython Firmware.<\/li>\n\n\n\n<li>Hardware Conenction<\/li>\n\n\n\n<li>Results.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">1. Timer in Output Compare:<\/h2>\n\n\n\n<p>The&nbsp;<strong>Output Compare<\/strong>&nbsp;concept in STM32 is based on comparing the timer\u2019s counter value with a predefined value (stored in a capture\/compare register) to trigger an event or perform an action. It\u2019s used for precise timing, periodic signals, and PWM generation.<\/p>\n\n\n\n<p><strong>Core Concept:<\/strong><\/p>\n\n\n\n<p>1.&nbsp;<strong>Timer Counting<\/strong>:<\/p>\n\n\n\n<p>\u2022 A timer counts up, down, or both (depending on the mode).<\/p>\n\n\n\n<p>\u2022 The current count value is stored in the&nbsp;<strong>Counter Register (<\/strong>CNT<strong>)<\/strong>.<\/p>\n\n\n\n<p>2.&nbsp;<strong>Comparison<\/strong>:<\/p>\n\n\n\n<p>\u2022 A predefined value is stored in a&nbsp;<strong>Compare Register (<\/strong>CCR<strong>)<\/strong>.<\/p>\n\n\n\n<p>\u2022 The timer continuously compares the&nbsp;CNT&nbsp;value with&nbsp;CCR.<\/p>\n\n\n\n<p>3.&nbsp;<strong>Match Event<\/strong>:<\/p>\n\n\n\n<p>\u2022 When&nbsp;CNT == CCR, the timer generates a match event.<\/p>\n\n\n\n<p>\u2022 The event can trigger an action (e.g., toggling a pin, generating an interrupt, or updating a PWM signal).<\/p>\n\n\n\n<p><strong>Use Cases:<\/strong><\/p>\n\n\n\n<p>\u2022&nbsp;<strong>Generating Periodic Signals<\/strong>: Toggle a GPIO pin at regular intervals.<\/p>\n\n\n\n<p>\u2022&nbsp;<strong>PWM Signal Generation<\/strong>: Control duty cycles for motor drivers or LED dimming.<\/p>\n\n\n\n<p>\u2022&nbsp;<strong>Input Capture Synchronization<\/strong>: Measure or synchronize external signal timing.<\/p>\n\n\n\n<p>\u2022&nbsp;<strong>Event Timing<\/strong>: Trigger specific actions at predefined time intervals.<\/p>\n\n\n\n<p><strong>Output Compare Modes:<\/strong><\/p>\n\n\n\n<p>1.&nbsp;<strong>Toggle Mode<\/strong>: Changes the GPIO pin state (high\/low) on each match.<\/p>\n\n\n\n<p>2.&nbsp;<strong>Set Mode<\/strong>: Forces the GPIO pin high when a match occurs.<\/p>\n\n\n\n<p>3.&nbsp;<strong>Reset Mode<\/strong>: Forces the GPIO pin low when a match occurs.<\/p>\n\n\n\n<p>4.&nbsp;<strong>PWM Mode<\/strong>: Outputs a pulse-width-modulated signal, varying the on\/off times.<\/p>\n\n\n\n<p><strong>Key Features:<\/strong><\/p>\n\n\n\n<p>\u2022&nbsp;<strong>Resolution<\/strong>: Depends on the timer\u2019s bit width (16-bit or 32-bit).<\/p>\n\n\n\n<p>\u2022&nbsp;<strong>Precision<\/strong>: Achieved using the timer\u2019s prescaler to adjust clock speed.<\/p>\n\n\n\n<p>\u2022&nbsp;<strong>Flexibility<\/strong>: Multiple channels per timer for simultaneous compare events.<\/p>\n\n\n\n<p>\u2022&nbsp;<strong>Interrupts<\/strong>: Can trigger interrupts on compare match for software-driven actions.<\/p>\n\n\n\n<p><strong>Example in Words:<\/strong><\/p>\n\n\n\n<p>\u2022 A timer is configured to count from 0 to 1000 (auto-reload value).<\/p>\n\n\n\n<p>\u2022 A compare value of 500 is set in&nbsp;CCR1.<\/p>\n\n\n\n<p>\u2022 When the timer reaches 500, it toggles a GPIO pin (or triggers an interrupt).<\/p>\n\n\n\n<p>\u2022 The process repeats as the timer resets and counts again.<\/p>\n\n\n\n<p>By using Output Compare, you can control real-time events with high precision, critical in embedded systems like motor control, signal generation, or sensor sampling.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"503\" src=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/12\/IMG_0089-1024x503.jpg\" alt=\"\" class=\"wp-image-3079\" srcset=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/12\/IMG_0089-1024x503.jpg 1024w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/12\/IMG_0089-300x147.jpg 300w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/12\/IMG_0089-768x377.jpg 768w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/12\/IMG_0089-1536x754.jpg 1536w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/12\/IMG_0089-2048x1006.jpg 2048w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/12\/IMG_0089-1150x565.jpg 1150w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/12\/IMG_0089-750x368.jpg 750w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/12\/IMG_0089-400x196.jpg 400w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/12\/IMG_0089-250x123.jpg 250w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>We shall use toggle Mode to blink an LED.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2. Micropython Firmware:<\/h2>\n\n\n\n<p>First, we need to configure Thonny to work with STM32F411 Nucleo-64. Please refer to&nbsp;<a href=\"https:\/\/blog.embeddedexpert.io\/?p=3237\" target=\"_blank\" rel=\"noreferrer noopener\">this guide<\/a>&nbsp;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\u2019t 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>After finding which pins are connected to TIM2, we shall use PA0 as our PWM pin.<\/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>Next, setup timer 2 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=1)  # Set Timer 2 at 1 Hz<\/pre><\/div>\n\n\n\n<p>Next, configure the channel of the timer to work as output compare 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.OC_TOGGLE, pin=pyb.Pin.board.PA0, pulse_width_percent=0)<\/pre><\/div>\n\n\n\n<p>The function takes the following:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Channel number which is channel 1.<\/li>\n\n\n\n<li>Timer mode which is OC_Toggle in this case.<\/li>\n\n\n\n<li>Required pin which is PA0.<\/li>\n\n\n\n<li>Width which is set to 0 in this case.<\/li>\n<\/ul>\n\n\n\n<p>You can change the mode from&nbsp;<code>Timer.OC_TOGGLE<\/code>&nbsp;to:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>Timer.OC_ACTIVE<\/code>: Output is high when compare match occurs.<\/li>\n\n\n\n<li><code>Timer.OC_INACTIVE<\/code>: Output is low when compare match occurs.<\/li>\n\n\n\n<li><code>Timer.OC_FORCE_ACTIVE<\/code>: Forces output high.<\/li>\n\n\n\n<li><code>Timer.OC_FORCE_INACTIVE<\/code>: Forces output low.<\/li>\n<\/ul>\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<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\"><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>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\u2019t 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<p>You should get something similar to this:<\/p>\n\n\n\n<p><\/p>\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\">\n<iframe loading=\"lazy\" title=\"Output Compare on STM32F411 using Micropython\" width=\"1170\" height=\"658\" src=\"https:\/\/www.youtube.com\/embed\/8Co7_ZvlM4k?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>Happy coding \ud83d\ude09<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this guide, we shall see how output compare mode works and develop a driver that will toggle the LED using hardware. In this guide, we shall cover the following: 1. Timer in Output Compare: The&nbsp;Output Compare&nbsp;concept in STM32 is based on comparing the timer\u2019s counter value with a predefined value (stored in a capture\/compare [&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-3335","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\/3335"}],"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=3335"}],"version-history":[{"count":3,"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=\/wp\/v2\/posts\/3335\/revisions"}],"predecessor-version":[{"id":3339,"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=\/wp\/v2\/posts\/3335\/revisions\/3339"}],"wp:attachment":[{"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3335"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3335"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3335"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}