{"id":4225,"date":"2020-09-30T20:00:54","date_gmt":"2020-09-30T18:00:54","guid":{"rendered":"https:\/\/msalamon.pl\/?p=4225"},"modified":"2025-12-27T16:13:23","modified_gmt":"2025-12-27T15:13:23","slug":"is-it-better-to-have-two-cores-than-one-stm32h7-project-configuration","status":"publish","type":"post","link":"https:\/\/msalamon.pl\/en\/is-it-better-to-have-two-cores-than-one-stm32h7-project-configuration\/","title":{"rendered":"Is it better to have two cores than one? STM32H7 \u2013 project configuration"},"content":{"rendered":"\n<p>If you asked men about this in general, probably each of them would say yes. The problem is that while answering, they\u2019re probably not thinking about microcontrollers\u2026 So let\u2019s consider <em>our<\/em> microcontrollers. Is it good to have two cores, or rather \u2013 two CPU cores?<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>This article was created based on <a href=\"https:\/\/www.youtube.com\/watch?v=JAFMoVNgnBo&amp;t=1323s&amp;ab_channel=msalamon\" target=\"_blank\" rel=\"noopener\">my LIVE #1<\/a>, and it is also a supplement to it.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Dual-core processors<\/h1>\n\n\n\n<p>We\u2019ve known multi-core CPUs in computers for a long time now. I remember when Intel\u2019s Dual-Core processors were coming out. When you were buying a new computer back then, the salesperson in the store would sprinkle magic dust as if it were some unknown NASA technology. What, two processors in one?! Exactly 2 times faster than before?! It was hard to believe.<\/p>\n\n\n\n<p>Today, hardly anyone even bats an eye when AMD releases a processor with 32 cores. It\u2019s basically the norm for us.<\/p>\n\n\n\n<p>It\u2019s a bit different in the world of microcontrollers. Here, that WOW I had when I was much younger is only just beginning. Maybe it\u2019s not as huge a WOW anymore, but I\u2019m still impressed.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Technological progress in embedded<\/h2>\n\n\n\n<p>When writing applications for computers, we\u2019ve already gotten used to the fact that they have \u201cunlimited\u201d resources. It\u2019s different on microcontrollers. Until now we had one core and we had to write programs so that they sensibly juggled resources and tasks.<\/p>\n\n\n\n<p>In recent years, the embedded industry has definitely moved beyond blinking an LED or acquiring sensor data and has gone in a more complex direction. Displays appeared at first. First simple, monochrome graphical ones. Then the first color ones, mostly in phones. I remember a Siemens S65 advertisement that shouted that its display had AS MUCH AS 13 cm\u00b2 of area! Today we\u2019d snort with laughter, but back then it was quite an achievement for small microcontrollers.<\/p>\n\n\n\n<p>Now, trained by smartphones, we want to build our tiny microcontroller devices with displays of huge resolution as well. It quickly turns out that our creations don\u2019t run as smoothly as we\u2019d like.<\/p>\n\n\n\n<p>All because drawing on such screens takes a crazy amount of time and resources. Even low-resolution displays, but driven over SPI, draw the whole screen for \u201can eternity\u201d. And after all, we still need to keep using sensors somewhere around that. It\u2019s even worse when we have to control motors in real time.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">STM32H7<\/h2>\n\n\n\n<p>One interesting solution is to separate \u201cmultimedia\u201d tasks from \u201ccontrol\u201d tasks. And I think that\u2019s exactly what the dual-core STM32 H7 series was created for. The main core is a Cortex-M7, which has tons of multimedia features. The second is the well-known Cortex-M4.<\/p>\n\n\n\n<p>Both cores are enclosed in a single package. Peripherals are single, but all cores have access to them. So you can decide who does what.<\/p>\n\n\n\n<p>Some time ago on my <a href=\"https:\/\/www.youtube.com\/watch?v=JAFMoVNgnBo&amp;ab_channel=msalamon\" target=\"_blank\" rel=\"noopener\">first LIVE<\/a> I showed how to get started with a Nucleo board with the STM32H745.<\/p>\n\n\n\n<p class=\"has-text-align-center\"><strong> <a href=\"https:\/\/sklep.msalamon.pl\/produkt\/nucleo-h745zi-q\/?utm_source=blog&amp;utm_medium=article&amp;utm_campaign=stm32_2core&amp;utm_content=Text\">You can buy such a board from me in my store.<\/a><\/strong><\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><a href=\"https:\/\/sklep.msalamon.pl\/produkt\/nucleo-h745zi-q\/?utm_source=blog&amp;utm_medium=banner&amp;utm_campaign=stm32_2core\"><img loading=\"lazy\" decoding=\"async\" width=\"1200\" height=\"400\" src=\"http:\/\/msalamon.pl\/wp-content\/uploads\/2020\/09\/2-core-Nucleo-144-baner.jpg\" alt=\"\" class=\"wp-image-1691\" srcset=\"https:\/\/msalamon.pl\/wp-content\/uploads\/2020\/09\/2-core-Nucleo-144-baner.jpg 1200w, https:\/\/msalamon.pl\/wp-content\/uploads\/2020\/09\/2-core-Nucleo-144-baner-300x100.jpg 300w, https:\/\/msalamon.pl\/wp-content\/uploads\/2020\/09\/2-core-Nucleo-144-baner-1024x341.jpg 1024w, https:\/\/msalamon.pl\/wp-content\/uploads\/2020\/09\/2-core-Nucleo-144-baner-768x256.jpg 768w\" sizes=\"auto, (max-width: 1200px) 100vw, 1200px\" \/><\/a><\/figure>\n<\/div>\n\n\n<p><\/p>\n\n\n\n<p>What exactly does such a microcontroller have? I don\u2019t want to go on and on, because you can see it <a href=\"https:\/\/sklep.msalamon.pl\/produkt\/nucleo-h745zi-q\/?utm_source=blog&amp;utm_medium=article&amp;utm_campaign=stm32_2core&amp;utm_content=Text\">in the store<\/a>, but the most important info includes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>480 MHz (M7) and 240 MHz (M4)<\/li>\n\n\n\n<li>2 MB Flash, 1 MB SRAM<\/li>\n\n\n\n<li>Ethernet<\/li>\n\n\n\n<li>DCMI<\/li>\n\n\n\n<li>FMC<\/li>\n\n\n\n<li>SDIO<\/li>\n\n\n\n<li>Quad SPI<\/li>\n\n\n\n<li>DAC<\/li>\n\n\n\n<li>TFT controller, graphics accelerators, hardware JPEG<\/li>\n<\/ul>\n\n\n\n<p>There\u2019s of course much more, but I listed only the more interesting things.<\/p>\n\n\n\n<p><strong>On the Nucleo board we of course get a programmer. Here it\u2019s the ST-Link V3<\/strong>, so the newest design. It allows working with two cores. How to configure a project and run your first program?<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Creating a project, peripheral configuration<\/h2>\n\n\n\n<p>Writing firmware for such a dual-core microcontroller is quite specific. In fact you have to write two \u201cindependent\u201d programs. Each has its own startup code, its own interrupt vector, and therefore its own NVIC. <strong>Such a project will consist of two subprojects. How to handle it? Well fortunately we have STM32CubeMX!<\/strong> It will do for us practically most of what we need.<\/p>\n\n\n\n<p>In Cube, when creating a new project, it\u2019s enough to select our microcontroller, or even better select by board if you\u2019re using Nucleo. After creating the project, we\u2019ll of course see the microcontroller view and the peripheral tree.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><a href=\"http:\/\/msalamon.pl\/wp-content\/uploads\/2020\/09\/stm32h7_cubeview.png\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"166\" src=\"http:\/\/msalamon.pl\/wp-content\/uploads\/2020\/09\/stm32h7_cubeview-300x166.png\" alt=\"\" class=\"wp-image-1682\" srcset=\"https:\/\/msalamon.pl\/wp-content\/uploads\/2020\/09\/stm32h7_cubeview-300x166.png 300w, https:\/\/msalamon.pl\/wp-content\/uploads\/2020\/09\/stm32h7_cubeview-1024x568.png 1024w, https:\/\/msalamon.pl\/wp-content\/uploads\/2020\/09\/stm32h7_cubeview-768x426.png 768w, https:\/\/msalamon.pl\/wp-content\/uploads\/2020\/09\/stm32h7_cubeview.png 1446w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/figure>\n<\/div>\n\n\n<p>The view is quite familiar, however when you open the tree on the left side you\u2019ll see there are some differences compared to single-core microcontrollers.<\/p>\n\n\n\n<p>First of all, you\u2019ll see <strong>two NVICs<\/strong>. One for each core.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><a href=\"http:\/\/msalamon.pl\/wp-content\/uploads\/2020\/09\/stm32h7_nvics.png\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"219\" src=\"http:\/\/msalamon.pl\/wp-content\/uploads\/2020\/09\/stm32h7_nvics-300x219.png\" alt=\"\" class=\"wp-image-1683\" srcset=\"https:\/\/msalamon.pl\/wp-content\/uploads\/2020\/09\/stm32h7_nvics-300x219.png 300w, https:\/\/msalamon.pl\/wp-content\/uploads\/2020\/09\/stm32h7_nvics.png 700w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/figure>\n<\/div>\n\n\n<p>Another interesting thing when using Cube for dual-core MCUs is that <strong>in peripheral settings there is a split into Cortex-M7 and Cortex-M4.<\/strong> This split looks different depending on the peripheral. Let\u2019s take GPIO first.&nbsp;<\/p>\n\n\n\n<p>Each pin we select can be assigned to one of the cores or left \u201cFree\u201d. Unfortunately, from what I tested, we cannot assign one GPIO pin for use by two cores. <strong>Leaving a pin as \u201cFree\u201d only reserves it in Cube, but later it won\u2019t be in the code for either core. Not even initialization.<\/strong><\/p>\n\n\n\n<p>This is what assigning the individual LEDs from <a href=\"https:\/\/sklep.msalamon.pl\/produkt\/nucleo-h745zi-q\/?utm_source=blog&amp;utm_medium=article&amp;utm_campaign=stm32_2core&amp;utm_content=Text\">Nucleo<\/a> to cores looks like.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><a href=\"http:\/\/msalamon.pl\/wp-content\/uploads\/2020\/09\/stm32h7_gpio.png\"><img loading=\"lazy\" decoding=\"async\" width=\"810\" height=\"176\" src=\"http:\/\/msalamon.pl\/wp-content\/uploads\/2020\/09\/stm32h7_gpio.png\" alt=\"\" class=\"wp-image-1684\" srcset=\"https:\/\/msalamon.pl\/wp-content\/uploads\/2020\/09\/stm32h7_gpio.png 810w, https:\/\/msalamon.pl\/wp-content\/uploads\/2020\/09\/stm32h7_gpio-300x65.png 300w, https:\/\/msalamon.pl\/wp-content\/uploads\/2020\/09\/stm32h7_gpio-768x167.png 768w\" sizes=\"auto, (max-width: 810px) 100vw, 810px\" \/><\/a><\/figure>\n<\/div>\n\n\n<p>Let\u2019s also look at an example with I\u00b2C. Entering the I2C1 settings, the first thing we see is a small table.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><a href=\"http:\/\/msalamon.pl\/wp-content\/uploads\/2020\/09\/stm32h7_i2c1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"621\" height=\"171\" src=\"http:\/\/msalamon.pl\/wp-content\/uploads\/2020\/09\/stm32h7_i2c1.png\" alt=\"\" class=\"wp-image-1685\" srcset=\"https:\/\/msalamon.pl\/wp-content\/uploads\/2020\/09\/stm32h7_i2c1.png 621w, https:\/\/msalamon.pl\/wp-content\/uploads\/2020\/09\/stm32h7_i2c1-300x83.png 300w\" sizes=\"auto, (max-width: 621px) 100vw, 621px\" \/><\/a><\/figure>\n<\/div>\n\n\n<p>Let\u2019s demystify it! I\u2019ll start with PowerDomain. This is information about which power domain of the whole MCU this interface is in. A useful thing if we want to optimize energy.<\/p>\n\n\n\n<p><strong>In <em>Runtime contexts <\/em>we choose which core will be able to use I2C1.<\/strong> Here it\u2019s a bit different than with GPIO because we can select that both M7 and M4 can communicate through this interface. If we select both, something new appears!<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><a href=\"http:\/\/msalamon.pl\/wp-content\/uploads\/2020\/09\/stm32h7_i2c1_initializer.png\"><img loading=\"lazy\" decoding=\"async\" width=\"615\" height=\"158\" src=\"http:\/\/msalamon.pl\/wp-content\/uploads\/2020\/09\/stm32h7_i2c1_initializer.png\" alt=\"\" class=\"wp-image-1686\" srcset=\"https:\/\/msalamon.pl\/wp-content\/uploads\/2020\/09\/stm32h7_i2c1_initializer.png 615w, https:\/\/msalamon.pl\/wp-content\/uploads\/2020\/09\/stm32h7_i2c1_initializer-300x77.png 300w\" sizes=\"auto, (max-width: 615px) 100vw, 615px\" \/><\/a><\/figure>\n<\/div>\n\n\n<p><\/p>\n\n\n\n<p>The&nbsp;<em>Initializer<\/em>&nbsp;selection appeared. We choose which core is responsible for the entire initialization of this interface. Important information here: <strong>who initializes, later handles the interrupts. So by choosing M7 as the initializer, interrupts will come to NVIC1.<\/strong><\/p>\n\n\n\n<p>The rest of the I\u00b2C settings are basically the same as in the single-core case.<\/p>\n\n\n\n<p>Now a useful tip \ud83d\ude42 J<strong>f you want to quickly determine which core will use which interface, who initializes, and which voltage domain it\u2019s in, there are two nice toggles under the gear icon.<\/strong> It\u2019s worth checking them. Then we\u2019ll see this beautiful view next to the interface tree.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><a href=\"http:\/\/msalamon.pl\/wp-content\/uploads\/2020\/09\/stm32h7_context_menu.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"555\" src=\"http:\/\/msalamon.pl\/wp-content\/uploads\/2020\/09\/stm32h7_context_menu-1024x555.png\" alt=\"\" class=\"wp-image-1687\" srcset=\"https:\/\/msalamon.pl\/wp-content\/uploads\/2020\/09\/stm32h7_context_menu-1024x555.png 1024w, https:\/\/msalamon.pl\/wp-content\/uploads\/2020\/09\/stm32h7_context_menu-300x162.png 300w, https:\/\/msalamon.pl\/wp-content\/uploads\/2020\/09\/stm32h7_context_menu-768x416.png 768w, https:\/\/msalamon.pl\/wp-content\/uploads\/2020\/09\/stm32h7_context_menu.png 1455w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<\/div>\n\n\n<p>You can quickly click through the cores, the initializer, and match the interfaces to the appropriate domains if needed. Lovely!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Clocks<\/h2>\n\n\n\n<p>The bane of every beginner STM32 programmer is setting up clocks. Of course Cube makes it easier, and how! A beast like <a href=\"https:\/\/sklep.msalamon.pl\/produkt\/nucleo-h745zi-q\/?utm_source=blog&amp;utm_medium=article&amp;utm_campaign=stm32_2core&amp;utm_content=Text\">STM32H745<\/a> intuitively should have even more settings than a regular single-core one. Let\u2019s see.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><a href=\"http:\/\/msalamon.pl\/wp-content\/uploads\/2020\/09\/stm32h7_clocks.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"601\" src=\"http:\/\/msalamon.pl\/wp-content\/uploads\/2020\/09\/stm32h7_clocks-1024x601.png\" alt=\"\" class=\"wp-image-1688\" srcset=\"https:\/\/msalamon.pl\/wp-content\/uploads\/2020\/09\/stm32h7_clocks-1024x601.png 1024w, https:\/\/msalamon.pl\/wp-content\/uploads\/2020\/09\/stm32h7_clocks-300x176.png 300w, https:\/\/msalamon.pl\/wp-content\/uploads\/2020\/09\/stm32h7_clocks-768x451.png 768w, https:\/\/msalamon.pl\/wp-content\/uploads\/2020\/09\/stm32h7_clocks.png 1410w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<\/div>\n\n\n<p>There\u2019s quite a lot! However I expected there would be more \ud83d\ude42 I marked the most important clocks, i.e. the clocking of our M7 and M4 cores. As you can see, our cores\u2019 clocks are tied together. Thanks to this, the clock tree isn\u2019t as messy.<\/p>\n\n\n\n<p>Below the main clock there are tons of multiplexers to choose the clocks for peripherals. We\u2019ll worry about that only when we want to use one of them.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Code generation<\/h2>\n\n\n\n<p>What does code for a dual-core MCU look like? For a \u201cnormal\u201d microcontroller we generate and we have the whole project nicely divided into Inc, Src, Drivers, other things, and of course main.c where everything happens.<\/p>\n\n\n\n<p>After generating such a project for the <a href=\"https:\/\/sklep.msalamon.pl\/produkt\/nucleo-h745zi-q\/?utm_source=blog&amp;utm_medium=article&amp;utm_campaign=stm32_2core&amp;utm_content=Text\">H745<\/a> we de facto have <strong>two projects connected into one larger one.<\/strong> This happens because in fact when writing for 2 cores we write two separate programs! They end up in a different place in Flash memory.<\/p>\n\n\n\n<p>Such a combined project looks like this.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"alignleft\"><a href=\"http:\/\/msalamon.pl\/wp-content\/uploads\/2020\/09\/stm32h7_projects.png\"><img loading=\"lazy\" decoding=\"async\" width=\"302\" height=\"928\" src=\"http:\/\/msalamon.pl\/wp-content\/uploads\/2020\/09\/stm32h7_projects.png\" alt=\"\" class=\"wp-image-1689\" srcset=\"https:\/\/msalamon.pl\/wp-content\/uploads\/2020\/09\/stm32h7_projects.png 302w, https:\/\/msalamon.pl\/wp-content\/uploads\/2020\/09\/stm32h7_projects-98x300.png 98w\" sizes=\"auto, (max-width: 302px) 100vw, 302px\" \/><\/a><\/figure>\n<\/div>\n\n\n<p>What do we see here? <strong>We have one large hierarchical project named LIVE1. It aggregates two other projects.<\/strong> <strong>One LIVE1_CM4, which is dedicated to the M4 core, and analogously for the M7 core there is LIVE1_CM7.<\/strong><\/p>\n\n\n\n<p>Each project has its own main.c and its own set of libraries. They are built separately. Nothing from one project leaks into the other.<\/p>\n\n\n\n<p>That\u2019s why, for example, if you selected GPIO for one core, you won\u2019t have the pin definition in the other.<\/p>\n\n\n\n<p>At first it can be hard to navigate such a project due to identical file names. <strong>My suggestion is to split the IDE editor window into two and keep files for only one core on each side.<\/strong><\/p>\n\n\n\n<p>By default, Flash memory in the microcontroller is divided in half for the two cores. 1024K is reserved for each.<\/p>\n\n\n\n<p>RAM is different. For M7 there is 128K RAM and 64K ITCRAM. M4 has as much as 288K of RAM.<\/p>\n\n\n\n<p><strong>During the LIVE there was a question about whether you can change these sizes. Of course you can change them. Where? In the linker files! In each project there are files with the *.ld extension.<\/strong><\/p>\n\n\n\n<p>In them, you can shift, for example, the programs in Flash memory, and I tested it live. Thanks to this, we don\u2019t have to worry that we\u2019ll \u201cwaste\u201d a large part of Flash on less extensive code for one of the cores. Simple and effective.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Summary<\/h2>\n\n\n\n<p>True, I still haven\u2019t answered the question from the title of the post bluntly, but you can already feel under the surface that two cores can be better. Certainly in terms of performance, because the difficulty of writing code for such little creatures increases a lot. Two projects at once can really give you a hard time!<\/p>\n\n\n\n<p>In the next post I\u2019ll blink LEDs and show you what a mini rollercoaster it is to flash such a program to the microcontroller and debug it! If you can\u2019t wait for blinking LEDs on two cores, I did it on the LIVE, so I also invite you <a href=\"https:\/\/www.youtube.com\/watch?v=JAFMoVNgnBo&amp;t=1323s&amp;ab_channel=msalamon\" target=\"_blank\" rel=\"noopener\">to the recording<\/a> (the content is in Polish).<\/p>\n\n\n\n<p><strong>If you liked the article, buy something from me!<span>&nbsp;<\/span><img decoding=\"async\" draggable=\"false\" role=\"img\" class=\"emoji\" alt=\"?\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/13.0.0\/svg\/1f642.svg\"><span>&nbsp;<\/span><a href=\"https:\/\/sklep.msalamon.pl\/?utm_sorce=blog&amp;utm_medium=article&amp;utm_campaign=stm32_2core&amp;utm_content=Text\">https:\/\/sklep.msalamon.pl\/<\/a><\/strong><\/p>\n\n\n\n<p><span>If you noticed any mistake, you disagree with something, you\u2019d like to add something important, or you simply feel like you\u2019d like to discuss this topic, write a comment. Remember that the discussion should be polite and consistent with the rules of the Polish language.<\/span><\/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;4225&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;Is it better to have two cores than one? STM32H7 \u2013 project configuration&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>If you asked men about this in general, probably each of them would say yes. The problem is that while answering, they\u2019re probably not thinking about microcontrollers\u2026 So let\u2019s consider our microcontrollers. Is it good to have two cores, or rather \u2013 two CPU cores?<\/p>\n","protected":false},"author":1,"featured_media":3512,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_links_to":"","_links_to_target":""},"categories":[160],"tags":[174,177],"class_list":["post-4225","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-stm32","tag-stm32","tag-stm32cubemx"],"_links":{"self":[{"href":"https:\/\/msalamon.pl\/en\/wp-json\/wp\/v2\/posts\/4225","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=4225"}],"version-history":[{"count":3,"href":"https:\/\/msalamon.pl\/en\/wp-json\/wp\/v2\/posts\/4225\/revisions"}],"predecessor-version":[{"id":4228,"href":"https:\/\/msalamon.pl\/en\/wp-json\/wp\/v2\/posts\/4225\/revisions\/4228"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/msalamon.pl\/en\/wp-json\/wp\/v2\/media\/3512"}],"wp:attachment":[{"href":"https:\/\/msalamon.pl\/en\/wp-json\/wp\/v2\/media?parent=4225"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/msalamon.pl\/en\/wp-json\/wp\/v2\/categories?post=4225"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/msalamon.pl\/en\/wp-json\/wp\/v2\/tags?post=4225"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}