{"id":1766,"date":"2025-09-25T00:00:00","date_gmt":"2025-09-24T15:00:00","guid":{"rendered":"https:\/\/twarelab.com\/?p=1766"},"modified":"2025-09-22T09:51:43","modified_gmt":"2025-09-22T00:51:43","slug":"stm32f4c-project-tutorial-step-1","status":"publish","type":"post","link":"https:\/\/twarelab.com\/en\/blog\/stm32f4c-project-tutorial-step-1\/","title":{"rendered":"[STM32F4]C++ \ud504\ub85c\uc81d\ud2b8 \ud29c\ud1a0\ub9ac\uc5bc &#8211; Step 1"},"content":{"rendered":"\n<p>STM32F4 \ubcf4\ub4dc\uc5d0\uc11c C++ \uae30\ubc18 \ud504\ub85c\uc81d\ud2b8\ub97c \uc2dc\uc791\ud560 \ub54c \ud544\uc694\ud55c \ucd08\uae30 \uc138\ud305 \uacfc\uc815\uc744 \uc815\ub9ac\ud574 \ubcf4\uc558\uc2b5\ub2c8\ub2e4. \uc774\ubc88 \ub2e8\uacc4\uc5d0\uc11c\ub294 <strong>\ud504\ub85c\uc81d\ud2b8 \uc0dd\uc131 \u2192 \uae30\ubcf8 \ud658\uacbd \uc124\uc815 \u2192 ConsoleTask \uad6c\uc131 \u2192 \ube4c\ub4dc \ubc0f \ub514\ubc84\uae45<\/strong>\uae4c\uc9c0\uc758 \ud750\ub984\uc744 \uc124\uba85\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\uc791\uc5c5 \ubc94\uc704<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\uc774 \uae00\uc5d0\uc11c\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \ud56d\ubaa9\uc744 \ub2e4\ub8f9\ub2c8\ub2e4.\n<ul class=\"wp-block-list\">\n<li>STM32CubeIDE\ub97c \uc774\uc6a9\ud55c \ud504\ub85c\uc81d\ud2b8 \uc0dd\uc131<\/li>\n\n\n\n<li>Clock, Timer, Port \ub4f1 \ud544\uc218 Configuration<\/li>\n\n\n\n<li>ConsoleTask \uc124\uc815 \ubc0f \ucf54\ub4dc \uc801\uc6a9<\/li>\n\n\n\n<li>\ube4c\ub4dc \ud6c4 stlink \ub2e4\uc6b4\ub85c\ub4dc\uc640 Putty\ub97c \ud1b5\ud55c \uba54\uc2dc\uc9c0 \ud655\uc778<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">1. Project \uc0dd\uc131(\uc790\ub3d9 Pin \ud560\ub2f9)<\/h2>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>STM32CubeMX\ub85c \ubbf8\ub9ac \uc791\uc131\ud574 \ub454 .ioc \ud30c\uc77c\uc744 \uc774\uc6a9\ud558\uba74 \ud540\uacfc \uae30\ubcf8 \uc124\uc815\uc774 \uc790\ub3d9\uc73c\ub85c \ubc18\uc601\ub429\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\uc608\uc81c .ioc \ud30c\uc77c\uc744 \uc0ac\uc6a9\ud558\ub824\uba74 Download \uba54\ub274\uc5d0\uc11c &#8220;TW100PCTest.ioc&#8221;\ub97c \uc774\uc6a9\ud558\uba74 \ub429\ub2c8\ub2e4.<\/p>\n<\/blockquote>\n\n\n\n<p>STM32CubeIDE\uc5d0\uc11c \uc0c8\ub85c\uc6b4 \ud504\ub85c\uc81d\ud2b8\ub97c \ub9cc\ub4e4 \ub54c <strong>\u201cSTM Project from Existing STM32CubeMX Configuration File(.ioc)\u201d<\/strong> \uba54\ub274\ub97c \uc120\ud0dd\ud558\uba74 \ub429\ub2c8\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/paper-attachments.dropboxusercontent.com\/s_E4C0B147A39C8DFFA0D97DE0BFC2DE4C647B4B1AA6F0B44D9F26A10D54320634_1758160168988_image.png\" alt=\"\"\/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\uc6d0\ud558\ub294 Project Name\uc744 \uc785\ub825 (\uc608: TW100PCTest)<\/li>\n\n\n\n<li>Targeted Language\ub97c <strong>C++<\/strong>\ub85c \uc9c0\uc815 \u2192 \uc774 \ub2e8\uacc4\uac00 \uc911\uc694\ud569\ub2c8\ub2e4. \uae30\ubcf8\uac12\uc740 C \uc5b8\uc5b4\uc774\uae30 \ub54c\ubb38\uc5d0 \ubc18\ub4dc\uc2dc C++\ub85c \ubc14\uafd4\uc918\uc57c \uc774\ud6c4 ConsoleTask \ucf54\ub4dc\ub97c \uc6d0\ud65c\ud788 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/paper-attachments.dropboxusercontent.com\/s_E4C0B147A39C8DFFA0D97DE0BFC2DE4C647B4B1AA6F0B44D9F26A10D54320634_1758160444983_image.png\" alt=\"\" width=\"307\" height=\"365\"\/><\/figure>\n<\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">2. \uae30\ubcf8 Configuration \uc0b4\ud3b4\ubcf4\uae30<\/h2>\n\n\n\n<p><strong>Clock<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>HSE: 12MHz (\uc678\ubd80 \ud074\ub7ed)<\/li>\n\n\n\n<li>PLL: 168MHz (\uba54\uc778 \uc2dc\uc2a4\ud15c \ud074\ub7ed)<\/li>\n\n\n\n<li>LSI: 32kHz (RTC\uc6a9 \ub0b4\ubd80 \ud074\ub7ed)<\/li>\n<\/ul>\n\n\n\n<p><strong>Driver Selector<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>I2C, RTC \u2192 HAL<\/li>\n\n\n\n<li>\ub098\uba38\uc9c0 \u2192 LL<\/li>\n\n\n\n<li>\uc870\ud569\uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4.<\/li>\n<\/ul>\n\n\n\n<p>\uc989, <strong>\uc2dc\uac04 \uad00\ub9ac\ub098 \ud1b5\uc2e0 \uad00\ub828\uc740 HAL\ub85c \uac04\ub2e8\ud788<\/strong>, \uadf8 \uc678\uc5d0\ub294 <strong>LL\ub85c \uc131\ub2a5 \ucd5c\uc801\ud654<\/strong>\ub97c \ub178\ub9ac\ub294 \ubc29\uc2dd\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">3. ConsoleTask \uad6c\uc131<\/h2>\n\n\n\n<p>\uac1c\ubc1c\ud560 \ub54c \ubc18\ub4dc\uc2dc \ud544\uc694\ud55c \uac83\uc774 \ub514\ubc84\uae45 \uba54\uc2dc\uc9c0 \ucd9c\ub825\uc785\ub2c8\ub2e4. \uc774\ubc88 \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c\ub294 USART6\uc744 \ud1b5\ud574 Console \uba54\uc2dc\uc9c0\ub97c \ubcf4\ub0b4\ub3c4\ub85d \uc124\uc815\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>main.c \u2192 main.cpp \ub85c \ubcc0\uacbd (C++ \ucf54\ub4dc\ub85c \uc804\ud658)<\/li>\n\n\n\n<li>stm32f4xx_it.c \u2192 stm32f4xx_it.cpp \ub85c \ubcc0\uacbd (\uc778\ud130\ub7fd\ud2b8 \ucf54\ub4dc\ub3c4 C++\ud654)<\/li>\n\n\n\n<li>\ud504\ub85c\uc81d\ud2b8 \ub0b4\uc5d0 Libraries \ud3f4\ub354 \uc0dd\uc131 \ud6c4, twlabcpp-stm32f4-base \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \ucd94\uac00<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/paper-attachments.dropboxusercontent.com\/s_E4C0B147A39C8DFFA0D97DE0BFC2DE4C647B4B1AA6F0B44D9F26A10D54320634_1758168260677_image.png\" alt=\"\" width=\"240\" height=\"397\"\/><\/figure>\n<\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">4. main.cpp \ucf54\ub4dc \uc801\uc6a9<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u201c<strong>ConsoleTask.h\u201d \uc640 ConsoleTask \uac1d\uccb4 \ucd94\uac00<\/strong><\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"cpp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/* Private includes ----------------------------------------------------------*\/\n\/* USER CODE BEGIN Includes *\/\n#include &lt;ConsoleTask.h>\n\/* USER CODE END Includes *\/\n...\n\/* USER CODE BEGIN PV *\/\n\nConsoleTask CTask;\n__attribute__ ((section(\".ccmram\"))) volatile uint8_t consoleBuf[2048];\n\n...<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>ConsoleTask \uac1d\uccb4 \ucd08\uae30\ud654 \ud568\uc218 \uc815\uc758<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\ucd08\uae30\ud654 \ud568\uc218\ub97c \ubcc4\ub3c4\ub85c \uc815\uc758\ud558\uace0 implementation\ubb38\uc740 main.cpp \ub0b4\uc5d0 \/* USER CODE \u2026 *\/ \ube14\ub85d \ub0b4\uc5d0 \ub454\ub2e4.<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"cpp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/* Private function prototypes -----------------------------------------------*\/\nvoid SystemClock_Config(void);\nstatic void MX_GPIO_Init(void);\nstatic void MX_DMA_Init(void);\nstatic void MX_TIM2_Init(void);\nstatic void MX_SPI1_Init(void);\nstatic void MX_USART6_UART_Init(void);\nstatic void MX_I2C3_Init(void);\nstatic void MX_RTC_Init(void);\n\/* USER CODE BEGIN PFP *\/\nvoid InitConsoleTask(void);\n...\n...\n\/* USER CODE BEGIN 4 *\/\n\n\/*\n *\n *\/\nvoid InitConsoleTask(void)\n{\n          CTask = ConsoleTask(USART6, DMA2, LL_DMA_STREAM_6, DMA2, LL_DMA_STREAM_1);\n          CTask.setBufPtr((uint8_t *)consoleBuf);\n\n          CTask.uart.DMARxEnable();\n          LL_USART_EnableIT_IDLE(USART6);\n\n          CTask.PRINTF((char *)\"\\r\\n\\r\\n\");\n          CTask.PRINTF((char *)\"=====================================\\r\\n\");\n          CTask.PRINTF((char *)\"Hello. This is TW100PCTest Application\\r\\n\");\n          CTask.PRINTF((char *)\"\\r\\nBuild Date: %s, %s\\r\\n\", __DATE__, __TIME__);\n          CTask.PRINTF((char *)\"=====================================\\r\\n\");\n          CTask.flushTxBuf();\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>main() \ud568\uc218\ub0b4\uc5d0 \uc801\uc6a9<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>MX_GPIO_Init(), MX_DMA_Init() \ub4f1 CubeMX \uc790\ub3d9 \ucd08\uae30\ud654 \ud568\uc218 \ub4a4\uc5d0 InitConsoleTask(); \ucd94\uac00<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"cpp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">  \/* Initialize all configured peripherals *\/\n  MX_GPIO_Init();\n  MX_DMA_Init();\n  MX_TIM2_Init();\n  MX_SPI1_Init();\n  MX_USART6_UART_Init();\n  MX_I2C3_Init();\n  MX_RTC_Init();\n  \/* USER CODE BEGIN 2 *\/\n  InitConsoleTask();\n  \/* USER CODE END 2 *\/\n<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>while \ub8e8\ud504 \uc548\uc5d0\uc11c CTask.run(); \ud638\ucd9c \u2192 \uc8fc\uae30\uc801\uc73c\ub85c \uba54\uc2dc\uc9c0 \ucc98\ub9ac\ub97c \uc2e4\ud589<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"cpp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">  \/* Infinite loop *\/\n  \/* USER CODE BEGIN WHILE *\/\n  while (1)\n  {\n          CTask.run();\n    \/* USER CODE END WHILE *\/\n\n    \/* USER CODE BEGIN 3 *\/\n  }\n  \/* USER CODE END 3 *\/<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">5. \uc778\ud130\ub7fd\ud2b8 \ud578\ub4e4\ub7ec \uc218\uc815<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u201cConsoleTask.h\u201d \ucd94\uac00 \ubc0f ConsoleTask \uac1d\uccb4\ub97c extern\uc73c\ub85c \ucd94\uac00\ud55c\ub2e4.<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"cpp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/* Includes ------------------------------------------------------------------*\/\n#include \"main.h\"\n#include \"stm32f4xx_it.h\"\n\/* Private includes ----------------------------------------------------------*\/\n\/* USER CODE BEGIN Includes *\/\n#include &lt;ConsoleTask.h>\n\/* USER CODE END Includes *\/\n...\n\/* External variables --------------------------------------------------------*\/\n\n\/* USER CODE BEGIN EV *\/\nextern ConsoleTask CTask;\n\/* USER CODE END EV *\/\n<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>DMA\uc640 USART6 \uc778\ud130\ub7fd\ud2b8 \ubc1c\uc0dd \uc2dc ConsoleTask\uc758 \ud578\ub4e4\ub7ec\ub85c \uc81c\uc5b4\ub97c \ub118\uaca8\uc90d\ub2c8\ub2e4.<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"cpp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/**\n  * @brief This function handles DMA2 stream1 global interrupt.\n  *\/\nvoid DMA2_Stream1_IRQHandler(void)\n{\n  \/* USER CODE BEGIN DMA2_Stream1_IRQn 0 *\/\n        CTask.uart.RXDMAInterruptHandler();\n  \/* USER CODE END DMA2_Stream1_IRQn 0 *\/\n  \/* USER CODE BEGIN DMA2_Stream1_IRQn 1 *\/\n\n  \/* USER CODE END DMA2_Stream1_IRQn 1 *\/\n}\n...\n\/**\n  * @brief This function handles DMA2 stream6 global interrupt.\n  *\/\nvoid DMA2_Stream6_IRQHandler(void)\n{\n  \/* USER CODE BEGIN DMA2_Stream6_IRQn 0 *\/\n        CTask.uart.TXDMAInterruptHandler();\n  \/* USER CODE END DMA2_Stream6_IRQn 0 *\/\n  \/* USER CODE BEGIN DMA2_Stream6_IRQn 1 *\/\n\n  \/* USER CODE END DMA2_Stream6_IRQn 1 *\/\n}\n...\n\/**\n  * @brief This function handles USART6 global interrupt.\n  *\/\nvoid USART6_IRQHandler(void)\n{\n  \/* USER CODE BEGIN USART6_IRQn 0 *\/\n        CTask.uart.IDLEInterruptHandler();\n  \/* USER CODE END USART6_IRQn 0 *\/\n  \/* USER CODE BEGIN USART6_IRQn 1 *\/\n\n  \/* USER CODE END USART6_IRQn 1 *\/\n}\n<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">6. \ube4c\ub4dc \ubc0f \uc2e4\ud589<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Build Project \uc2e4\ud589 \u2192 .hex\uc640 .bin \ud30c\uc77c \uc0dd\uc131 \ud655\uc778<\/li>\n\n\n\n<li>stlink\ub85c \ubcf4\ub4dc\uc5d0 \ub2e4\uc6b4\ub85c\ub4dc<\/li>\n\n\n\n<li>PC\uc5d0\uc11c Putty \uc2e4\ud589 \ud6c4 <strong>2 Mbps baudrate<\/strong>\ub85c \uc5f0\uacb0<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/paper-attachments.dropboxusercontent.com\/s_E4C0B147A39C8DFFA0D97DE0BFC2DE4C647B4B1AA6F0B44D9F26A10D54320634_1758170506859_image.png\" alt=\"\" width=\"452\" height=\"407\"\/><\/figure>\n<\/div>\n\n\n<ul class=\"wp-block-list\">\n<li>Reset \ubc84\ud2bc \ud074\ub9ad \u2192 \uc2dc\uc791 \uba54\uc2dc\uc9c0\uac00 \uc815\uc0c1\uc801\uc73c\ub85c \ucd9c\ub825\ub428\uc744 \ud655\uc778<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/paper-attachments.dropboxusercontent.com\/s_E4C0B147A39C8DFFA0D97DE0BFC2DE4C647B4B1AA6F0B44D9F26A10D54320634_1758170469598_image.png\" alt=\"\" width=\"619\" height=\"391\"\/><\/figure>\n<\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ub9c8\uce58\uba70<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\uc774\ubc88 \ub2e8\uacc4\uc5d0\uc11c\ub294 STM32F4 \ubcf4\ub4dc\uc5d0\uc11c <strong>C++ \uae30\ubc18 \ud504\ub85c\uc81d\ud2b8 \ud658\uacbd\uc744 \uad6c\ucd95\ud558\uace0 ConsoleTask\ub97c \ud1b5\ud55c \uae30\ubcf8 \ub514\ubc84\uadf8 \ucd9c\ub825<\/strong>\uae4c\uc9c0 \ud655\uc778\ud588\uc2b5\ub2c8\ub2e4.<\/li>\n\n\n\n<li>\ub2e4\uc74c \ub2e8\uacc4\ubd80\ud130\ub294 \uc774 \ud658\uacbd \uc704\uc5d0\uc11c \uc2e4\uc81c \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uae30\ub2a5\uc744 \ud655\uc7a5\ud574 \ub098\uac08 \uc218 \uc788\uc2b5\ub2c8\ub2e4<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>STM32F4 \ubcf4\ub4dc\uc5d0\uc11c C++ \uae30\ubc18 \ud504\ub85c\uc81d\ud2b8\ub97c \uc2dc\uc791\ud560 \ub54c \ud544\uc694\ud55c \ucd08\uae30 \uc138\ud305 \uacfc\uc815\uc744 \uc815\ub9ac\ud574 \ubcf4\uc558\uc2b5\ub2c8\ub2e4. \uc774\ubc88 \ub2e8\uacc4\uc5d0\uc11c\ub294 \ud504\ub85c\uc81d\ud2b8 \uc0dd\uc131 \u2192 \uae30\ubcf8 \ud658\uacbd \uc124\uc815 \u2192 ConsoleTask \uad6c\uc131 \u2192 \ube4c\ub4dc \ubc0f \ub514\ubc84\uae45\uae4c\uc9c0\uc758 \ud750\ub984\uc744 \uc124\uba85\ud569\ub2c8\ub2e4. \uc791\uc5c5 \ubc94\uc704 1. Project \uc0dd\uc131(\uc790\ub3d9 Pin \ud560\ub2f9) STM32CubeMX\ub85c \ubbf8\ub9ac \uc791\uc131\ud574 \ub454 .ioc \ud30c\uc77c\uc744 \uc774\uc6a9\ud558\uba74 \ud540\uacfc \uae30\ubcf8 \uc124\uc815\uc774 \uc790\ub3d9\uc73c\ub85c \ubc18\uc601\ub429\ub2c8\ub2e4. \uc608\uc81c [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":true,"template":"","format":"standard","meta":{"_themeisle_gutenberg_block_has_review":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1,13,12],"tags":[87,43,76,88,42,85,89],"class_list":["post-1766","post","type-post","status-publish","format-standard","hentry","category-blog","category-en","category-ko","tag-c","tag-cpp","tag-dma","tag-firmware","tag-stm32f4","tag-tutorial","tag-usart"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/twarelab.com\/en\/wp-json\/wp\/v2\/posts\/1766","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/twarelab.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/twarelab.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/twarelab.com\/en\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/twarelab.com\/en\/wp-json\/wp\/v2\/comments?post=1766"}],"version-history":[{"count":10,"href":"https:\/\/twarelab.com\/en\/wp-json\/wp\/v2\/posts\/1766\/revisions"}],"predecessor-version":[{"id":1800,"href":"https:\/\/twarelab.com\/en\/wp-json\/wp\/v2\/posts\/1766\/revisions\/1800"}],"wp:attachment":[{"href":"https:\/\/twarelab.com\/en\/wp-json\/wp\/v2\/media?parent=1766"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/twarelab.com\/en\/wp-json\/wp\/v2\/categories?post=1766"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/twarelab.com\/en\/wp-json\/wp\/v2\/tags?post=1766"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}