{"id":3043,"date":"2024-11-27T17:13:43","date_gmt":"2024-11-27T17:13:43","guid":{"rendered":"https:\/\/blog.embeddedexpert.io\/?p=3043"},"modified":"2024-11-27T17:13:45","modified_gmt":"2024-11-27T17:13:45","slug":"getting-started-with-stm32h5-arm-cortex-m33-dac-with-dma-and-timer","status":"publish","type":"post","link":"https:\/\/blog.embeddedexpert.io\/?p=3043","title":{"rendered":"Getting Started with STM32H5 ARM Cortex M33: DAC with DMA and Timer"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"725\" src=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/STM32-u5-1-1-5-1024x725.webp\" alt=\"\" class=\"wp-image-3044\" srcset=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/STM32-u5-1-1-5-1024x725.webp 1024w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/STM32-u5-1-1-5-300x212.webp 300w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/STM32-u5-1-1-5-768x544.webp 768w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/STM32-u5-1-1-5-750x531.webp 750w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/STM32-u5-1-1-5-400x283.webp 400w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/STM32-u5-1-1-5-250x177.webp 250w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/STM32-u5-1-1-5.webp 1141w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>In the previous guide (<a href=\"https:\/\/blog.embeddedexpert.io\/?p=3034\" data-type=\"link\" data-id=\"https:\/\/blog.embeddedexpert.io\/?p=3034\">here<\/a>), we took a look how to configure DAC and we used polling mode to generate waveform using the DAC. In this guide, we shall use timer and DMA to generate faster waveform while maintaining maximum performance.<\/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\">\n<li>STM32CubeMX configuration.<\/li>\n\n\n\n<li>Firmware development.<\/li>\n\n\n\n<li>Results.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">1. STM32CubeMX Configuration:<\/h2>\n\n\n\n<p>From the previous guide, open the .ioc file from project explorer as following:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"695\" src=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-32-02-1024x695.jpg\" alt=\"\" class=\"wp-image-3045\" srcset=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-32-02-1024x695.jpg 1024w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-32-02-300x204.jpg 300w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-32-02-768x521.jpg 768w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-32-02-1536x1042.jpg 1536w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-32-02-2048x1390.jpg 2048w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-32-02-1150x780.jpg 1150w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-32-02-750x509.jpg 750w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-32-02-400x271.jpg 400w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-32-02-250x170.jpg 250w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Next, we shall push the MCU to it&#8217;s full speed as following:<\/p>\n\n\n\n<p>Select Clock Configuration tab and set HCLK to 250MHz as following:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"536\" src=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-35-45-1024x536.jpg\" alt=\"\" class=\"wp-image-3046\" srcset=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-35-45-1024x536.jpg 1024w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-35-45-300x157.jpg 300w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-35-45-768x402.jpg 768w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-35-45-1536x804.jpg 1536w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-35-45-2048x1072.jpg 2048w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-35-45-1150x602.jpg 1150w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-35-45-750x392.jpg 750w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-35-45-400x209.jpg 400w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-35-45-250x131.jpg 250w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Next from DAC section, set the trigger to be timer8 trigger out event as following:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"872\" height=\"1024\" src=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-36-40-872x1024.jpg\" alt=\"\" class=\"wp-image-3047\" srcset=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-36-40-872x1024.jpg 872w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-36-40-255x300.jpg 255w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-36-40-768x902.jpg 768w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-36-40-1308x1536.jpg 1308w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-36-40-1150x1351.jpg 1150w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-36-40-750x881.jpg 750w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-36-40-400x470.jpg 400w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-36-40-250x294.jpg 250w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-36-40.jpg 1604w\" sizes=\"(max-width: 872px) 100vw, 872px\" \/><\/figure>\n\n\n\n<p>Next, from timer section:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Set clock source to Internal Clock.<\/li>\n\n\n\n<li>Set PSC to 1 (No prescaller)<\/li>\n\n\n\n<li>Set period to 9 (10-1)<\/li>\n\n\n\n<li>Auto-reload Preload to enable.<\/li>\n\n\n\n<li>TRGO to Update Event.<\/li>\n<\/ul>\n\n\n\n<p>As following:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"873\" height=\"1024\" src=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-39-55-873x1024.jpg\" alt=\"\" class=\"wp-image-3048\" srcset=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-39-55-873x1024.jpg 873w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-39-55-256x300.jpg 256w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-39-55-768x901.jpg 768w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-39-55-1309x1536.jpg 1309w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-39-55-1150x1349.jpg 1150w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-39-55-750x880.jpg 750w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-39-55-400x469.jpg 400w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-39-55-250x293.jpg 250w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-39-55.jpg 1570w\" sizes=\"(max-width: 873px) 100vw, 873px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Next, in GPDMA1, enable Ch0 in standard request mode as following:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"914\" src=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-45-48-1024x914.jpg\" alt=\"\" class=\"wp-image-3049\" srcset=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-45-48-1024x914.jpg 1024w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-45-48-300x268.jpg 300w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-45-48-768x685.jpg 768w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-45-48-1536x1371.jpg 1536w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-45-48-1150x1026.jpg 1150w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-45-48-750x669.jpg 750w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-45-48-400x357.jpg 400w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-45-48-250x223.jpg 250w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-45-48.jpg 1598w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Then configure CH0 as following:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Enable circular mode.<\/li>\n\n\n\n<li>Priority to normal.<\/li>\n\n\n\n<li>Direction Memory to peripheral.<\/li>\n<\/ul>\n\n\n\n<p>For source Data setting:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Address increment to enabled.<\/li>\n\n\n\n<li>Data width to word.<\/li>\n<\/ul>\n\n\n\n<p>For destination Data:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Set only data width to word size.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"854\" height=\"1024\" src=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-47-18-854x1024.jpg\" alt=\"\" class=\"wp-image-3050\" srcset=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-47-18-854x1024.jpg 854w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-47-18-250x300.jpg 250w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-47-18-768x921.jpg 768w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-47-18-1281x1536.jpg 1281w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-47-18-1150x1379.jpg 1150w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-47-18-750x899.jpg 750w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-47-18-400x479.jpg 400w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/2024-11-27_19-47-18.jpg 1590w\" sizes=\"(max-width: 854px) 100vw, 854px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Thats all for the configuration. Save the project and this will generate the project.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2. Firmware Development:<\/h2>\n\n\n\n<p>In main.c file, in user code begin PV, declare the 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;}\">#define   DAC_BUFFER_SIZE          128\n\n\nconst uint32_t sin_func[DAC_BUFFER_SIZE] = {\n\t2048, 2145, 2242, 2339, 2435, 2530, 2624, 2717, 2808, 2897,\n\t2984, 3069, 3151, 3230, 3307, 3381, 3451, 3518, 3581, 3640,\n\t3696, 3748, 3795, 3838, 3877, 3911, 3941, 3966, 3986, 4002,\n\t4013, 4019, 4020, 4016, 4008, 3995, 3977, 3954, 3926, 3894,\n\t3858, 3817, 3772, 3722, 3669, 3611, 3550, 3485, 3416, 3344,\n\t3269, 3191, 3110, 3027, 2941, 2853, 2763, 2671, 2578, 2483,\n\t2387, 2291, 2194, 2096, 1999, 1901, 1804, 1708, 1612, 1517,\n\t1424, 1332, 1242, 1154, 1068, 985, 904, 826, 751, 679,\n\t610, 545, 484, 426, 373, 323, 278, 237, 201, 169,\n\t141, 118, 100, 87, 79, 75, 76, 82, 93, 109,\n\t129, 154, 184, 218, 257, 300, 347, 399, 455, 514,\n\t577, 644, 714, 788, 865, 944, 1026, 1111, 1198, 1287,\n\t1378, 1471, 1565, 1660, 1756, 1853, 1950, 2047\n};\n<\/pre><\/div>\n\n\n\n<p>This is a sinewave lookup table.<\/p>\n\n\n\n<p>In user code begin 2, start the timer in the base mode 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;}\">  HAL_TIM_Base_Start(&amp;htim8);<\/pre><\/div>\n\n\n\n<p>Next, start the DAC in DMA mode 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;}\">HAL_DAC_Start_DMA(&amp;hdac1, DAC_CHANNEL_1, (uint32_t *)SawTooth_func, DAC_BUFFER_SIZE, DAC_ALIGN_12B_R);<\/pre><\/div>\n\n\n\n<p>The function shall take the following:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Instant to the DAC which is hdac1 in this case.<\/li>\n\n\n\n<li>DAC channel, which is channel 1 in our case.<\/li>\n\n\n\n<li>Pointer to the data to be written to the DAC.<\/li>\n\n\n\n<li>Size of the data.<\/li>\n\n\n\n<li>The alignment which is 12Bit and right alignment.<\/li>\n<\/ul>\n\n\n\n<p>Thats all for the firmware development.<\/p>\n\n\n\n<p>Save the project, build it and run it on your STM32H563Zi board.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/07\/2024-07-12_15-03-3.jpg\" alt=\"\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">3. Results:<\/h2>\n\n\n\n<p>Probe PA4 and you should get the following:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"480\" src=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/DS1Z_QuickPrint1.png\" alt=\"\" class=\"wp-image-3051\" srcset=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/DS1Z_QuickPrint1.png 800w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/DS1Z_QuickPrint1-300x180.png 300w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/DS1Z_QuickPrint1-768x461.png 768w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/DS1Z_QuickPrint1-750x450.png 750w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/DS1Z_QuickPrint1-400x240.png 400w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/11\/DS1Z_QuickPrint1-250x150.png 250w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/figure><\/div>\n\n\n<p>Notice the frequency, it is above 100KHz and yet, the main loop is empty. Which means we are using hardware level to generate the waveform.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Happy coding \ud83d\ude09 <\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the previous guide (here), we took a look how to configure DAC and we used polling mode to generate waveform using the DAC. In this guide, we shall use timer and DMA to generate faster waveform while maintaining maximum performance. In this guide, we shall cover the following: 1. STM32CubeMX Configuration: From the previous [&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-3043","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\/3043"}],"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=3043"}],"version-history":[{"count":1,"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=\/wp\/v2\/posts\/3043\/revisions"}],"predecessor-version":[{"id":3052,"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=\/wp\/v2\/posts\/3043\/revisions\/3052"}],"wp:attachment":[{"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3043"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3043"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3043"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}