{"id":4157,"date":"2023-07-14T20:00:00","date_gmt":"2023-07-14T18:00:00","guid":{"rendered":"https:\/\/msalamon.pl\/?p=4157"},"modified":"2025-12-27T15:37:19","modified_gmt":"2025-12-27T14:37:19","slug":"how-to-create-an-stm32-project-for-register-level-programming-stm32-on-registers-1","status":"publish","type":"post","link":"https:\/\/msalamon.pl\/en\/how-to-create-an-stm32-project-for-register-level-programming-stm32-on-registers-1\/","title":{"rendered":"How to Create an STM32 Project for Register-Level Programming? | STM32 on Registers #1"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\">How to create an STM32 project for register-level programming?<\/h1>\n\n\n\n<p>For a very long time, readers and course participants have been asking me: \u201cMATI! When will you finally do something on STM32, but at the register level?\u201d. I usually replied: \u201cwhen the time comes\u201d, but I didn\u2019t know myself when that would happen.<\/p>\n\n\n\n<p>Until now \ud83d\ude0e We\u2019re officially starting a series of posts dedicated to programming STM32 at the register level \ud83e\udd73<\/p>\n\n\n\n<p>It will be a dozen or so posts covering the basics. Perfect as a starting point for anyone who wants to begin their STM32 journey without HAL and without Arduino.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">STM32 Register-Level Series on YouTube<\/h2>\n\n\n\n<p>These posts are created in parallel with a series on my YouTube channel on the same topic. If you prefer the video version, I invite you there. These articles are a summary of what I show on YouTube.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Jak utworzy\u0107 projekt na STM32 pod pisanie na rejestrach? | STM32 na Rejestrach #1\" width=\"750\" height=\"422\" src=\"https:\/\/www.youtube.com\/embed\/ShCWoicHkKM?list=PLMr8JGWm4y7_l6qIVBSePaSQ0vuLWMfGp\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p><a href=\"https:\/\/www.youtube.com\/watch?v=ShCWoicHkKM&amp;list=PLMr8JGWm4y7_l6qIVBSePaSQ0vuLWMfGp\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><strong>Link to the YouTube Playlist<\/strong><\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">STM32 NUCLEO-C031C6 Platform<\/h2>\n\n\n\n<p>We will be programming hardware, so naturally we need to have it. For this series I chose an <strong>STM32 from the C0 family<\/strong>. It was released at the beginning of 2023. It was created with the idea of being a simple replacement for 8-bit microcontrollers.<\/p>\n\n\n\n<p>It is <strong>very minimalist<\/strong> and \u201cpoor\u201d in peripherals, as befits an STM32. At the same time, <strong>these chips are uncomplicated<\/strong>, which will make it easier for us to read the documentation and take the first steps.<\/p>\n\n\n\n<p>I chose specifically the <strong>STM32C031C6T6<\/strong>. Why? Because we have a <strong>dedicated board <a href=\"https:\/\/sklep.msalamon.pl\/produkt\/stm32-nucleo-c031c6-nucleo-32-z-stm32c031c6t6-arm-cortex-m0\/?utm_source=blog&amp;utm_medium=article&amp;utm_campaign=stm32narejestrach&amp;utm_content=Text\" target=\"_blank\" rel=\"noreferrer noopener\">NUCLEO-C031C6<\/a><\/strong> for it, which you can buy, among other places, in my store.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/sklep.msalamon.pl\/produkt\/stm32-nucleo-c031c6-nucleo-32-z-stm32c031c6t6-arm-cortex-m0?utm_source=blog&amp;utm_medium=article&amp;utm_campaign=stm32narejestrach&amp;utm_content=banner\" target=\"_blank\" rel=\"noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"341\" src=\"https:\/\/msalamon.pl\/wp-content\/uploads\/2023\/07\/stm32C031C6_BANER-1024x341.jpg\" alt=\"\" class=\"wp-image-2351\" srcset=\"https:\/\/msalamon.pl\/wp-content\/uploads\/2023\/07\/stm32C031C6_BANER-1024x341.jpg 1024w, https:\/\/msalamon.pl\/wp-content\/uploads\/2023\/07\/stm32C031C6_BANER-300x100.jpg 300w, https:\/\/msalamon.pl\/wp-content\/uploads\/2023\/07\/stm32C031C6_BANER-768x256.jpg 768w, https:\/\/msalamon.pl\/wp-content\/uploads\/2023\/07\/stm32C031C6_BANER.jpg 1200w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p>It\u2019s a ready-made platform with a microcontroller that is <strong>ready to work right away<\/strong>. What about the programmer? Exactly. Nucleo kits are known for having a <strong>built-in <a href=\"https:\/\/sklep.msalamon.pl\/?s=st-link&amp;post_type=product&amp;dgwt_wcas=1&amp;utm_source=blog&amp;utm_medium=article&amp;utm_campaign=stm32narejestrach&amp;utm_content=Text\" target=\"_blank\" rel=\"noreferrer noopener\">ST-Link programmer and debugger<\/a><\/strong>. That\u2019s the case here as well. It\u2019s properly connected and ready to go. Just plug in a USB cable (micro, in our case) and the board is ready to run.<\/p>\n\n\n\n<p>Besides the programmer, we will also find connectors here. We have <strong>two types of connectors<\/strong>:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Compatible with A<a href=\"https:\/\/sklep.msalamon.pl\/produkt\/arduino-uno-rev3-a000066\/?utm_source=blog&amp;utm_medium=article&amp;utm_campaign=stm32narejestrach&amp;utm_content=Text\" target=\"_blank\" rel=\"noreferrer noopener\">rduino Uno Rev 3<\/a><\/strong>. A standard in today\u2019s world. Shields designed for Arduino fit here.<\/li>\n\n\n\n<li><strong>ST Morpho<\/strong>. Two large connectors that expose all microcontroller pins on the Nucleo.<\/li>\n<\/ol>\n\n\n\n<p>We also have two buttons available: a <strong>user button<\/strong> connected to one of the pins, and a <strong>microcontroller Reset<\/strong>.<\/p>\n\n\n\n<p>Near the buttons there is always at least <strong>one LED<\/strong> that is also available for our use. On our Nucleo it is labeled as<strong> LD4<\/strong>.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/msalamon.pl\/wp-content\/uploads\/2023\/07\/stm_grafika-1024x683.jpg\" alt=\"\" class=\"wp-image-2352\" srcset=\"https:\/\/msalamon.pl\/wp-content\/uploads\/2023\/07\/stm_grafika-1024x683.jpg 1024w, https:\/\/msalamon.pl\/wp-content\/uploads\/2023\/07\/stm_grafika-300x200.jpg 300w, https:\/\/msalamon.pl\/wp-content\/uploads\/2023\/07\/stm_grafika-768x512.jpg 768w, https:\/\/msalamon.pl\/wp-content\/uploads\/2023\/07\/stm_grafika-360x240.jpg 360w, https:\/\/msalamon.pl\/wp-content\/uploads\/2023\/07\/stm_grafika.jpg 1200w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Required documentation<\/h2>\n\n\n\n<p>Programming STM32 or other microcontrollers relies on<strong> heavy work with documentation<\/strong>. We will need a few documents that you can download from your microcontroller\u2019s page. For our STM32C031C6T6, it will be here: <a href=\"https:\/\/www.st.com\/en\/microcontrollers-microprocessors\/stm32c031c6.html\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">https:\/\/www.st.com\/en\/microcontrollers-microprocessors\/stm32c031c6.html<\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Datasheet \u2013 abbreviated DS<\/h3>\n\n\n\n<p>The <strong>datasheet<\/strong> for a specific microcontroller and its <strong>general description<\/strong>. Here you will find a general <strong>functional description of the entire chip<\/strong>: what peripherals it contains and what they do (roughly). A very interesting part is the <strong>block diagram<\/strong>, which we will use more than once in this series. From it we learn about the <strong>internal connections between individual peripherals<\/strong> of the microcontroller.<\/p>\n\n\n\n<p>In the datasheet you will find the <strong>pinout<\/strong>, i.e., which signals are routed to which package pins. Often these documents cover several packages. Right after the pinout you will find a list of all alternate functions for a given pin. Here you\u2019ll learn what additional functions a pin can perform. You\u2019ll also learn <strong>whether a given pin is 5V-tolerant<\/strong>. STM32 chips typically run at 3.3V, but most of their pins are 5V-tolerant.<\/p>\n\n\n\n<p>The next category of information in the datasheet is the <strong>electrical characteristics<\/strong>. Here you will find all information about power supply, maximum currents, as well as a diagram of correct microcontroller powering. Useful when building your own device.<\/p>\n\n\n\n<p>At the very end there is <strong>information about packages and their dimensions<\/strong>. If you ever want to design a PCB for a microcontroller, you will certainly use this\u2026 or you\u2019ll find a ready-made component library.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Reference Manual \u2013 abbreviated RM<\/h3>\n\n\n\n<p>The largest of the required documents and basically <strong>essential for register-level programming.<\/strong> We\u2019ll be abusing it throughout this entire series. What will we find inside?<\/p>\n\n\n\n<p><strong>A detailed description of every element of the microcontroller<\/strong>. All peripherals, memories, clocking, and power systems are described in detail here. <strong>Except for the core.<\/strong> It has separate documentation, but we won\u2019t need it in this series.<\/p>\n\n\n\n<p>You will find a<strong> functional description<\/strong>, i.e., how peripherals work and what functions and modes they have. Besides the detailed description, there is also a <strong>precise description of registers and their contents.<\/strong><\/p>\n\n\n\n<p>This is where we will take most of the information on how to configure a specific peripheral and how to use it. Programming microcontrollers is hard grinding through documentation. It\u2019s often confusing for beginners, but it doesn\u2019t take long to get the hang of it.<\/p>\n\n\n\n<p>I won\u2019t discuss what chapters we have here. We\u2019ll discover them gradually as needed.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Errata \u2013 abbreviated ES<\/h3>\n\n\n\n<p>Some say it\u2019s more important than the others. Why? This is where you will find <strong>known and publicly disclosed silicon bugs in the microcontroller. <\/strong>Sometimes you do everything according to the Reference Manual and it still doesn\u2019t work. The solution may be in the Errata.<\/p>\n\n\n\n<p>This is where the manufacturer states what doesn\u2019t work and<strong> how to deal with it<\/strong>. These are so-called <strong>Workarounds<\/strong>, i.e., ways around problems\u2014either hardware or software, depending on what\u2019s broken.<\/p>\n\n\n\n<p>I saw an interesting thesis based on an errata document. It said more or less that you can tell from it whether the manufacturer cares about hardware makers using their chips. Because if across several subsequent microcontroller series the exact same bug appears, what does that say? Some people say it shows a lack of respect \ud83d\ude42<\/p>\n\n\n\n<p>I have a slightly different opinion on that. Sometimes it\u2019s simply economically not worth it \ud83d\ude42<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Nucleo documentation<\/h3>\n\n\n\n<p>In this series we will work on the evaluation board <a href=\"https:\/\/sklep.msalamon.pl\/produkt\/stm32-nucleo-c031c6-nucleo-32-z-stm32c031c6t6-arm-cortex-m0\/?utm_source=blog&amp;utm_medium=article&amp;utm_campaign=stm32narejestrach&amp;utm_content=Text\" target=\"_blank\" rel=\"noreferrer noopener\">NUCLEO-C031C6<\/a>. It\u2019s also worth getting useful documentation for it. I would highlight <strong>3 useful documents<\/strong>. They can be downloaded from your Nucleo board\u2019s page. Our board: <a href=\"https:\/\/www.st.com\/en\/evaluation-tools\/nucleo-c031c6.html\" target=\"_blank\" rel=\"noopener\">https:\/\/www.st.com\/en\/evaluation-tools\/nucleo-c031c6.html<\/a><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Data Brief \/ Specification<\/strong><\/li>\n<\/ol>\n\n\n\n<p>A short document with the Nucleo board specifications. It covers the whole similar series. From it we\u2019ll learn what, besides the microcontroller, is present on our Nucleo. If you wanted to use the same microcontroller on your own PCB, you\u2019ll find its exact model here.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>User Manual<\/strong><\/li>\n<\/ol>\n\n\n\n<p>A description of the elements and configuration of the Nucleo board. Development kits can be hardware-configured. This is enabled by various jumpers. We have large jumpers that we can change manually. We also have small jumpers in the form of SMD resistors that will need to be re-soldered.<\/p>\n\n\n\n<p>This document describes, among other things, the configuration options of our Nucleo board. You will also find the pinout and a list of functions that you can route to the Nucleo connectors.<\/p>\n\n\n\n<p>Here you will also learn about the built-in ST-Link and how to use it to program external chips. It is not limited to working only with the Nucleo. You can successfully use it \u201cexternally\u201d.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Schematic<\/strong><\/li>\n<\/ol>\n\n\n\n<p>The last document will be the Nucleo schematic. ST is kind enough to provide PDF schematics for all of their eval boards. Here we will take a look to check how the button is connected to the microcontroller.<\/p>\n\n\n\n<p>You can read quite a lot from the schematic. Sometimes it happens that some pins are connected together for some reason. Here you\u2019ll learn what those connections are.<\/p>\n\n\n\n<p>You can also use the schematic if you want to design your own PCB.<\/p>\n\n\n\n<p>You will find the schematic in the CAD tab.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Creating a project in STM32CubeIDE<\/h2>\n\n\n\n<p>To program STM32 we need something to do it in. For this series I chose none other than STM32CubeIDE. Download here: <a href=\"https:\/\/www.st.com\/en\/development-tools\/stm32cubeide.html\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/www.st.com\/en\/development-tools\/stm32cubeide.html<\/a><\/p>\n\n\n\n<p>I\u2019m using version 1.12.1, but for register-level programming it doesn\u2019t matter much. Well\u2026 CubeIDE for register-level programming? Why? I\u2019ll show you how to use this environment cleverly to make your life easier.<\/p>\n\n\n\n<p>So what do we have to do now to write code? Let\u2019s go step by step:<\/p>\n\n\n\n<p><strong>Create an empty project<\/strong>. We need to create a new, clean project. First, the MCU Selector will open. <strong>Use the MCU\/MPU Selector tab<\/strong> and enter the microcontroller model. Ours is STM32C031C6T6.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"775\" src=\"https:\/\/msalamon.pl\/wp-content\/uploads\/2023\/07\/image-1024x775.png\" alt=\"\" class=\"wp-image-2343\" srcset=\"https:\/\/msalamon.pl\/wp-content\/uploads\/2023\/07\/image-1024x775.png 1024w, https:\/\/msalamon.pl\/wp-content\/uploads\/2023\/07\/image-300x227.png 300w, https:\/\/msalamon.pl\/wp-content\/uploads\/2023\/07\/image-768x581.png 768w, https:\/\/msalamon.pl\/wp-content\/uploads\/2023\/07\/image.png 1350w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>In the configurator you have to be careful not to select the option to generate a project based on HAL. <strong>Select Empty Project here.<\/strong> Name the project however you want and click Finish.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"594\" height=\"644\" src=\"https:\/\/msalamon.pl\/wp-content\/uploads\/2023\/07\/image-2.png\" alt=\"\" class=\"wp-image-2345\" srcset=\"https:\/\/msalamon.pl\/wp-content\/uploads\/2023\/07\/image-2.png 594w, https:\/\/msalamon.pl\/wp-content\/uploads\/2023\/07\/image-2-277x300.png 277w\" sizes=\"auto, (max-width: 594px) 100vw, 594px\" \/><\/figure>\n\n\n\n<p>We have a project. Unfortunately, we still can\u2019t write anything in it yet. <strong>We need to add CMSIS libraries and microcontroller headers<\/strong>. We have two options to choose from. Either we search the Internet\u2026 or we extract them from a HAL-based project. That\u2019s exactly, among other things, why we need CubeIDE \ud83d\ude42<\/p>\n\n\n\n<p>Create a <strong>second project<\/strong> in the same way, <strong>but at the end selecting STM32Cube<\/strong> instead of Empty. This will be our donor project.<\/p>\n\n\n\n<p>To add the microcontroller headers we need to copy a few folders:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\/Drivers\/CMSIS\/Device\/ST\/STM32C0xx<\/li>\n\n\n\n<li>\/Drivers\/CMSIS\/Include<\/li>\n<\/ul>\n\n\n\n<p>We created a new folder \u2013 Drivers. It is not added to compilation by default. We must add it to the compiler\u2019s list. Right-click (RMB) on the project and go to Properties. Then find the configuration C\/C++ General &gt; Paths and Symbols &gt; Source Location and add the Drivers folder using Add Folder.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"575\" src=\"https:\/\/msalamon.pl\/wp-content\/uploads\/2023\/07\/image-3-1024x575.png\" alt=\"\" class=\"wp-image-2346\" srcset=\"https:\/\/msalamon.pl\/wp-content\/uploads\/2023\/07\/image-3-1024x575.png 1024w, https:\/\/msalamon.pl\/wp-content\/uploads\/2023\/07\/image-3-300x168.png 300w, https:\/\/msalamon.pl\/wp-content\/uploads\/2023\/07\/image-3-768x431.png 768w, https:\/\/msalamon.pl\/wp-content\/uploads\/2023\/07\/image-3.png 1120w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Now let\u2019s add Include paths for Device and CMSIS in the project\u2019s Include paths. It will be much easier to include them. Instead of writing the whole path, we\u2019ll simply type the filename.<\/p>\n\n\n\n<p>We stay in the project Properties. This time go to C\/C++ Build &gt; Settings &gt; MCU GCC Compiler &gt; Include paths and add two entries pointing to our headers.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>..\/Drivers\/CMSIS\/Device\/ST\/STM32C0xx\/Include<\/li>\n\n\n\n<li>..\/Drivers\/CMSIS\/Include<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"575\" src=\"https:\/\/msalamon.pl\/wp-content\/uploads\/2023\/07\/image-4-1024x575.png\" alt=\"\" class=\"wp-image-2348\" srcset=\"https:\/\/msalamon.pl\/wp-content\/uploads\/2023\/07\/image-4-1024x575.png 1024w, https:\/\/msalamon.pl\/wp-content\/uploads\/2023\/07\/image-4-300x168.png 300w, https:\/\/msalamon.pl\/wp-content\/uploads\/2023\/07\/image-4-768x431.png 768w, https:\/\/msalamon.pl\/wp-content\/uploads\/2023\/07\/image-4.png 1120w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Now we can write code \ud83e\udd73 but\u2026 we still don\u2019t know what and how. Where will we learn it from? Of course from me, but that\u2019s in the next post.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Summary<\/h2>\n\n\n\n<p>As you can see, there are quite a few \u201cintroductory\u201d elements. However, it\u2019s not that scary, and with the help of STM32CubeIDE it goes quite smoothly.<\/p>\n\n\n\n<p>In the next post we\u2019ll deal with GPIO Output. We\u2019ll make the microcontroller Hello World, i.e., blinking an LED \ud83d\ude0e<\/p>\n\n\n\n<p>Let me know in the comments if you liked this post! Maybe you have a suggestion for what to show as part of the STM32 Register-Level series? Share this article with your friends.<\/p>\n\n\n\n<p>I also invite you to my store, where you can buy interesting electronics for programming, such as <a href=\"https:\/\/sklep.msalamon.pl\/produkt\/stm32-nucleo-c031c6-nucleo-32-z-stm32c031c6t6-arm-cortex-m0\/?utm_source=blog&amp;utm_medium=article&amp;utm_campaign=stm32narejestrach&amp;utm_content=Text\" target=\"_blank\" rel=\"noreferrer noopener\">NUCLEO-C031C6<\/a>, which we use in this series: <a href=\"https:\/\/sklep.msalamon.pl\/?utm_source=blog&amp;utm_medium=article&amp;utm_campaign=stm32narejestrach&amp;utm_content=Text\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/sklep.msalamon.pl<\/a><\/p>\n\n\n\n<p>The project from this article can be found at: <a href=\"https:\/\/github.com\/lamik\/stm32narejestrach_1\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/lamik\/stm32narejestrach_1<\/a><\/p>\n\n\n<div class=\"kk-star-ratings kksr-auto kksr-align-left kksr-valign-bottom\"\n    data-payload='{&quot;align&quot;:&quot;left&quot;,&quot;id&quot;:&quot;4157&quot;,&quot;slug&quot;:&quot;default&quot;,&quot;valign&quot;:&quot;bottom&quot;,&quot;ignore&quot;:&quot;&quot;,&quot;reference&quot;:&quot;auto&quot;,&quot;class&quot;:&quot;&quot;,&quot;count&quot;:&quot;0&quot;,&quot;legendonly&quot;:&quot;&quot;,&quot;readonly&quot;:&quot;&quot;,&quot;score&quot;:&quot;0&quot;,&quot;starsonly&quot;:&quot;&quot;,&quot;best&quot;:&quot;5&quot;,&quot;gap&quot;:&quot;0&quot;,&quot;greet&quot;:&quot;&quot;,&quot;legend&quot;:&quot;0\\\/5 - (0 votes)&quot;,&quot;size&quot;:&quot;24&quot;,&quot;title&quot;:&quot;How to Create an STM32 Project for Register-Level Programming? | STM32 on Registers #1&quot;,&quot;width&quot;:&quot;0&quot;,&quot;_legend&quot;:&quot;{score}\\\/{best} - ({count} {votes})&quot;,&quot;font_factor&quot;:&quot;1.25&quot;}'>\n            \n<div class=\"kksr-stars\">\n    \n<div class=\"kksr-stars-inactive\">\n            <div class=\"kksr-star\" data-star=\"1\" style=\"padding-right: 0px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"2\" style=\"padding-right: 0px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"3\" style=\"padding-right: 0px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"4\" style=\"padding-right: 0px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"5\" style=\"padding-right: 0px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n    <\/div>\n    \n<div class=\"kksr-stars-active\" style=\"width: 0px;\">\n            <div class=\"kksr-star\" style=\"padding-right: 0px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 0px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 0px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 0px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 0px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n    <\/div>\n<\/div>\n                \n\n<div class=\"kksr-legend\" style=\"font-size: 19.2px;\">\n            <span class=\"kksr-muted\"><\/span>\n    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p>How to create an STM32 project for register-level programming? For a very long time, readers and course participants have been asking me: \u201cMATI! When will you finally do something on STM32, but at the register level?\u201d. I usually replied: \u201cwhen the time comes\u201d, but I didn\u2019t know myself when that [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":3824,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_links_to":"","_links_to_target":""},"categories":[160],"tags":[176,174,177],"class_list":["post-4157","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-stm32","tag-programming","tag-stm32","tag-stm32cubemx"],"_links":{"self":[{"href":"https:\/\/msalamon.pl\/en\/wp-json\/wp\/v2\/posts\/4157","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/msalamon.pl\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/msalamon.pl\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/msalamon.pl\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/msalamon.pl\/en\/wp-json\/wp\/v2\/comments?post=4157"}],"version-history":[{"count":3,"href":"https:\/\/msalamon.pl\/en\/wp-json\/wp\/v2\/posts\/4157\/revisions"}],"predecessor-version":[{"id":4162,"href":"https:\/\/msalamon.pl\/en\/wp-json\/wp\/v2\/posts\/4157\/revisions\/4162"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/msalamon.pl\/en\/wp-json\/wp\/v2\/media\/3824"}],"wp:attachment":[{"href":"https:\/\/msalamon.pl\/en\/wp-json\/wp\/v2\/media?parent=4157"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/msalamon.pl\/en\/wp-json\/wp\/v2\/categories?post=4157"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/msalamon.pl\/en\/wp-json\/wp\/v2\/tags?post=4157"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}