{"id":3177,"date":"2025-01-23T04:59:51","date_gmt":"2025-01-23T04:59:51","guid":{"rendered":"https:\/\/blog.embeddedexpert.io\/?p=3177"},"modified":"2025-01-23T04:59:53","modified_gmt":"2025-01-23T04:59:53","slug":"getting-started-with-stm32h5-arm-cortex-m33-spi-in-full-duplex-mode","status":"publish","type":"post","link":"https:\/\/blog.embeddedexpert.io\/?p=3177","title":{"rendered":"Getting Started with STM32H5 ARM Cortex M33: SPI in Full Duplex 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\/01\/BC39A159-89E3-4307-862B-D8B50AC24300-1.png\" alt=\"\" class=\"wp-image-3178\" srcset=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/BC39A159-89E3-4307-862B-D8B50AC24300-1.png 1024w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/BC39A159-89E3-4307-862B-D8B50AC24300-1-300x300.png 300w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/BC39A159-89E3-4307-862B-D8B50AC24300-1-150x150.png 150w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/BC39A159-89E3-4307-862B-D8B50AC24300-1-768x768.png 768w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/BC39A159-89E3-4307-862B-D8B50AC24300-1-750x750.png 750w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/BC39A159-89E3-4307-862B-D8B50AC24300-1-400x400.png 400w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/BC39A159-89E3-4307-862B-D8B50AC24300-1-250x250.png 250w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>In this guide, we shall cover how to transmit and receive data from a slave device connected to out STM32H5. The slave device is ADXL345 accelerometer.<\/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>Configure SPI for ADXL345.<\/li>\n\n\n\n<li>ADXL345 connection.<\/li>\n\n\n\n<li>Modification to the library.<\/li>\n\n\n\n<li>Results.<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. Configure the SPI for ADXL345:<\/h2>\n\n\n\n<p>Open SPI_TX.ioc file as following:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1020\" height=\"1024\" src=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-23_07-36-57-1020x1024.jpg\" alt=\"\" class=\"wp-image-3179\" srcset=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-23_07-36-57-1020x1024.jpg 1020w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-23_07-36-57-300x300.jpg 300w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-23_07-36-57-150x150.jpg 150w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-23_07-36-57-768x771.jpg 768w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-23_07-36-57-1530x1536.jpg 1530w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-23_07-36-57-1150x1155.jpg 1150w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-23_07-36-57-750x753.jpg 750w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-23_07-36-57-400x402.jpg 400w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-23_07-36-57-250x250.jpg 250w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-23_07-36-57.jpg 2016w\" sizes=\"(max-width: 1020px) 100vw, 1020px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>From connectivity, select the SPI and configure it as following:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"891\" height=\"1024\" src=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-22_16-54-24-891x1024.jpg\" alt=\"\" class=\"wp-image-3180\" srcset=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-22_16-54-24-891x1024.jpg 891w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-22_16-54-24-261x300.jpg 261w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-22_16-54-24-768x882.jpg 768w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-22_16-54-24-1337x1536.jpg 1337w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-22_16-54-24-1150x1321.jpg 1150w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-22_16-54-24-750x862.jpg 750w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-22_16-54-24-400x460.jpg 400w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-22_16-54-24-250x287.jpg 250w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-22_16-54-24.jpg 1598w\" sizes=\"(max-width: 891px) 100vw, 891px\" \/><\/figure>\n\n\n\n<p>Keep the baudrate as it since it will work just fine.<\/p>\n\n\n\n<p>Set the following:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Clock Polarity (CPOL) to High.<\/li>\n\n\n\n<li>Clock Phase (CPHA) tp 2 Edge.<\/li>\n<\/ul>\n\n\n\n<p>From the pins, give PA6 a name as CS as following:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"542\" src=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-23_07-41-18-1024x542.jpg\" alt=\"\" class=\"wp-image-3181\" srcset=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-23_07-41-18-1024x542.jpg 1024w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-23_07-41-18-300x159.jpg 300w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-23_07-41-18-768x407.jpg 768w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-23_07-41-18-1536x813.jpg 1536w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-23_07-41-18-2048x1084.jpg 2048w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-23_07-41-18-1150x609.jpg 1150w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-23_07-41-18-750x397.jpg 750w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-23_07-41-18-400x212.jpg 400w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-23_07-41-18-250x132.jpg 250w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Save the project and this will generate the project again.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2. ADXL345 Connection:<\/h2>\n\n\n\n<p>The sensor shall be connected as following:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"631\" src=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/SPI_ADXL345_pinout-1024x631.png\" alt=\"\" class=\"wp-image-3182\" srcset=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/SPI_ADXL345_pinout-1024x631.png 1024w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/SPI_ADXL345_pinout-300x185.png 300w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/SPI_ADXL345_pinout-768x474.png 768w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/SPI_ADXL345_pinout-1150x709.png 1150w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/SPI_ADXL345_pinout-750x462.png 750w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/SPI_ADXL345_pinout-400x247.png 400w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/SPI_ADXL345_pinout-250x154.png 250w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/SPI_ADXL345_pinout.png 1239w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><em>ADXL345 <\/em><\/td><td><em>STM32H563ZI-Nucleo144<\/em><\/td><\/tr><tr><td>Vcc<\/td><td>5V<\/td><\/tr><tr><td>GND<\/td><td>GND<\/td><\/tr><tr><td>CS<\/td><td>PA6 (Arduini pin A0)<\/td><\/tr><tr><td>SDO<\/td><td>PG9 (Arduino pin D12)<\/td><\/tr><tr><td>SDA<\/td><td>PB5 (Arduino pin D11)<\/td><\/tr><tr><td>SCL<\/td><td>PA5 (Arduino pin D13)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">3. Modification to the Library:<\/h2>\n\n\n\n<p>Next, head to this guide <a href=\"https:\/\/blog.embeddedexpert.io\/?p=1317\" data-type=\"link\" data-id=\"https:\/\/blog.embeddedexpert.io\/?p=1317\" target=\"_blank\" rel=\"noreferrer noopener\">here<\/a> or simply, download the entire code from here:<\/p>\n\n\n\n<div class=\"wp-block-file\"><a id=\"wp-block-file--media-e7db4ea9-ccc3-433b-aeac-3a043438e0e8\" href=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/SPI_TX.zip\">SPI_TX<\/a><a href=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/SPI_TX.zip\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-e7db4ea9-ccc3-433b-aeac-3a043438e0e8\">Download<\/a><\/div>\n\n\n\n<p>in ADXL345.c source file, include the main.h 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;}\">#include &quot;main.h&quot;<\/pre><\/div>\n\n\n\n<p>For CS line, read and write to the sensor functions:<\/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;}\">static void cs_enable()\n{\n\tHAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, 0);\n}\n\nstatic void cs_disable()\n{\n\tHAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, 1);\n}\n\n\n\nstatic void adxl345_write(uint8_t address, uint8_t value)\n{\n\tuint8_t data[2];\n\n\t\/*Enable multi-byte, place address into buffer*\/\n\tdata[0] = address|MULTI_BYTE_EN;\n\n\t\/*Place data into buffer*\/\n\tdata[1] = value;\n\n\t\/*Pull cs line low to enable slave*\/\n\tcs_enable();\n\n\t\/*Transmit data and address*\/\n\n\tHAL_SPI_Transmit(&amp;hspi1, data, 2, 100);\n\n\n\t\/*Pull cs line high to disable slave*\/\n\tcs_disable();\n\n\n}\n\nstatic void adxl345_read(uint8_t address, uint8_t * rxdata)\n{\n\n\t\/*Set read operation*\/\n\taddress |= READ_OPERATION;\n\n\t\/*Enable multi-byte*\/\n\taddress |= MULTI_BYTE_EN;\n\n\tuint8_t DummyBuffer[6];\n\n\tDummyBuffer[0]=address;\n\n\tfor (int i=1;i&lt;5;i++)\n\t{\n\t\tDummyBuffer[i]=0xFF;\n\t}\n\n\n\t\/*Pull cs line low to enable slave*\/\n\tcs_enable();\n\n\tHAL_SPI_TransmitReceive(&amp;hspi1, DummyBuffer, rxdata, 6, 300);\n\n\t\/*Pull cs line high to disable slave*\/\n\tcs_disable();\n\n}\n<\/pre><\/div>\n\n\n\n<p>The rest of the code shall remain the same, except removing the following functions from the initialization function of the sensor:<\/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;}\">adxl_spi_pins_init();\nadxl_spi_config();<\/pre><\/div>\n\n\n\n<p>In main.c file:<\/p>\n\n\n\n<p>first include the adxl library 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;}\">#include &quot;adxl345.h&quot;<\/pre><\/div>\n\n\n\n<p>Declare the acceleration data structure to handle the acceleration 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;}\">accleration_values_t accleration_values;<\/pre><\/div>\n\n\n\n<p>In the main function, initialize the sensor 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;}\">adxl345_init(accl_4g);<\/pre><\/div>\n\n\n\n<p>In the while loop, update the sensor values 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;}\">adxl345_update();\nadxl345_get_values(&amp;accleration_values);<\/pre><\/div>\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\">4. Results:<\/h2>\n\n\n\n<p>By probing the 4pins using oscilloscope or logic analyzer, we can find that we have successfully send 6 bytes of data and receive 6 bytes of data from the sensor.<\/p>\n\n\n\n<p><\/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\/2025\/01\/DS1Z_QuickPrint2.png\" alt=\"\" class=\"wp-image-3184\" srcset=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/DS1Z_QuickPrint2.png 800w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/DS1Z_QuickPrint2-300x180.png 300w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/DS1Z_QuickPrint2-768x461.png 768w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/DS1Z_QuickPrint2-750x450.png 750w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/DS1Z_QuickPrint2-400x240.png 400w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/DS1Z_QuickPrint2-250x150.png 250w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/figure><\/div>\n\n\n<p><\/p>\n\n\n\n<p>Happy coding \ud83d\ude09<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this guide, we shall cover how to transmit and receive data from a slave device connected to out STM32H5. The slave device is ADXL345 accelerometer. In this guide, we shall cover the following: 1. Configure the SPI for ADXL345: Open SPI_TX.ioc file as following: From connectivity, select the SPI and configure it as following: [&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-3177","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\/3177"}],"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=3177"}],"version-history":[{"count":1,"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=\/wp\/v2\/posts\/3177\/revisions"}],"predecessor-version":[{"id":3185,"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=\/wp\/v2\/posts\/3177\/revisions\/3185"}],"wp:attachment":[{"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3177"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3177"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3177"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}