{"id":2367,"date":"2024-03-03T04:57:53","date_gmt":"2024-03-03T04:57:53","guid":{"rendered":"https:\/\/blog.embeddedexpert.io\/?p=2367"},"modified":"2024-03-03T04:57:56","modified_gmt":"2024-03-03T04:57:56","slug":"getting-started-with-stm32g0-and-stm32cubeide-timer-in-output-compare","status":"publish","type":"post","link":"https:\/\/blog.embeddedexpert.io\/?p=2367","title":{"rendered":"Getting Started with STM32G0 and STM32CubeIDE: Timer in Output Compare"},"content":{"rendered":"\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"400\" height=\"400\" src=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/pt156578902-100_original_arm_mcu_stm32g070kbt6_stm32g070_stm32g_lqfp_32_microcontroller.jpg-2.webp\" alt=\"\" class=\"wp-image-2368\" srcset=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/pt156578902-100_original_arm_mcu_stm32g070kbt6_stm32g070_stm32g_lqfp_32_microcontroller.jpg-2.webp 400w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/pt156578902-100_original_arm_mcu_stm32g070kbt6_stm32g070_stm32g_lqfp_32_microcontroller.jpg-2-300x300.webp 300w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/pt156578902-100_original_arm_mcu_stm32g070kbt6_stm32g070_stm32g_lqfp_32_microcontroller.jpg-2-150x150.webp 150w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/pt156578902-100_original_arm_mcu_stm32g070kbt6_stm32g070_stm32g_lqfp_32_microcontroller.jpg-2-250x250.webp 250w\" sizes=\"(max-width: 400px) 100vw, 400px\" \/><\/figure><\/div>\n\n\n\n<p>In this guide, we shall take a look at the timers in STM32G070 and implement timer driver to blink an LED using hardware level without any software delay etc.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>In this guide, we shall cover the following:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Timer features in STM32G070.<\/li><li>What is Output compare mode.<\/li><li>Developing the driver.<\/li><li>LED Connection.<\/li><li>Results.<\/li><\/ul>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. Timer Features in STM32G070:<\/h2>\n\n\n\n<p>The general-purpose timers consist of a 16-bit auto-reload counter driven by a programmable prescaler.<\/p>\n\n\n\n<p>General-purpose TIMx timer features include:<\/p>\n\n\n\n<p>\u2022 16-bit TIM3, TIM4 (a) up, down, up\/down auto-reload counter.<\/p>\n\n\n\n<p>\u2022 16-bit programmable prescaler used to divide (also \u201con the fly\u201d) the counter clock frequency by any factor between 1 and 65535.<\/p>\n\n\n\n<p>\u2022 Up to 4 independent channels for:<\/p>\n\n\n\n<p>\u2013 Input capture<\/p>\n\n\n\n<p>\u2013 Output compare<\/p>\n\n\n\n<p>\u2013 PWM generation (Edge- and Center-aligned modes)<\/p>\n\n\n\n<p>\u2013 One-pulse mode output<\/p>\n\n\n\n<p>\u2022 Synchronization circuit to control the timer with external signals and to interconnect several timers.<\/p>\n\n\n\n<p>\u2022 Interrupt\/DMA generation on the following events:<\/p>\n\n\n\n<p>\u2013 Update: counter overflow\/underflow, counter initialization (by software or internal\/external trigger)<\/p>\n\n\n\n<p>\u2013 Trigger event (counter start, stop, initialization or count by internal\/external trigger)<\/p>\n\n\n\n<p>\u2013 Input capture<\/p>\n\n\n\n<p>\u2013 Output compare<\/p>\n\n\n\n<p>\u2022 Supports incremental (quadrature) encoder and hall-sensor circuitry for positioning purposes<\/p>\n\n\n\n<p>\u2022 Trigger input for external clock or cycle-by-cycle current management.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"1009\" src=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/Screenshot-2024-03-03-at-7.18.29\u202fAM-1024x1009.png\" alt=\"\" class=\"wp-image-2369\" srcset=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/Screenshot-2024-03-03-at-7.18.29\u202fAM-1024x1009.png 1024w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/Screenshot-2024-03-03-at-7.18.29\u202fAM-300x296.png 300w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/Screenshot-2024-03-03-at-7.18.29\u202fAM-768x757.png 768w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/Screenshot-2024-03-03-at-7.18.29\u202fAM-1150x1133.png 1150w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/Screenshot-2024-03-03-at-7.18.29\u202fAM-750x739.png 750w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/Screenshot-2024-03-03-at-7.18.29\u202fAM-400x394.png 400w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/Screenshot-2024-03-03-at-7.18.29\u202fAM-250x246.png 250w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/Screenshot-2024-03-03-at-7.18.29\u202fAM.png 1532w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption>Block Diagram<\/figcaption><\/figure><\/div>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2. Output Compare Mode:<\/h2>\n\n\n\n<p>In STM32 microcontrollers, the Output Compare (OC) mode in the timer peripheral allows you to generate a waveform with a predefined period and pulse width. This mode is often used for generating PWM (Pulse Width Modulation) signals, generating timing signals for controlling peripherals, or triggering events.<\/p>\n\n\n\n<p>In OC mode, the timer\u2019s counter value is compared to a predefined value called the compare value. When the counter matches the compare value, an action can be taken, such as toggling an output pin, setting it high or low, or triggering an interrupt. In our case, we shall toggle a pin connected to the timer.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"574\" src=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/Screenshot-2024-03-03-at-7.28.14\u202fAM-1024x574.png\" alt=\"\" class=\"wp-image-2370\" srcset=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/Screenshot-2024-03-03-at-7.28.14\u202fAM-1024x574.png 1024w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/Screenshot-2024-03-03-at-7.28.14\u202fAM-300x168.png 300w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/Screenshot-2024-03-03-at-7.28.14\u202fAM-768x431.png 768w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/Screenshot-2024-03-03-at-7.28.14\u202fAM-1150x645.png 1150w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/Screenshot-2024-03-03-at-7.28.14\u202fAM-750x420.png 750w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/Screenshot-2024-03-03-at-7.28.14\u202fAM-400x225.png 400w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/Screenshot-2024-03-03-at-7.28.14\u202fAM-250x141.png 250w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/Screenshot-2024-03-03-at-7.28.14\u202fAM.png 1534w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">3. Developing the Driver:<\/h2>\n\n\n\n<p><\/p>\n\n\n\n<p>Before heading into driver developing, please refer to <a rel=\"noreferrer noopener\" href=\"https:\/\/blog.embeddedexpert.io\/?p=2299\" data-type=\"URL\" data-id=\"https:\/\/blog.embeddedexpert.io\/?p=2299\" target=\"_blank\">this guide<\/a> for how to start a new project using HAL within STM32CubeIDE.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>After creating new project with name of TIM_Output_Compare. open clock configuration tab as following:<\/p>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"572\" src=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/2024-03-03_07-41-04-1024x572.jpg\" alt=\"\" class=\"wp-image-2371\" srcset=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/2024-03-03_07-41-04-1024x572.jpg 1024w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/2024-03-03_07-41-04-300x167.jpg 300w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/2024-03-03_07-41-04-768x429.jpg 768w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/2024-03-03_07-41-04-1536x857.jpg 1536w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/2024-03-03_07-41-04-2048x1143.jpg 2048w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/2024-03-03_07-41-04-1150x642.jpg 1150w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/2024-03-03_07-41-04-750x419.jpg 750w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/2024-03-03_07-41-04-400x223.jpg 400w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/2024-03-03_07-41-04-250x141.jpg 250w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Notice the value of APB Timer clocks which is 16MHz in this case.<\/p>\n\n\n\n<p>Now, from Pinout and Configuration tab, enable timer 3:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"572\" src=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/2024-03-03_07-42-42-1024x572.jpg\" alt=\"\" class=\"wp-image-2372\" srcset=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/2024-03-03_07-42-42-1024x572.jpg 1024w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/2024-03-03_07-42-42-300x167.jpg 300w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/2024-03-03_07-42-42-768x429.jpg 768w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/2024-03-03_07-42-42-1536x857.jpg 1536w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/2024-03-03_07-42-42-2048x1143.jpg 2048w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/2024-03-03_07-42-42-1150x642.jpg 1150w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/2024-03-03_07-42-42-750x419.jpg 750w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/2024-03-03_07-42-42-400x223.jpg 400w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/2024-03-03_07-42-42-250x141.jpg 250w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Set the clock source to be internal, Set channel 1 to be output compare CH1 and you will notice CubeMX already set PA6 to work with timer3 in output compare mode.<\/p>\n\n\n\n<p>Now, we need to configure the timer.<\/p>\n\n\n\n<p>First we need to set the required prescaller and counter period.<\/p>\n\n\n\n<p>Since the timer clock is 16MHz and we need to get 1Hz, we shall use the following equation to determine the required frequency and period as following:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"612\" height=\"202\" src=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/Screenshot-2024-03-03-at-7.31.44\u202fAM.png\" alt=\"\" class=\"wp-image-2373\" srcset=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/Screenshot-2024-03-03-at-7.31.44\u202fAM.png 612w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/Screenshot-2024-03-03-at-7.31.44\u202fAM-300x99.png 300w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/Screenshot-2024-03-03-at-7.31.44\u202fAM-400x132.png 400w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/Screenshot-2024-03-03-at-7.31.44\u202fAM-250x83.png 250w\" sizes=\"(max-width: 612px) 100vw, 612px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>By setting the PSC to 15999 and ARR to 999, we get the desired frequency of 1Hz.<\/p>\n\n\n\n<p>Hence, configure the timer as following:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"1024\" src=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/2024-03-03_07-45-24-1024x1024.jpg\" alt=\"\" class=\"wp-image-2374\" srcset=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/2024-03-03_07-45-24-1024x1024.jpg 1024w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/2024-03-03_07-45-24-300x300.jpg 300w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/2024-03-03_07-45-24-150x150.jpg 150w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/2024-03-03_07-45-24-768x768.jpg 768w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/2024-03-03_07-45-24-750x750.jpg 750w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/2024-03-03_07-45-24-400x400.jpg 400w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/2024-03-03_07-45-24-250x250.jpg 250w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/2024-03-03_07-45-24.jpg 1120w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Also, set the output compare channel mode to be toggle on match which will toggle the pin when the Counter match the CCR value which is 0 in this case.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Save the project and this should generate the project.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>In user begin code 2, add the following line:<\/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;}\">HAL_TIM_OC_Start(&amp;htim3, TIM_CHANNEL_1);<\/pre><\/div>\n\n\n\n<p>This function will start the channel in output compare mode and takes two arguments:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Pointer to timer handler.<\/li><li>the channel of the timer to be started.<\/li><\/ul>\n\n\n\n<p>It returns HAL_StatusTypedef:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>HAL_OK.<\/li><li>HALL_ERROR.<\/li><li>HAL_BUSY.<\/li><li>HAL_TIMEOUT.<\/li><\/ul>\n\n\n\n<p><\/p>\n\n\n\n<p>That all for the driver section, save the code and upload it to your MCU.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">4. Connection:<\/h2>\n\n\n\n<p>The connection as following and you will need those extra componets:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Breadboard.<\/li><li>Hockup wires.<\/li><li>LED (any color).<\/li><li>100Ohm resistor.<\/li><\/ul>\n\n\n\n<p>Connect the LED to MCU as shown below:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"688\" height=\"1024\" src=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/Screenshot-2024-03-03-at-7.37.37\u202fAM-688x1024.png\" alt=\"\" class=\"wp-image-2375\" srcset=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/Screenshot-2024-03-03-at-7.37.37\u202fAM-688x1024.png 688w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/Screenshot-2024-03-03-at-7.37.37\u202fAM-202x300.png 202w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/Screenshot-2024-03-03-at-7.37.37\u202fAM-768x1142.png 768w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/Screenshot-2024-03-03-at-7.37.37\u202fAM-1033x1536.png 1033w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/Screenshot-2024-03-03-at-7.37.37\u202fAM-1150x1710.png 1150w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/Screenshot-2024-03-03-at-7.37.37\u202fAM-750x1116.png 750w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/Screenshot-2024-03-03-at-7.37.37\u202fAM-400x595.png 400w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/Screenshot-2024-03-03-at-7.37.37\u202fAM-250x372.png 250w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/03\/Screenshot-2024-03-03-at-7.37.37\u202fAM.png 1186w\" sizes=\"(max-width: 688px) 100vw, 688px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">5. Results:<\/h2>\n\n\n\n<p><\/p>\n\n\n\n<p>Once you uploaded the code, you should get the following:<\/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=\"Getting Started with STM32G0 and STM32CubeIDE: Blinking LED\" width=\"1170\" height=\"658\" src=\"https:\/\/www.youtube.com\/embed\/eVQu9PoVJuY?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Happy coding \ud83d\ude42<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this guide, we shall take a look at the timers in STM32G070 and implement timer driver to blink an LED using hardware level without any software delay etc. In this guide, we shall cover the following: Timer features in STM32G070. What is Output compare mode. Developing the driver. LED Connection. Results. 1. Timer Features [&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-2367","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\/2367"}],"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=2367"}],"version-history":[{"count":1,"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=\/wp\/v2\/posts\/2367\/revisions"}],"predecessor-version":[{"id":2376,"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=\/wp\/v2\/posts\/2367\/revisions\/2376"}],"wp:attachment":[{"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2367"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2367"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2367"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}