{"id":1025,"date":"2026-05-03T17:54:49","date_gmt":"2026-05-04T00:54:49","guid":{"rendered":"https:\/\/sysprogs.com\/tutorials\/?p=1025"},"modified":"2026-08-28T11:25:07","modified_gmt":"2026-08-28T18:25:07","slug":"creating-embedded-projects-on-macos","status":"publish","type":"post","link":"https:\/\/sysprogs.com\/CodeVROOM\/tutorials\/stm32\/macos\/","title":{"rendered":"Creating Embedded Projects on MacOS"},"content":{"rendered":"<p>This tutorial shows how to use CodeVROOM to create a basic STM32 project on MacOS.<\/p>\n<p>Before you begin, install <a href=\"https:\/\/brew.sh\/\">Homebrew<\/a> and get the <strong>gcc-arm-embedded<\/strong>, <strong>ninja-build<\/strong>, <strong>cmake, openocd<\/strong> and <strong>xz<\/strong> packages.<\/p>\n<p>Then, <a href=\"https:\/\/sysprogs.com\/CodeVROOM\/download\/\">download the latest CodeVROOM<\/a> and mount the DMG file.<\/p>\n<ol>\n<li>CodeVROOM for MacOS can run both from the DMG file and the application folder. In this tutorial we will just simply run it directly:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/01-copy.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1115\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/01-copy.png\" alt=\"\" width=\"1600\" height=\"800\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/01-copy.png 1600w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/01-copy-300x150.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/01-copy-1024x512.png 1024w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/01-copy-768x384.png 768w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/01-copy-1536x768.png 1536w\" sizes=\"(max-width: 1600px) 100vw, 1600px\" \/><\/a><\/li>\n<li>Once loaded, the main window will look like this:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/newprj.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1138\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/newprj.png\" alt=\"\" width=\"3024\" height=\"1964\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/newprj.png 3024w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/newprj-300x195.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/newprj-1024x665.png 1024w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/newprj-768x499.png 768w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/newprj-1536x998.png 1536w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/newprj-2048x1330.png 2048w\" sizes=\"(max-width: 3024px) 100vw, 3024px\" \/><\/a><\/li>\n<li>Use the File-&gt;New-&gt;Project command (or the toolbar button) to start creating a new project. Select the Embedded C\/C++ Project Wizard:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/03-path.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1117\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/03-path.png\" alt=\"\" width=\"1620\" height=\"840\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/03-path.png 1620w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/03-path-300x156.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/03-path-1024x531.png 1024w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/03-path-768x398.png 768w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/03-path-1536x796.png 1536w\" sizes=\"(max-width: 1620px) 100vw, 1620px\" \/><\/a><\/li>\n<li>Proceed with the default settings on the first page:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/04-type-1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1118\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/04-type-1.png\" alt=\"\" width=\"1800\" height=\"1456\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/04-type-1.png 1800w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/04-type-1-300x243.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/04-type-1-1024x828.png 1024w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/04-type-1-768x621.png 768w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/04-type-1-1536x1242.png 1536w\" sizes=\"(max-width: 1800px) 100vw, 1800px\" \/><\/a><\/li>\n<li>The next page allows selecting a toolchain. As of v0.6, only the embedded ARM toolchain from Homebrew is supported. Select it and choose the device you would like to target:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/05-inst.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1119\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/05-inst.png\" alt=\"\" width=\"1800\" height=\"1456\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/05-inst.png 1800w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/05-inst-300x243.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/05-inst-1024x828.png 1024w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/05-inst-768x621.png 768w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/05-inst-1536x1242.png 1536w\" sizes=\"(max-width: 1800px) 100vw, 1800px\" \/><\/a><\/li>\n<li>Press the &#8220;download&#8221; button to get the device support package. Once it gets downloaded and installed, CodeVROOM will show the configuration settings for the device:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/06-options-1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1121\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/06-options-1.png\" alt=\"\" width=\"1800\" height=\"1456\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/06-options-1.png 1800w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/06-options-1-300x243.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/06-options-1-1024x828.png 1024w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/06-options-1-768x621.png 768w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/06-options-1-1536x1242.png 1536w\" sizes=\"(max-width: 1800px) 100vw, 1800px\" \/><\/a><\/li>\n<li>Proceed with the default settings and go to the next page. Select the &#8220;LEDBlink (FreeRTOS)&#8221; sample:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/07-freertos.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1122\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/07-freertos.png\" alt=\"\" width=\"1800\" height=\"1456\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/07-freertos.png 1800w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/07-freertos-300x243.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/07-freertos-1024x828.png 1024w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/07-freertos-768x621.png 768w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/07-freertos-1536x1242.png 1536w\" sizes=\"(max-width: 1800px) 100vw, 1800px\" \/><\/a><\/li>\n<li>Make sure you have OpenOCD installed. Then, select it from the list and pick your debug interface script:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/08-debug.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1123\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/08-debug.png\" alt=\"\" width=\"1800\" height=\"1456\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/08-debug.png 1800w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/08-debug-300x243.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/08-debug-1024x828.png 1024w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/08-debug-768x621.png 768w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/08-debug-1536x1242.png 1536w\" sizes=\"(max-width: 1800px) 100vw, 1800px\" \/><\/a><\/li>\n<li>Press&#8221;Test&#8221; to automatically validate that the debug settings work:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/09-test.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1125\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/09-test.png\" alt=\"\" width=\"1600\" height=\"1256\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/09-test.png 1600w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/09-test-300x236.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/09-test-1024x804.png 1024w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/09-test-768x603.png 768w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/09-test-1536x1206.png 1536w\" sizes=\"(max-width: 1600px) 100vw, 1600px\" \/><\/a><\/li>\n<li>Press &#8220;Finish&#8221; to create the project.Add a g_Stats structure with 2 int fields and update both thread to increment one field each:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/10-suggest-1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1127\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/10-suggest-1.png\" alt=\"\" width=\"3024\" height=\"1894\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/10-suggest-1.png 3024w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/10-suggest-1-300x188.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/10-suggest-1-1024x641.png 1024w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/10-suggest-1-768x481.png 768w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/10-suggest-1-1536x962.png 1536w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/10-suggest-1-2048x1283.png 2048w\" sizes=\"(max-width: 3024px) 100vw, 3024px\" \/><\/a><\/li>\n<li>Set a breakpoint on the call to HAL_GPIO_Init() and start debugging. Once the breakpoint triggers, hover the mouse over GPIO_InitStructure. You can use the context menu to quickly access various auxiliary windows, or customize the appearance of the expressions:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/11-popup.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1129\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/11-popup.png\" alt=\"\" width=\"3024\" height=\"1895\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/11-popup.png 3024w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/11-popup-300x188.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/11-popup-1024x642.png 1024w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/11-popup-768x481.png 768w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/11-popup-1536x963.png 1536w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/11-popup-2048x1283.png 2048w\" sizes=\"(max-width: 3024px) 100vw, 3024px\" \/><\/a><\/li>\n<li>Resume debugging. Hover the mouse over the global structure with counters. Note how CodeVROOM shows the values in real time without stopping the target:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/12-live-1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1130\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/12-live-1.png\" alt=\"\" width=\"3024\" height=\"1897\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/12-live-1.png 3024w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/12-live-1-300x188.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/12-live-1-1024x642.png 1024w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/12-live-1-768x482.png 768w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/12-live-1-1536x964.png 1536w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/12-live-1-2048x1285.png 2048w\" sizes=\"(max-width: 3024px) 100vw, 3024px\" \/><\/a>That said, this only works for global variables, that can be located in memory without using GDB. Any complex expressions should be added to the separate Live Watch window where they can be evaluated normally, and then monitorred.<\/li>\n<li>Use the Debug-&gt;Windows menu to see the tool windows supported by CodeVROOM:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/13-rtos.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1131\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/13-rtos.png\" alt=\"\" width=\"3024\" height=\"1964\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/13-rtos.png 3024w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/13-rtos-300x195.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/13-rtos-1024x665.png 1024w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/13-rtos-768x499.png 768w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/13-rtos-1536x998.png 1536w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/13-rtos-2048x1330.png 2048w\" sizes=\"(max-width: 3024px) 100vw, 3024px\" \/><\/a><\/li>\n<li>Use the RTOS Objects view to get a real-time view of the threads, stacks, and synchronization primitives:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/14-rtosobj.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1132\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/14-rtosobj.png\" alt=\"\" width=\"3024\" height=\"1740\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/14-rtosobj.png 3024w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/14-rtosobj-300x173.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/14-rtosobj-1024x589.png 1024w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/14-rtosobj-768x442.png 768w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/14-rtosobj-1536x884.png 1536w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/14-rtosobj-2048x1178.png 2048w\" sizes=\"(max-width: 3024px) 100vw, 3024px\" \/><\/a><\/li>\n<li>Open the regular Threads window and try searching for the function name. Note how the matches are expanded and highlighted immediately:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/15-threads.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1133\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/15-threads.png\" alt=\"\" width=\"3024\" height=\"1740\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/15-threads.png 3024w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/15-threads-300x173.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/15-threads-1024x589.png 1024w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/15-threads-768x442.png 768w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/15-threads-1536x884.png 1536w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/15-threads-2048x1178.png 2048w\" sizes=\"(max-width: 3024px) 100vw, 3024px\" \/><\/a><\/li>\n<li>Go to the Peripheral Registers window and search for IDR. Locate GPIOD-&gt;IDR and pin it for live view:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/16-live-1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1134\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/16-live-1.png\" alt=\"\" width=\"3024\" height=\"1740\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/16-live-1.png 3024w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/16-live-1-300x173.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/16-live-1-1024x589.png 1024w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/16-live-1-768x442.png 768w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/16-live-1-1536x884.png 1536w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/16-live-1-2048x1178.png 2048w\" sizes=\"(max-width: 3024px) 100vw, 3024px\" \/><\/a><\/li>\n<li>Now you can see the value of the register in real-time as the program is running:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/17-changed.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1135\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/17-changed.png\" alt=\"\" width=\"3024\" height=\"1740\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/17-changed.png 3024w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/17-changed-300x173.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/17-changed-1024x589.png 1024w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/17-changed-768x442.png 768w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/17-changed-1536x884.png 1536w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/17-changed-2048x1178.png 2048w\" sizes=\"(max-width: 3024px) 100vw, 3024px\" \/><\/a><\/li>\n<li>You can use the Properties command in the project context window to edit various properties (e.g. reference the fast semihosting framework):<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/18-props.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1136\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/18-props.png\" alt=\"\" width=\"3024\" height=\"1740\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/18-props.png 3024w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/18-props-300x173.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/18-props-1024x589.png 1024w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/18-props-768x442.png 768w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/18-props-1536x884.png 1536w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/18-props-2048x1178.png 2048w\" sizes=\"(max-width: 3024px) 100vw, 3024px\" \/><\/a><\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>This tutorial shows how to use CodeVROOM to create a basic STM32 project on MacOS. Before you begin, install Homebrew<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[64],"tags":[78,74],"_links":{"self":[{"href":"https:\/\/sysprogs.com\/tutorials\/wp-json\/wp\/v2\/posts\/1025"}],"collection":[{"href":"https:\/\/sysprogs.com\/tutorials\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sysprogs.com\/tutorials\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sysprogs.com\/tutorials\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sysprogs.com\/tutorials\/wp-json\/wp\/v2\/comments?post=1025"}],"version-history":[{"count":4,"href":"https:\/\/sysprogs.com\/tutorials\/wp-json\/wp\/v2\/posts\/1025\/revisions"}],"predecessor-version":[{"id":1139,"href":"https:\/\/sysprogs.com\/tutorials\/wp-json\/wp\/v2\/posts\/1025\/revisions\/1139"}],"wp:attachment":[{"href":"https:\/\/sysprogs.com\/tutorials\/wp-json\/wp\/v2\/media?parent=1025"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sysprogs.com\/tutorials\/wp-json\/wp\/v2\/categories?post=1025"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sysprogs.com\/tutorials\/wp-json\/wp\/v2\/tags?post=1025"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}