{"id":1810,"date":"2023-06-07T04:56:34","date_gmt":"2023-06-07T04:56:34","guid":{"rendered":"https:\/\/blog.embeddedexpert.io\/?p=1810"},"modified":"2023-06-07T04:57:08","modified_gmt":"2023-06-07T04:57:08","slug":"working-with-stm32-and-hc12-part-1-environment-setup","status":"publish","type":"post","link":"https:\/\/blog.embeddedexpert.io\/?p=1810","title":{"rendered":"Working with STM32 and HC12 Part 1: Environment Setup"},"content":{"rendered":"\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"518\" height=\"418\" src=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/06\/HC12.jpg\" alt=\"\" class=\"wp-image-1811\" srcset=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/06\/HC12.jpg 518w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/06\/HC12-300x242.jpg 300w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/06\/HC12-400x323.jpg 400w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/06\/HC12-250x202.jpg 250w\" sizes=\"(max-width: 518px) 100vw, 518px\" \/><\/figure><\/div>\n\n\n\n<p>In this guide, we shall take a look at HC-12 RF long range RF communication module.<\/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>What is HC-12.<\/li><li>Hardware setup.<\/li><li>Serial Setup.<\/li><li>LED setup.<\/li><li>Time base.<\/li><li>Code.<\/li><\/ul>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. What is HC-12:<\/h2>\n\n\n\n<p>The HC-12 is a half-duplex 20 dBm (100 mW) transmitter paired with a receiver that has -117 dBm (2\u00d710<sup>-15<\/sup>W) sensitivity at 5000 bps.<\/p>\n\n\n\n<p>Paired with an external antenna, these transceivers are capable of communicating up to and possibly slightly beyond 1 km in the open&nbsp;and are more than adequate for providing coverage throughout a typical house.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/www.allaboutcircuits.com\/uploads\/articles\/Hughes_HC12_HC12.jpg\" alt=\"\" \/><\/figure><\/div>\n\n\n\n<h5 class=\"wp-block-heading\"><em>The HC-12 circuit board. Image courtesy of&nbsp;<a href=\"https:\/\/www.seeedstudio.com\/433Mhz-Wireless-Serial-Transceiver-Module---1-Kilometer-p-1733.html\" target=\"_blank\" rel=\"noreferrer noopener\">Seeed<\/a>. This image has been digitally manipulated to enhance chip markings.<\/em><\/h5>\n\n\n\n<p><\/p>\n\n\n\n<p>The&nbsp;HC-12 circuit board is built around the STM8S003F3 microcontroller and the Si4463 transceiver.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">The Si4463 Transceiver<\/h4>\n\n\n\n<p>The Si4463 provides the wireless communication in this circuit. It has a maximum transmit power of 20 dBm (100 mW) and receive sensitivity of -129 dBm. Two 64-byte Rx and Tx FIFO memories are built into the chip along with a great many advanced features that are not implemented in the HC-12 design. See the datasheet for more information on multiband operation, frequency hopping, etc.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">The STM8S003FS Microcontroller<\/h4>\n\n\n\n<p>This is an 8-bit microcontroller with 8 kB of flash memory, 128 bytes of EEPROM, and a 10-bit ADC. It supports UART, SPI, and I\u00b2C and has multiple I\/O pins. It offers many of the same capabilities as its ATMega and XMC counterparts.&nbsp;It is programmed to control the Si4463 as well as handle the UART communication between the HC-12 and whatever it is connected to on the other end.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">The HC-12 Transceiver Module<\/h4>\n\n\n\n<p>Combined with other components, the Si4463 and STM8S003 create the HC-12 transceiver, which provides a 4-pin TTL-level UART interface (Vcc, Gnd, Tx, Rx), with a 5th pin that is used to enter &#8220;command&#8221; mode for changing the module&#8217;s configuration. The HC-12 has 100 supported channels spaced 400 kHz apart, eight transmit levels, eight supported baud rates, and three different working modes.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>The 5th pin on the HC-12 is labeled &#8220;Set&#8221; and, when driven to logic low, allows various settings to be selected on the HC-12 using AT commands sent to the &#8220;RXD&#8221; pin.<\/p>\n\n\n\n<p>The default configuration of the HC-12 is FU3\u2014on Channel 1, FU3 is a fully automatic and transparent (to other devices) setting that adapts to the transmission rate of the connected device (although 9600 baud is still required to program it in Command mode).&nbsp;<\/p>\n\n\n\n<p>Note that as the transmission rate increases, the sensitivity of the receiver decreases. You can return to the default state by sending AT+DEFAULT once in command mode.<\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table><tbody><tr><th>Serial Port Baud Rate<\/th><th>Over-the-Air Baud Rate<\/th><th>Receiver Sensitivity<\/th><\/tr><tr><td>1200 bps<\/td><td>5000 bps<\/td><td>-117 dBm<\/td><\/tr><tr><td>2400 bps<\/td><td>5000 bps<\/td><td>-117 dBm<\/td><\/tr><tr><td>4800 bps<\/td><td>15000 bps<\/td><td>-112 dBm<\/td><\/tr><tr><td>9600 bps<\/td><td>15000 bps<\/td><td>-112 dBm<\/td><\/tr><tr><td>19200 bps<\/td><td>58000 bps<\/td><td>-107 dBm<\/td><\/tr><tr><td>38400 bps<\/td><td>58000 bps<\/td><td>-107 dBm<\/td><\/tr><tr><td>57600 bps<\/td><td>236000 bps<\/td><td>-100 dBm<\/td><\/tr><tr><td>115200 bps<\/td><td>236000 bps<\/td><td>-100 dBm<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2. Hardware setup:<\/h2>\n\n\n\n<p>In this guide, we need two STM32F4 and two HC-12 modules in order to make communication between both of the module:<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>The connection 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=\"901\" src=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/06\/Screenshot-2023-06-07-at-7.08.28-AM-1024x901.png\" alt=\"\" class=\"wp-image-1812\" srcset=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/06\/Screenshot-2023-06-07-at-7.08.28-AM-1024x901.png 1024w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/06\/Screenshot-2023-06-07-at-7.08.28-AM-300x264.png 300w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/06\/Screenshot-2023-06-07-at-7.08.28-AM-768x676.png 768w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/06\/Screenshot-2023-06-07-at-7.08.28-AM-1536x1352.png 1536w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/06\/Screenshot-2023-06-07-at-7.08.28-AM-1150x1012.png 1150w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/06\/Screenshot-2023-06-07-at-7.08.28-AM-750x660.png 750w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/06\/Screenshot-2023-06-07-at-7.08.28-AM-400x352.png 400w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/06\/Screenshot-2023-06-07-at-7.08.28-AM-250x220.png 250w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/06\/Screenshot-2023-06-07-at-7.08.28-AM.png 1954w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table><tbody><tr><td>STM32F44<\/td><td>HC-12 Module<\/td><\/tr><tr><td>5V<\/td><td>Vcc<\/td><\/tr><tr><td>GND<\/td><td>GND<\/td><\/tr><tr><td>PA9 (UART1_TX)<\/td><td>RX<\/td><\/tr><tr><td>PA10(UART1_RX)<\/td><td>TX<\/td><\/tr><tr><td>PA0<\/td><td>Set<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Since this guide will use two Nucleo boards, we shall use the built-in LED to be controlled remotely.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">3. Serial Setup:<\/h2>\n\n\n\n<p>We start off by creating new source and header file with name of hc_12_uart.c and hc_12_uart.h respectively.<\/p>\n\n\n\n<p>Te utilitized UART is UART1 which will receive data using interrupt:<\/p>\n\n\n\n<p>To see how to setup UART from scratch and everything related to it, please refer to <a href=\"https:\/\/blog.embeddedexpert.io\/?p=347\" data-type=\"URL\" data-id=\"https:\/\/blog.embeddedexpert.io\/?p=347\" target=\"_blank\" rel=\"noreferrer noopener\">this<\/a> topic.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Within the header file:<\/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;}\">#ifndef HC_12_UART_H_\n#define HC_12_UART_H_\n\n#include &quot;stdint.h&quot;\n\nvoid hc12_uart_init(uint32_t baud,uint32_t freq);\nvoid hc12_write_char(unsigned char ch);\n\n\n#endif \/* HC_12_UART_H_ *\/\n<\/pre><\/div>\n\n\n\n<p>Within the source file:<\/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 &lt;hc_12_uart.h&gt;\n#include &quot;stm32f4xx.h&quot;\n\n\n#define AF07 0x07\n\n\nstatic void uart_set_baudrate(USART_TypeDef *USARTx, uint32_t PeriphClk,  uint32_t BaudRate);\n\n\nvoid hc12_uart_init(uint32_t baud,uint32_t freq)\n{\n\t\/*Enable clock access to GPIOA and USART1*\/\n\tRCC-&gt;APB2ENR|=RCC_APB2ENR_USART1EN;\n\tRCC-&gt;AHB1ENR|=RCC_AHB1ENR_GPIOAEN;\n\t\/*Configure the GPIO for UART Mode*\/\n\tGPIOA-&gt;MODER|=GPIO_MODER_MODE9_1;\n\tGPIOA-&gt;MODER&amp;=~GPIO_MODER_MODE9_0;\n\tGPIOA-&gt;MODER|=GPIO_MODER_MODE10_1;\n\tGPIOA-&gt;MODER&amp;=~GPIO_MODER_MODE10_0;\n\tGPIOA-&gt;AFR[1]|=(AF07&lt;&lt;GPIO_AFRH_AFSEL9_Pos)|(AF07&lt;&lt;GPIO_AFRH_AFSEL10_Pos); \/\/ALT7 for UART1 (PA9 and PA10)\n\t\/*Configure UART*\/\n\tuart_set_baudrate(USART1,freq,baud);\n\tUSART1-&gt;CR1|=USART_CR1_TE|USART_CR1_RE;\n\tUSART1-&gt;CR1|=USART_CR1_RXNEIE;\n\tNVIC_EnableIRQ(USART1_IRQn);\n\tUSART1-&gt;CR1|=USART_CR1_UE;\n}\n\nstatic uint16_t compute_uart_bd(uint32_t PeriphClk, uint32_t BaudRate)\n{\n\treturn ((PeriphClk + (BaudRate\/2U))\/BaudRate);\n}\n\nstatic void uart_set_baudrate(USART_TypeDef *USARTx, uint32_t PeriphClk,  uint32_t BaudRate)\n{\n\tUSARTx-&gt;BRR =  compute_uart_bd(PeriphClk,BaudRate);\n}\n\n\nvoid hc12_write_char(unsigned char ch)\n{\n\t\/*Make sure the transmit data register is empty*\/\n\twhile(!(USART1-&gt;SR &amp; USART_SR_TXE)){}\n\n\t\/*Write to transmit data register*\/\n\tUSART1-&gt;DR  =  (ch &amp; 0xFF);\n}\n\n<\/pre><\/div>\n\n\n\n<p>The interrupt handler shall be handled in part 2.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">4. LED setup:<\/h2>\n\n\n\n<p>Since the built-in LED is connected to PA5, we need to configure PA5 as output:<\/p>\n\n\n\n<p>For more details, please refer to <a href=\"https:\/\/blog.embeddedexpert.io\/?p=246\" data-type=\"URL\" data-id=\"https:\/\/blog.embeddedexpert.io\/?p=246\" target=\"_blank\" rel=\"noreferrer noopener\">this<\/a> topic.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>create new source and header file with name of led.c and led.h respectively.<\/p>\n\n\n\n<p>Within header file:<\/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;}\">#ifndef LED_H_\n#define LED_H_\n\nvoid led_init(void);\nvoid led_on(void);\nvoid led_off(void);\nvoid led_toggle(void);\n\n<\/pre><\/div>\n\n\n\n<p>Within source file:<\/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;led.h&quot;\n#include &quot;stm32f4xx.h&quot;\n\n\nvoid led_init(void)\n{\n\tRCC-&gt;AHB1ENR|=RCC_AHB1ENR_GPIOAEN;\n\tGPIOA-&gt;MODER|=GPIO_MODER_MODE5_0;\n\tGPIOA-&gt;MODER&amp;=~GPIO_MODER_MODE5_1;\n\n}\n\nvoid led_on(void)\n{\n\tGPIOA-&gt;BSRR=GPIO_BSRR_BS5;\n}\n\nvoid led_off(void)\n{\n\tGPIOA-&gt;BSRR=GPIO_BSRR_BR5;\n}\n\nvoid led_toggle(void)\n{\n\tGPIOA-&gt;ODR^=GPIO_ODR_OD5;\n}\n<\/pre><\/div>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">5. Time Base setup:<\/h2>\n\n\n\n<p>To see how to implement time base from scratch, please refer to <a rel=\"noreferrer noopener\" href=\"https:\/\/blog.embeddedexpert.io\/?p=1644\" data-type=\"URL\" data-id=\"https:\/\/blog.embeddedexpert.io\/?p=1644\" target=\"_blank\">this<\/a> topic.<\/p>\n\n\n\n<p>Within the header file:<\/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;}\">#ifndef TIME_BASE_H_\n#define TIME_BASE_H_\n\n#include &quot;stdint.h&quot;\n\nvoid Ticks_Init(uint32_t freq);\nuint32_t get_Ticks();\nvoid delay(uint32_t delay_ms);\n\n<\/pre><\/div>\n\n\n\n<p>Source code:<\/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;time_base.h&quot;\n\n#include &quot;stm32f4xx.h&quot;\n\n\nvolatile uint32_t current_ticks;\n\nvoid Ticks_Init(uint32_t freq)\n{\n\t\/*Load the SysTick value to be the core frequency over 1000\n\t *\n\t * Since th core frequency is in MHz, dividing it by 1000 will get 1ms period\n\t * *\/\n\tSysTick-&gt;LOAD=(freq\/1000)-1;\n\n\t\/*Set the source to be internal core clock*\/\n\tSysTick-&gt;CTRL=(1&lt;&lt;SysTick_CTRL_CLKSOURCE_Pos);\n\n\t\/*Enable The interrupt *\/\n\n\tSysTick-&gt;CTRL|=(1&lt;&lt;SysTick_CTRL_TICKINT_Pos);\n\n\t\/*Enable Systick Interrupt in NIVC*\/\n\n\tNVIC_EnableIRQ(SysTick_IRQn);\n\n\t\/*Enable Systick*\/\n\tSysTick-&gt;CTRL|=(1&lt;&lt;SysTick_CTRL_ENABLE_Pos);\n\n\n}\n\nvoid SysTick_Handler()\n{\n\t\/*Increment the counter*\/\n\tcurrent_ticks++;\n}\n\nuint32_t get_Ticks()\n{\n\t\/*Return the counter value*\/\n\treturn current_ticks;\n}\n\n\/*Spin lock the CPU to force delay*\/\nvoid delay(uint32_t delay_ms)\n{\n\n\tuint32_t ticks_start=get_Ticks();\n\n\twhile(get_Ticks()-ticks_start&lt;delay_ms);\n}\n<\/pre><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">6. Code:<\/h2>\n\n\n\n<p>You may download the environment from here:<\/p>\n\n\n\n<div class=\"wp-block-file\"><a href=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/06\/HC-12_STM32.zip\">HC-12_STM32<\/a><a href=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/06\/HC-12_STM32.zip\" class=\"wp-block-file__button\" download>Download<\/a><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p>In part 2, we shall initialize the HC-12 and start controlling the LED.<\/p>\n\n\n\n<p>Stay tuned.<\/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 HC-12 RF long range RF communication module. In this guide, we shall cover the following: What is HC-12. Hardware setup. Serial Setup. LED setup. Time base. Code. 1. What is HC-12: The HC-12 is a half-duplex 20 dBm (100 mW) transmitter paired with a receiver that [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1810","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=\/wp\/v2\/posts\/1810"}],"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=1810"}],"version-history":[{"count":2,"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=\/wp\/v2\/posts\/1810\/revisions"}],"predecessor-version":[{"id":1816,"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=\/wp\/v2\/posts\/1810\/revisions\/1816"}],"wp:attachment":[{"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1810"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1810"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1810"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}