{"id":24444,"date":"2025-07-28T20:00:08","date_gmt":"2025-07-28T20:00:08","guid":{"rendered":"https:\/\/wolles-elektronikkiste.de\/?p=24444"},"modified":"2025-09-07T09:36:04","modified_gmt":"2025-09-07T09:36:04","slug":"stm32-boards-part-1-overview-and-upload","status":"publish","type":"post","link":"https:\/\/wolles-elektronikkiste.de\/en\/stm32-boards-part-1-overview-and-upload","title":{"rendered":"STM32 boards \u2013 Part 1: Overview and Upload"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">About this Post<\/h2>\n\n<p>In this and the following article, I will focus on boards based on STM32 microcontrollers. In this first part, I will first give you a brief overview and then show you how to upload your sketches to the STM32 boards using the Arduino IDE. <\/p>\n<p>While uploading to the official STM32 Nucleo and Arduino boards is generally easy, the unofficial variants such as the &#8220;Blue Pill&#8221; or the &#8220;Black Pill&#8221; have their own peculiarities. This is why these boards receive a disproportionate amount of attention in this article. Although there are already heaps of articles on the net, few of them take a comprehensive look at the STM32 boards.  &nbsp;<\/p>\n<p>One more note in advance: In the article I stick to the Arduino convention that flashing a microcontroller is an upload. It&#8217;s all a question of perspective &#8211; in the ST world, this is a download. &nbsp;<\/p>\n\n<p>This is what you can expect:<\/p>\n<ul>\n<li><a href=\"#overview\" rel=\"noopener\">STM32 boards &#8211; Overview<\/a><\/li>\n<li><a href=\"#nomenclature\" rel=\"noopener\">Nomenclature of STM32 microcontrollers<\/a><\/li>\n<li><a href=\"#preparations\">Preparations<\/a><\/li>\n<li><a href=\"#bluepill_variants\">BluePill board variants<\/a><\/li>\n<li><a href=\"#bluepill_upload\">Uploading sketches to the BluePill board<\/a>\n<ul>\n<li><a href=\"#bluepill_ftdi\">Uploading via USB-to-TTL adapter<\/a><\/li>\n<li><a href=\"#bluepill_swd\">Uploading via SWD (Serial Wire Debug)<\/a><\/li>\n<li><a href=\"#bluepill_hid\">Easiest: Uploading via HID bootloader and USB&nbsp;<\/a><\/li>\n<li><a href=\"#bluepill_maple\">Uploading via Maple-DFU-Bootloader<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"#blackpill_variants\">BlackPill variants<\/a><\/li>\n<li><a href=\"#blackpill_upload\">Uploading sketches to the BlackPill board<\/a>\n<ul>\n<li><a href=\"#blackpill_dfu\">Easiest: Uploading via DFU and USB<\/a><\/li>\n<li><a href=\"#blackpill_serial_SWD\">Uploading via serial or SWD<\/a><\/li>\n<li><a href=\"#blackpill_weact_hid\">Not Arduino-compatible: WeAct HID bootloader<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"#nucleo_upload\">Uploading sketches to Nucleo boards<\/a><\/li>\n<li><a href=\"#giga_upload\">Upload sketches to the Arduino GIGA R1 WiFi board<\/a><\/li>\n<li><a href=\"#appendix\">Appendix 1 &#8211; Checking the real flash size<\/a><\/li>\n<\/ul>\n\n<h4 class=\"wp-block-heading\">What I will not go into: STM32CubeIDE \/ STM32CubeMX<\/h4>\n\n<p><a href=\"https:\/\/www.st.com\/en\/development-tools\/stm32cubemx.html\" target=\"_blank\" rel=\"noopener\">STM32CubeMX<\/a> is a graphical configuration tool for STM32 microcontrollers that can be used to set pins, peripherals and clock systems. It automatically generates initialization code based on the STM32Cube HAL library. <a href=\"https:\/\/www.st.com\/en\/development-tools\/stm32cubeide.html\" target=\"_blank\" rel=\"noopener\">STM32CubeIDE<\/a> is a free development environment from ST based on Eclipse. It integrates editor, compiler, debugger and STM32CubeMX in a single tool. This allows STM32 projects to be fully implemented from configuration to debugging.   <\/p>\n<p>I won <strong>&#8216;t<\/strong> go into these tools in this article. Maybe I&#8217;ll do a separate post on this at some point. &nbsp;<\/p>\n\n<h2 class=\"wp-block-heading\" id=\"overview\">STM32 boards &#8211; Overview<\/h2>\n\n<p>&#8220;STM&#8221; stands for the semiconductor electronics manufacturer <a href=\"https:\/\/www.st.com\/content\/st_com\/en.html\" target=\"_blank\" rel=\"noopener\">STMicroelectronics<\/a> (abbreviation: &#8220;ST&#8221;). Among other things, ST develops and produces 8- and 32-bit microcontrollers, which are used on hundreds of different boards. I will only discuss a selection of 32-bit variants here.  &nbsp;&nbsp;<\/p>\n<p>STM32 microcontrollers are based on the ARM architecture. The ARM architecture was developed by ARM Ltd. Microcontroller manufacturers such as ST use the architecture as licensees.   &nbsp;<\/p>\n<p>ST itself uses its microcontrollers on the <a href=\"https:\/\/www.st.com\/en\/evaluation-tools\/stm32-nucleo-boards.html\" target=\"_blank\" rel=\"noopener\">Nucleo development boards<\/a>, <a href=\"https:\/\/www.st.com\/en\/evaluation-tools\/stm32-discovery-kits.html\" target=\"_blank\" rel=\"noopener\">discovery kits<\/a> and <a href=\"https:\/\/www.st.com\/en\/evaluation-tools\/stm32-eval-boards.html\" target=\"_blank\" rel=\"noopener\">evaluation boards<\/a>. Arduino also has a number of boards based on STM32 MCUs, such as the Portenta series or the Arduino GIGA R1 WiFi board. There are also many other electronics suppliers who have their own STM32 boards in their range, such as Adafruit with its <a href=\"https:\/\/learn.adafruit.com\/adafruit-stm32f405-feather-express\/overview\" target=\"_blank\" rel=\"noopener\">Adafruit STM32F405 Feather Express<\/a>.  &nbsp;<\/p>\n\n<h5 class=\"wp-block-heading\">The blue or the black pill?<\/h5>\n\n<p>And then there is the large group of BluePill and BlackPill boards. They are extremely inexpensive but not clearly defined, as their designations are not protected brand names but nicknames assigned by the STM32 community. <\/p>\n<p>Under the names &#8220;BluePill&#8221; and &#8220;BlackPill&#8221;, you can buy boards in different versions and with different microcontrollers. One major problem is the large number of counterfeit STM32 microcontrollers. On the one hand, these are not always clearly recognizable as counterfeits, and on the other hand, they sometimes have properties that differ from the original. In addition, there are also incorrectly assembled boards.   <\/p>\n\n<h4 class=\"wp-block-heading\">A few examples of STM32 boards<\/h4>\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:25%\"><div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/nucleo_L412KB.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"415\" height=\"1000\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/nucleo_L412KB.jpg\" alt=\"STM32 boards - Nucleo-L412KB\" class=\"wp-image-24176\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/nucleo_L412KB.jpg 415w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/nucleo_L412KB-125x300.jpg 125w\" sizes=\"auto, (max-width: 415px) 100vw, 415px\" \/><\/a><figcaption class=\"wp-element-caption\">Nucleo-L412KB<\/figcaption><\/figure>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:50%\"><div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/nucleo_F446RE.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"834\" height=\"1000\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/nucleo_F446RE.jpg\" alt=\"STM32 boards - Nucleo-F446RE\" class=\"wp-image-24178\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/nucleo_F446RE.jpg 834w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/nucleo_F446RE-250x300.jpg 250w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/nucleo_F446RE-768x921.jpg 768w\" sizes=\"auto, (max-width: 834px) 100vw, 834px\" \/><\/a><figcaption class=\"wp-element-caption\">Nucleo-F446RE<\/figcaption><\/figure>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:25%\"><div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/bluepill.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"418\" height=\"1000\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/bluepill.jpg\" alt=\"STM32 boards - BluePill\" class=\"wp-image-24182\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/bluepill.jpg 418w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/bluepill-125x300.jpg 125w\" sizes=\"auto, (max-width: 418px) 100vw, 418px\" \/><\/a><figcaption class=\"wp-element-caption\">BluePill<\/figcaption><\/figure>\n<\/div><\/div>\n<\/div>\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\"><div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/arduino_giga.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"556\" height=\"1000\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/arduino_giga.jpg\" alt=\"STM32 boards - Arduino GIGA R1 WiFi\" class=\"wp-image-24184\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/arduino_giga.jpg 556w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/arduino_giga-167x300.jpg 167w\" sizes=\"auto, (max-width: 556px) 100vw, 556px\" \/><\/a><figcaption class=\"wp-element-caption\">Arduino GIGA R1 WiFi<\/figcaption><\/figure>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\"><div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/stmf103cx_demo.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"556\" height=\"1000\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/stmf103cx_demo.jpg\" alt=\"STM32-Boards - STM32F103Cx Demo Board\" class=\"wp-image-24188\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/stmf103cx_demo.jpg 556w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/stmf103cx_demo-167x300.jpg 167w\" sizes=\"auto, (max-width: 556px) 100vw, 556px\" \/><\/a><figcaption class=\"wp-element-caption\">STM32F103Cx Demo Board<\/figcaption><\/figure>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\"><div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/blackpill_F401.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"556\" height=\"1000\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/blackpill_F401.jpg\" alt=\"STM32 boards - BlackPill\" class=\"wp-image-24186\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/blackpill_F401.jpg 556w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/blackpill_F401-167x300.jpg 167w\" sizes=\"auto, (max-width: 556px) 100vw, 556px\" \/><\/a><figcaption class=\"wp-element-caption\"> BlackPill<\/figcaption><\/figure>\n<\/div><\/div>\n<\/div>\n\n<p>The following table lists selected features of some STM32 boards. This is merely intended to give a certain impression of the league we are playing in here. &nbsp;<\/p>\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/overview_stm32_boards-1024x496.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"496\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/overview_stm32_boards-1024x496.png\" alt=\"Selected features of some STM32 boards\" class=\"wp-image-24197\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/overview_stm32_boards-1024x496.png 1024w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/overview_stm32_boards-300x145.png 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/overview_stm32_boards-768x372.png 768w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/overview_stm32_boards.png 1195w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Selected features of some STM32 boards<\/figcaption><\/figure>\n\n<h2 class=\"wp-block-heading\" id=\"nomenclature\">Nomenclature of STM32 microcontrollers<\/h2>\n\n<p>There are certain rules for the designation of STM32 microcontrollers, but unfortunately the nomenclature is not consistent across the entire portfolio. This means that certain codes can have a different meaning in different series. However, the designation of the microcontrollers follows a certain pattern; here, as an example, the STM32F103C8T6:  <\/p>\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/STM32_Nomenclature-2-1024x148.png\"><img decoding=\"async\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/STM32_Nomenclature-2-1024x148.png\" alt=\"Name coding STM32 - Type\" class=\"wp-image-24204\"\/><\/a><\/figure>\n\n<p>The first capital letter indicates the <strong>Type<\/strong>:<\/p>\n<ul>\n<li><strong>F<\/strong> = Mainstream \/ Foundation<\/li>\n<li><strong>G<\/strong> = General Purpose<\/li>\n<li><strong>H<\/strong> = High Performance<\/li>\n<li><strong>L \/ U<\/strong> = Low Power \/ Ultra Low Power<\/li>\n<li><strong>W<\/strong> = Wireless<\/li>\n<\/ul>\n<p>The following number codes the ARM Cortex used:<\/p>\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/stm32_nomenclature_core-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"928\" height=\"83\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/stm32_nomenclature_core-1.png\" alt=\"Name coding STM32 - Core\" class=\"wp-image-24210\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/stm32_nomenclature_core-1.png 928w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/stm32_nomenclature_core-1-300x27.png 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/stm32_nomenclature_core-1-768x69.png 768w\" sizes=\"auto, (max-width: 928px) 100vw, 928px\" \/><\/a><figcaption class=\"wp-element-caption\">Core coding<\/figcaption><\/figure>\n\n<p>This is followed by the product<strong>line<\/strong>. For example, F1<em>03<\/em> stands for the Performance Line, F1<em>00<\/em> is the Value Line. These numbers do not directly encode technical properties.  &nbsp;<\/p>\n\n<p>The number of pins (<strong>No of Pins<\/strong>) is usually defined as follows:&nbsp;<\/p>\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/stm32_nomenclature_pins.png\"><img loading=\"lazy\" decoding=\"async\" width=\"983\" height=\"91\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/stm32_nomenclature_pins.png\" alt=\"Name coding STM32 - Number of pins\" class=\"wp-image-24212\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/stm32_nomenclature_pins.png 983w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/stm32_nomenclature_pins-300x28.png 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/stm32_nomenclature_pins-768x71.png 768w\" sizes=\"auto, (max-width: 983px) 100vw, 983px\" \/><\/a><figcaption class=\"wp-element-caption\">Coding of the number of pins<\/figcaption><\/figure>\n\n<p>Here is the size of the flash (<strong>Flash Size<\/strong>):<\/p>\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/stm32_nomenclature_flash.png\"><img loading=\"lazy\" decoding=\"async\" width=\"995\" height=\"119\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/stm32_nomenclature_flash.png\" alt=\"Name coding STM32 - Flash Size\" class=\"wp-image-24214\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/stm32_nomenclature_flash.png 995w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/stm32_nomenclature_flash-300x36.png 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/stm32_nomenclature_flash-768x92.png 768w\" sizes=\"auto, (max-width: 995px) 100vw, 995px\" \/><\/a><figcaption class=\"wp-element-caption\">Flash size coding<\/figcaption><\/figure>\n\n<p>You will come across the following codes for the <strong>package<\/strong>:<\/p>\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/stm32_nomenclature_package.png\"><img loading=\"lazy\" decoding=\"async\" width=\"837\" height=\"79\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/stm32_nomenclature_package.png\" alt=\"Name coding STM32 - Package\" class=\"wp-image-24216\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/stm32_nomenclature_package.png 837w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/stm32_nomenclature_package-300x28.png 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/stm32_nomenclature_package-768x72.png 768w\" sizes=\"auto, (max-width: 837px) 100vw, 837px\" \/><\/a><figcaption class=\"wp-element-caption\">Coding of the package<\/figcaption><\/figure>\n\n<p>And the following applies to the operating temperature limits (<strong>T-range<\/strong>):<\/p>\n<ul>\n<li>6: -40 to +85 \u00b0C<\/li>\n<li>8: -40 to +105 \u00b0C<\/li>\n<\/ul>\n<p>However, as mentioned above, the designations are not always consistent. Take a look at the data sheet or the product descriptions before you order anything! &nbsp;<\/p>\n\n<h2 class=\"wp-block-heading\" id=\"preparations\">Preparations<\/h2>\n\n<h3 class=\"wp-block-heading\">Installing board package<\/h3>\n\n<p>The board package I am using is <a href=\"https:\/\/github.com\/stm32duino\/Arduino_Core_STM32\" target=\"_blank\" rel=\"noopener\">Arduino_Core_STM32<\/a> from stm32duino. I chose it because it supports some unofficial boards as well as many Nucleo boards. <strong>For the current release, you must use the Arduino IDE 2.x or go back to an older version of the board package (&lt; 2.8.0)<\/strong>. <\/p>\n<p>To install, first enter the following board administrator URL under File \u2192 Settings \u2192 &#8220;Additional boards manager URLs&#8221;:<\/p>\n<p>https:\/\/github.com\/stm32duino\/BoardManagerFiles\/raw\/main\/package_stmicroelectronics_index.json<\/p>\n\n<p>Then go to the boards manager and enter STM32 as the search term. You will find the package under the name <strong>STM32 MCU based Boards<\/strong>. Click on &#8220;Install&#8221;.  <\/p>\n<p>Is this installation description too short for you? Then you will find detailed instructions with pictures <a href=\"https:\/\/github.com\/stm32duino\/Arduino_Core_STM32\/wiki\/Getting-Started#add-stm32-boards-support-to-arduino\">here<\/a>. &nbsp;<\/p>\n\n<h4 class=\"wp-block-heading\">Alternative board package: STM32F1XX\/GD32F1XX<\/h4>\n\n<p>With STM32F1XX\/GD32F1XX there is another, quite common board package, which is now outdated. You can find it <a href=\"https:\/\/github.com\/rogerclarkmelbourne\/Arduino_STM32\" target=\"_blank\" rel=\"noopener\">here<\/a> on GitHub under the name Arduino_STM32. As the name STM32<strong>F1<\/strong>XX\/GD32F1XX suggests, the package only supports some of the STM32 boards, but some additional boards with microcontrollers from Giga Device. It is also characterized by lean code and broad community support.   &nbsp;<\/p>\n\n<h3 class=\"wp-block-heading\">Optional: Installing STMCubeProgrammer<\/h3>\n\n<p>You can download STMCubeProgrammer <a href=\"https:\/\/www.st.com\/en\/development-tools\/stm32cubeprog.html#get-software\" target=\"_blank\" rel=\"noopener\">here<\/a> for free. Among other things, it allows you: <\/p>\n<ul>\n<li>Flashing a bootloader.<\/li>\n<li>Getting information about your STM32 chip.<\/li>\n<li>Reading the flash and writing to it.<\/li>\n<li>Setting up write protection.<\/li>\n<li>Making certain settings, e.g. for the watchdog.<\/li>\n<li>Reading registers.<\/li>\n<\/ul>\n<p>You can also use your STM32 boards without this program. However, I recommend it, especially if you do a lot with the BluePill. &nbsp;<\/p>\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/07\/STM32CubeProgrammer-1024x545.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"545\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/07\/STM32CubeProgrammer-1024x545.png\" alt=\"STM32CubeProgrammer - Program Surface\" class=\"wp-image-24267\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/07\/STM32CubeProgrammer-1024x545.png 1024w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/07\/STM32CubeProgrammer-300x160.png 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/07\/STM32CubeProgrammer-768x409.png 768w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/07\/STM32CubeProgrammer.png 1302w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">STM32CubeProgrammer<\/figcaption><\/figure>\n\n<h2 class=\"wp-block-heading\" id=\"bluepill_variants\">BluePill board variants<\/h2>\n\n<h4 class=\"wp-block-heading\">STMF103C8T6- and STM32F103CB-based BluePill boards<\/h4>\n\n<p>In most cases, your BluePill boards will be the version with the STMF103C8T6, which should originally have a flash of 64 kB. There is also a version with 128 kB RAM (F103CBT6). However, many F103C8T6 chips actually have 128 kB flash. You can find out how much flash your board has in the appendix. F103C8T6 chips with 128 kB <em>can<\/em> be fake, but they <em>don&#8217;t have to<\/em> be, as ST sometimes uses higher-quality chips for logistical reasons.    &nbsp;<\/p>\n<p>There are also variants with microcontrollers from <a href=\"https:\/\/www.gigadevice.com\/\" target=\"_blank\" rel=\"noopener\">Giga Device<\/a>, such as the GD32F103xx family.<\/p>\n\n<h4 class=\"wp-block-heading\">STM32F103C6T6-based BluePill boards<\/h4>\n\n<p>With 32 kB flash, 10 kB RAM and fewer interfaces, the STM32F103C6T6 is the little brother of the STM32F103C8T6. Apart from the different microcontroller, the boards assembled with the &#8220;C6T6&#8221; usually have the same design. <\/p>\n<p>What didn&#8217;t work for me with these boards was uploading sketches via HID bootloader over USB (more on this below). Otherwise, they did what they were supposed to do. However, I did not test these boards intensively.  <\/p>\n<p>In two out of four orders from different stores, I received the big brother instead of the STM32F103C6T6 variant without comment.&nbsp; &nbsp;<\/p>\n\n<h4 class=\"wp-block-heading\">BluePill boards with counterfeit chips<\/h4>\n\n<p>As already mentioned, BluePill boards with counterfeit chips, especially with alleged STM32F103C8T6 microcontrollers, are widespread. Most counterfeits work in principle, but there are deviations in the details. For example, there are reports of excessive power consumption, as some fake chips ignore low power functions. Others report general instability. The HID bootloader also does not work with many fake chips. Further indications of fakes are     <\/p>\n<ul>\n<li>Chip labeling that is only printed on and not lasered in. The laser engraving should be visible. <\/li>\n<li>Obviously wrong ST logo.<\/li>\n<\/ul>\n<p>I received a BluePill version, which according to the (printed) label is equipped with an STMF103C8T6, but even has a flash of 256 kB.&nbsp;<\/p>\n\n<h4 class=\"wp-block-heading\">BluePill boards with wrong parts<\/h4>\n\n<p>Then there are BluePill boards with a false pull-up resistor for the D+ line of the USB connection. You will find the resistor on the back of the board, labeled as R10. This resistor should have a size of 1.5 k\u03a9 (label: 152); instead, you can probably also find R10 resistors with 10 k\u03a9 (label: 103). However, none have come between my fingers. A hardware solution for the associated problems can be found <a href=\"https:\/\/www.instructables.com\/Programming-STM32-BluePill-Via-Arduino-for-Beginne\/\" target=\"_blank\" rel=\"noopener\">here<\/a>; a software solution can be found <a href=\"https:\/\/amitesh-singh.github.io\/stm32\/2017\/05\/27\/Overcoming-wrong-pullup-in-blue-pill.html\" target=\"_blank\" rel=\"noopener\">here<\/a>.    &nbsp;<\/p>\n\n<h2 class=\"wp-block-heading\" id=\"bluepill_upload\">Uploading sketches to the BluePill board<\/h2>\n\n<p>Although the BluePill board has a USB port, it cannot be programmed via USB without further precautions. I will show you several methods for uploading programs. <\/p>\n\n<h3 class=\"wp-block-heading\" id=\"bluepill_ftdi\">Uploading via USB-to-TTL adapter<\/h3>\n\n<h4 class=\"wp-block-heading\">Connection<\/h4>\n\n<p>For this method, you need a USB-to-TTL or FTDI adapter. It is best to use a model that can be switched to 3.3 volts. Connect the adapter to the BluePill board as follows:  <\/p>\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/07\/bluepill_ftdi-1024x350.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"350\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/07\/bluepill_ftdi-1024x350.png\" alt=\"BluePill with FTDI adapter\" class=\"wp-image-24270\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/07\/bluepill_ftdi-1024x350.png 1024w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/07\/bluepill_ftdi-300x103.png 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/07\/bluepill_ftdi-768x263.png 768w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/07\/bluepill_ftdi-1320x451.png 1320w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/07\/bluepill_ftdi.png 1334w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Programming BluePill with USB-to-TTL adapter<\/figcaption><\/figure>\n\n<p>A9 is TXD1, A10 is RXD1.&nbsp;<\/p>\n<p>As most of the pins on the BluePill boards are 5V-tolerant (as input!), you could also work with five volts here. But since this does not apply to all pins and also not to pins in ADC mode, I would advise you to generally work with 3.3 volts so that you don&#8217;t forget it at some point. &nbsp;<\/p>\n\n<h4 class=\"wp-block-heading\">Settings in the Arduino IDE<\/h4>\n\n<p>In the Arduino IDE, choose your board under &#8220;Tools&#8221;: &#8220;STM32 MCU based boards&#8221; \u2192 &#8220;Generic STM32F1 series&#8221;. Then set the correct version under &#8220;Board part number&#8221;: <\/p>\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/07\/bluepill_versions_in_ide.png\"><img loading=\"lazy\" decoding=\"async\" width=\"237\" height=\"83\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/07\/bluepill_versions_in_ide.png\" alt=\"BluePill selection in Arduino IDE \" class=\"wp-image-24274\"\/><\/a><figcaption class=\"wp-element-caption\">BluePill selection in Arduino IDE <\/figcaption><\/figure>\n\n<p>Select the port to which your USB-to-TTL adapter is connected and set the following as the &#8220;Upload Method&#8221;:&nbsp;<\/p>\n<ul>\n<li>Upload method: STM32CubeProgrammer (Serial)<\/li>\n<\/ul>\n\n<p>If you want to use the serial monitor, there are two options:&nbsp;<\/p>\n<ol>\n<li>U(S)ART support: Enabled (generic &#8216;Serial&#8217;).&nbsp;\n<ul>\n<li>Serial monitor is connected via the USB-to-TTL adapter.<\/li>\n<\/ul>\n<\/li>\n<li>USB support (if available): &#8220;CDC (generic &#8216;Serial&#8217; supersede U(S)ART)&#8221;\n<ul>\n<li>Serial monitor is connected via the USB port of the BluePill board.<\/li>\n<li>The USB connection appears as a separate port.&nbsp;<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n<p>If you set 1 <em>and<\/em> 2 as specified above, setting 2 will &#8220;override&#8221; setting 1.<\/p>\n\n<p>Otherwise, leave the settings unchanged:<\/p>\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/07\/settings.png\"><img loading=\"lazy\" decoding=\"async\" width=\"431\" height=\"224\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/07\/settings.png\" alt=\"BluePill - Settings in the Arduino IDE\" class=\"wp-image-24278\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/07\/settings.png 431w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/07\/settings-300x156.png 300w\" sizes=\"auto, (max-width: 431px) 100vw, 431px\" \/><\/a><figcaption class=\"wp-element-caption\">Settings in the Arduino IDE<\/figcaption><\/figure>\n\n<h4 class=\"wp-block-heading\">Settings on the board<\/h4>\n\n<p>To upload sketches to the BluePill board via serial, you must set it to programming mode. To do this, set the BOOT0 jumper to 1 and leave the BOOT1 jumper at 0. Then press the reset button. <\/p>\n<p>More precisely, the above setting leads to the &#8220;System Memory Boot Mode&#8221;. This means that the boot process starts in the system memory. The STM32F1x microcontroller has a hardware bootloader there.  <\/p>\n<p>In the BOOT0 = 0 position, the STM32F1x is in &#8220;Main Flash Memory Boot Mode&#8221;. This means that the boot process starts in the flash memory where your uploaded program is saved to. &nbsp;<\/p>\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:25%\"><\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:50%\">\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/blue_pill_boot_settings-1-1024x427.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"427\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/blue_pill_boot_settings-1-1024x427.jpg\" alt=\"BluePill - BOOTx Jumper\" class=\"wp-image-24084\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/blue_pill_boot_settings-1-1024x427.jpg 1024w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/blue_pill_boot_settings-1-300x125.jpg 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/blue_pill_boot_settings-1-768x320.jpg 768w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/blue_pill_boot_settings-1.jpg 1102w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Boot Mode &#8211; left: System Memory, right: Main Flash Memory <\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:25%\"><\/div>\n<\/div>\n\n<h4 class=\"wp-block-heading\">Uploading an example sketch<\/h4>\n\n<p>Once you have made all the settings, upload your first sketch using the &#8220;upload arrow&#8221;. You could use the following example to test the serial monitor: <\/p>\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-group=\"blink_plus_serial_monitor.ino\" data-enlighter-title=\"blink_plus_serial_monitor.ino\">void setup() {\n  Serial.begin(115200);\n  pinMode(LED_BUILTIN, OUTPUT);\n}\n\nvoid loop() {\n  digitalWrite(LED_BUILTIN, HIGH);\n  delay(1000);                    \n  digitalWrite(LED_BUILTIN, LOW); \n  delay(1000);                     \n  Serial.println(\"Hello World\");\n}\n<\/pre>\n\n<p>The sketch starts immediately after uploading. A new reset leads back to programming mode. To prevent this, set the BOOT0 jumper back to 0.  <\/p>\n\n<h3 class=\"wp-block-heading\" id=\"bluepill_swd\">Uploading via SWD (Serial Wire Debug)<\/h3>\n\n<p>Serial Wire Debug is an ARM-specific communication interface based on JTAG (Joint Test Action Group). In contrast to JTAG, SWD requires only one data line (SWDIO) and one clock line (SW(D)CLK). <\/p>\n<p>To be able to use SWD, you need an ST-LINK or a J-Link programmer (from <a href=\"https:\/\/www.segger.com\/\" target=\"_blank\" rel=\"noopener\">SEGGER Microcontroller<\/a>), whereby the J-Link programmer is more of a professional device. There are also various SWD programmers that are advertised as &#8220;ST_LINK compatible&#8221;. <\/p>\n\n<h4 class=\"wp-block-heading\">Uploading with ST-LINK\/V2 Mini<\/h4>\n\n<p>The ST-LINK\/V2 Mini is probably the most cost-effective SWD programmer with a price of &lt; 10 euros. The &#8220;Mini&#8221; is usually omitted. &nbsp;<\/p>\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/07\/stlink_v2_mini-1024x257.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"257\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/07\/stlink_v2_mini-1024x257.jpg\" alt=\"ST_LINK\/V2 Mini\" class=\"wp-image-24283\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/07\/stlink_v2_mini-1024x257.jpg 1024w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/07\/stlink_v2_mini-300x75.jpg 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/07\/stlink_v2_mini-768x193.jpg 768w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/07\/stlink_v2_mini.jpg 1075w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">ST_LINK\/V2 Mini<\/figcaption><\/figure>\n\n<p>The programmer has a USB-A connector under the protective cap on one side and a 10-pin socket on the other. You connect the ST-LINK\/V2 to your BluePill board as follows: <\/p>\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"282\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/blue_pill_stlink_v2-1024x282.png\" alt=\"BluePill - ST-Link\/V2 Connection\" class=\"wp-image-24112\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/blue_pill_stlink_v2-1024x282.png 1024w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/blue_pill_stlink_v2-300x83.png 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/blue_pill_stlink_v2-768x212.png 768w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/blue_pill_stlink_v2.png 1270w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Programming BluePill with ST-Link\/V2<\/figcaption><\/figure>\n\n<p>Make sure that you do not connect the 3.3V pin of the BluePill board to the 5.0V pin of the programmer.&nbsp;<\/p>\n<p>You can leave the BOOTx jumpers on the BluePill board in the zero position when programming via SWD. In the Arduino IDE, select the upload method: <\/p>\n<ul>\n<li>Upload method: &#8220;STM32CubeProgrammer (SWD)&#8221;<\/li>\n<\/ul>\n<p>You cannot establish a connection to the serial monitor via the SWD pins (with the ST-LINK\/V2). Instead, you can use the USB port for this purpose. To do this, select in the settings:  <\/p>\n<ul>\n<li>USB support (if available): CDC (generic &#8216;Serial&#8217; supersede U(S)ART)&nbsp;<\/li>\n<\/ul>\n<p>Alternatively, you could also use a USB-to-TTL adapter, but then without the USB support.&nbsp;<\/p>\n\n<h4 class=\"wp-block-heading\">The &#8220;big&#8221; ST-LINK\/V2<\/h4>\n<div class=\"wp-block-image\">\n<figure class=\"alignright size-medium\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/07\/stlink_v2_big-1-179x300.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"179\" height=\"300\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/07\/stlink_v2_big-1-179x300.jpg\" alt=\"ST-LINK\/V2\" class=\"wp-image-24288\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/07\/stlink_v2_big-1-179x300.jpg 179w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/07\/stlink_v2_big-1.jpg 597w\" sizes=\"auto, (max-width: 179px) 100vw, 179px\" \/><\/a><\/figure>\n<\/div>\n<p>The &#8220;actual&#8221; ST-LINK\/V2 is larger. It is connected to the computer via a USB micro-connector. The 4-pin socket in the middle is an interface for STM8 microcontrollers. The 20-pin socket allows connection to STM32 microcontrollers via SWD or JTAG.   <\/p>\n<p>If you have boards with a 20-pin socket or you want to program via JTAG, then choosing this programmer makes sense. For most people, the &#8220;mini&#8221; version will be sufficient. <\/p>\n<p>Finally, there is the ST-LINK\/V2-ISOL version, which provides electrical isolation from the microcontroller.&nbsp;<\/p>\n<p>Only 2 of the pins plus the power supply are required for the SWD connection. You have to be a little careful not to miscount and use the wrong pins. &nbsp;&nbsp;<\/p>\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/07\/st_link_v2_white_swd_pins-1024x237.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"237\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/07\/st_link_v2_white_swd_pins-1024x237.png\" alt=\"\" class=\"wp-image-24482\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/07\/st_link_v2_white_swd_pins-1024x237.png 1024w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/07\/st_link_v2_white_swd_pins-300x70.png 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/07\/st_link_v2_white_swd_pins-768x178.png 768w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/07\/st_link_v2_white_swd_pins-1320x306.png 1320w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/07\/st_link_v2_white_swd_pins.png 1355w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">SWD pins of the 20-pin socket of the ST-LINK\/V2<\/figcaption><\/figure>\n\n<h3 class=\"wp-block-heading\" id=\"bluepill_hid\">Easiest: Uploading via HID bootloader and USB<\/h3>\n\n<p>The fiddling with the jumpers when flashing via serial can be annoying. Connecting an STM32 board to an ST-LINK\/V2 (Mini) is also inconvenient (although you should always know how well off you are if you count <em>that<\/em> as one of your problems \ud83d\ude09 ). <\/p>\n<p>It would be more convenient if you could upload your sketches just via USB. This is actually possible by flashing a suitable bootloader. We use an HID bootloader, which is so called because it communicates according to the HID (Human Interface Device) protocol. The HID protocol was developed for USB devices such as keyboards and mice. The great thing about it is that you don&#8217;t need to install a driver.    <\/p>\n<p><strong>First, it should be said that this did not work for me with all BluePill boards<\/strong>, although the non-functioning ones were visually identical to the functioning boards, including the resistor values. I have not found out the reason yet. <\/p>\n\n<h4 class=\"wp-block-heading\">Variant 1: Flashing the HID bootloader via serial<\/h4>\n\n<p>There are already a number of instructions on how to upload the bootloader to the BluePill board. You can find a detailed YouTube video <a href=\"https:\/\/www.youtube.com\/watch?v=Myon8H111PQ\" target=\"_blank\" rel=\"noopener\">here<\/a> and instructions with many pictures <a href=\"https:\/\/mischianti.org\/stm32-programming-stm32f1-stm32f4-via-usb-with-hid-boot-loader-3\/\" target=\"_blank\" rel=\"noopener\">here<\/a>. And here is my own quick guide: <\/p>\n\n<ol>\n<li>Download the bootloader package stm32_binaries.zip from <a href=\"https:\/\/github.com\/Serasidis\/STM32_HID_Bootloader\/releases\" target=\"_blank\" rel=\"noopener\">here<\/a> and unzip it.\n<ul>\n<li>For the BluePill board, hid_generic_pc13.bin is the right choice. &#8220;pc13&#8221; stands for the pin that is connected to the board LED. You can find the bootloader under &#8230;\\stm32_binaries\\stm32_binaries\\F103\\low_and_medium_density.  &nbsp;<\/li>\n<\/ul>\n<\/li>\n<li>Connect the BluePill board to the PC via a USB-to-TTL adapter as shown above.&nbsp;<\/li>\n<li>Set the Boot0 jumper to 1 and reset the board.<\/li>\n<li>Open STMCubeProgrammer. On the right-hand side, select UART and set the port to which the USB-to-TTL adapter is connected. Then click on &#8220;Connect&#8221;.  &nbsp;<\/li>\n<\/ol>\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1020\" height=\"693\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/stmcubeprogrammer.png\" alt=\"STMCubeProgrammer - Flashing the bootloader\" class=\"wp-image-24118\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/stmcubeprogrammer.png 1020w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/stmcubeprogrammer-300x204.png 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/stmcubeprogrammer-768x522.png 768w\" sizes=\"auto, (max-width: 1020px) 100vw, 1020px\" \/><figcaption class=\"wp-element-caption\">STMCubeProgrammer &#8211; Flashing the bootloader<\/figcaption><\/figure>\n\n<ol start=\"5\">\n<li>On the left-hand side of STMCubeProgrammer, go to &#8220;Erasing &amp; Programming&#8221;.&nbsp;<\/li>\n<li>Enter the path to hid_generic_pc13.bin in &#8220;File path&#8221;. &#8220;Start address&#8221; is 0x08000000. <\/li>\n<li>Click on &#8220;Start Programming&#8221;.&nbsp; Confirm the success message with OK and click on &#8220;Disconnect&#8221;, but leave the board connected to the power supply.&nbsp;<\/li>\n<li>Set the Boot0 jumper to 0 and reset the board. Now you can disconnect the USB-to-TTL adapter from the board. However, it will not interfere if you leave it connected.  <\/li>\n<li>Connect the board to the PC via USB.&nbsp;<\/li>\n<li>In the Arduino IDE you set:\n<ul>\n<li>Upload Method: &#8220;HID Bootloader 2.2&#8221;.<\/li>\n<li>USB Support (if available): &#8220;CDC (generic &#8216;Serial&#8217; supersede U(S)ART)&#8221;.<\/li>\n<li>U(S)ART support: &#8220;Enabled (generic &#8216;Serial&#8217;)&#8221;. However, this is not actually relevant. \n<ul>\n<li>You don&#8217;t see a port yet. That is OK. <\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<li>Upload a sketch. Now you can find the board under &#8220;Port&#8221; and can also use the serial monitor. &nbsp;<\/li>\n<\/ol>\n<p>Please let me know if any points are missing or misunderstood in these instructions.&nbsp;<\/p>\n\n<h4 class=\"wp-block-heading\">Variant 2 &#8211; Flashing the HID bootloader via ST-LINK\/V2<\/h4>\n\n<p>If you want to flash the bootloader to the BluePill board via ST-LINK V2, there are only minor differences in the procedure:<\/p>\n\n<ul>\n<li>Connect the ST-LINK\/V2 to the BluePill board and the PC.<\/li>\n<li>In STMCubeProgrammer, select ST-LINK instead of UART.<\/li>\n<li>You can leave the jumpers on the BluePill in the zero position.&nbsp;<\/li>\n<\/ul>\n\n<h4 class=\"wp-block-heading\">Deleting the HID bootloader<\/h4>\n\n<p>If you flash sketches to your board via SWD or serial, the HID bootloader will be overwritten. This is the easiest way to get rid of the bootloader. Or you can delete the bootloader using the &#8220;Erase flash memory&#8221; function in STMCubeProgrammer. However, this only worked &#8211;&nbsp;at least for me&nbsp;&#8211; via the ST-LINK\/V2, but not via Serial.   <\/p>\n\n<h3 class=\"wp-block-heading\" id=\"bluepill_maple\">Uploading via Maple-DFU-Bootloader<\/h3>\n\n<p>I do not recommend this method because, unlike uploading via HID bootloader, you will need to install additional drivers. I am only introducing it here for the sake of completeness. By the way, DFU stands for <strong>D<\/strong>evice <strong>F<\/strong>irmware <strong>U<\/strong>pgrade.  <\/p>\n<p>Here are the brief instructions:<\/p>\n<ul>\n<li>Download the correct bootloader from <a href=\"https:\/\/github.com\/rogerclarkmelbourne\/STM32duino-bootloader\/tree\/master\" target=\"_blank\" rel=\"noopener\">STM32duino-bootloader<\/a>. In most cases this should be generic_boot20_pc13.bin. You can find it here in the <a href=\"https:\/\/github.com\/rogerclarkmelbourne\/STM32duino-bootloader\/tree\/master\/binaries\" target=\"_blank\" rel=\"noopener\">binaries<\/a> directory. Double-click the file, go to the download icon, and save the file where you find it.   &nbsp;<\/li>\n<li>Upload the bootloader with STM32CubeProgrammer onto your BluePill board. You do this as described above for the HID bootloader. &nbsp;<\/li>\n<li>Download the Arduino_STM32 package <a href=\"https:\/\/github.com\/rogerclarkmelbourne\/Arduino_STM32\" target=\"_blank\" rel=\"noopener\">here<\/a>. To do this, click on the green &#8220;Code&#8221; button, then on &#8220;Download ZIP&#8221;. Unzip the package (somewhere).  &nbsp;<\/li>\n<li>Go to the drivers\/win directory and execute install_drivers.bat. This will install the Maple drivers. <\/li>\n<li>Connect the board to the PC via USB. BOOT0 and BOOT1 shall be set to 0. <\/li>\n<li>In the Arduino IDE, select the correct board:\n<ul>\n<li>Select the correct port (not the one under &#8220;dfu Ports&#8221;, if something appears there).<\/li>\n<li>Upload method: &#8220;Maple DFU Bootloader 2.0&#8221;.<\/li>\n<li>USB support: &#8220;CDC (generic &#8216;Serial&#8217; supersede U(S)ART)&#8221;.<\/li>\n<\/ul>\n<\/li>\n<li>Upload your sketch. You will probably get an error message at the end that the port you have set is not available. Change it. You can then upload new sketches without any further settings.   <\/li>\n<\/ul>\n\n<p>As already mentioned, I see no advantage of the Maple DFU bootloader over the HID bootloader. I was able to program the BluePill boards that could not be programmed with the HID bootloader exactly once using the Maple DFU bootloader. On the next upload, the Arduino IDE did not find the port. So no improvement here either.   &nbsp;<\/p>\n\n<h2 class=\"wp-block-heading\" id=\"blackpill_variants\">BlackPill variants<\/h2>\n\n<p>The name &#8220;BlackPill&#8221; is just as unprotected as &#8220;BluePill&#8221;. When people talk about &#8220;BlackPill&#8221;, they usually mean the design by WeAct Studio (WeAct for short). There is very little information about WeAct itself on the internet. Links to the company are classified as unsafe by Edge and Firefox. WeAct&#8217;s <a href=\"https:\/\/github.com\/WeActStudio\" target=\"_blank\" rel=\"noopener\">GitHub page<\/a> and the <a href=\"https:\/\/weactstudio.aliexpress.com\/store\/910567080\/pages\/all-items.html\" target=\"_blank\" rel=\"noopener\">WeAct Studio Shop<\/a> on AliExpress give an impression of what WeAct does.    &nbsp;<\/p>\n<p>The \u201cWeAct-BlackPill\u201d is based on the STM32F401CCU6 or the STM32F411CEU6. In addition to its black design, its three buttons \u201cNRST,\u201d \u201cBOOT0,\u201d and \u201cKEY\u201d are particularly striking. <\/p>\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/07\/blackpill_F401-1024x275.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"275\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/07\/blackpill_F401-1024x275.jpg\" alt=\"BlackPill board\" class=\"wp-image-24308\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/07\/blackpill_F401-1024x275.jpg 1024w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/07\/blackpill_F401-300x81.jpg 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/07\/blackpill_F401-768x206.jpg 768w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/07\/blackpill_F401-1320x354.jpg 1320w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/07\/blackpill_F401.jpg 1498w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">BlackPill with STM32F401CCU6 MCU<\/figcaption><\/figure>\n\n<p>But, as previously mentioned, the name &#8220;BlackPill&#8221; is not protected, which is why you will come across many other variants. For example, there is an STM32F103C8T6-based model <a href=\"https:\/\/robotdyn.com\/stm32-arm-arduino-mini-system-dev-board-blue-pill-with-arduino-bootloader.html\" target=\"_blank\" rel=\"noopener\">here<\/a>. The model shown below, based on the STM32F401RCT6, is somewhat bizarre. Due to the unfortunate spacing of the pin headers, it does not fit on breadboards:   <\/p>\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:25%\"><\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:50%\">\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/STM32F401RCT6-1.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"1000\" height=\"437\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/STM32F401RCT6-1.jpg\" alt=\"STM32F401RCT6-based BlackPill\" class=\"wp-image-24165\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/STM32F401RCT6-1.jpg 1000w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/STM32F401RCT6-1-300x131.jpg 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/STM32F401RCT6-1-768x336.jpg 768w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/a><figcaption class=\"wp-element-caption\">STM32F401RCT6 BlackPill, fixed on one side <\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:25%\"><\/div>\n<\/div>\n\n<p>Otherwise the board worked (board part number: &#8220;Generic F401RCTx&#8221;).<\/p>\n\n<h2 class=\"wp-block-heading\" id=\"blackpill_upload\">Uploading sketches to the BlackPill board<\/h2>\n\n<h3 class=\"wp-block-heading\" id=\"blackpill_dfu\">Uploading via DFU and USB<\/h3>\n\n<p>You can program the BlackPill conveniently via USB, as you do not need to flash an additional bootloader. First, set the correct board in the Arduino IDE: STM32 MCU based boards \u2192 Generic STM32F4 series. Then select the correct variant, e.g.&nbsp;BlackPill 411CE.  &nbsp;<\/p>\n<p>Select &#8220;STMCubeProgrammer (DFU)&#8221; as the upload method. If you want to access the serial monitor via USB, select &#8220;CDC (generic &#8216;Serial&#8217; supersede U(S)ART)&#8221; as USB support. &nbsp;<\/p>\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/07\/settings_blackpill.png\"><img loading=\"lazy\" decoding=\"async\" width=\"494\" height=\"222\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/07\/settings_blackpill.png\" alt=\"Setting example for the BlackPill\" class=\"wp-image-24374\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/07\/settings_blackpill.png 494w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/07\/settings_blackpill-300x135.png 300w\" sizes=\"auto, (max-width: 494px) 100vw, 494px\" \/><\/a><figcaption class=\"wp-element-caption\">Setting example for the BlackPill<\/figcaption><\/figure>\n\n<p>To enter &#8220;DFU mode&#8221;, do the following:<\/p>\n<ul>\n<li>Press and hold the BOOT0 button.<\/li>\n<li>In the meantime, briefly press the NRST button.<\/li>\n<li>After 1 to 2 seconds, release the BOOT0 button.&nbsp;<\/li>\n<\/ul>\n<p>An entry in the category &#8220;dfu Ports&#8221; should appear in the ports. Select the port and upload your sketch. &nbsp;<\/p>\n<p>Under Ports, the &#8220;dfu Port&#8221; should now have disappeared. If you have opted for USB support, you should see a new port. To upload further sketches, repeat the procedure with the BOOT0 and NRST buttons and set the DFU port again.  &nbsp;<\/p>\n<p><strong>Unfortunately, switching to DFU mode does not always work.<\/strong> Windows will then display a message that the USB device was not recognized. Repeat the process until it works. Sometimes it helps to disconnect the USB cable briefly. Also, in my experience, short USB cables seem to work better than long ones.   &nbsp; &nbsp;<\/p>\n\n<h3 class=\"wp-block-heading\" id=\"blackpill_serial_SWD\">Uploading via serial or SWD<\/h3>\n\n<p>The upload via serial using an USB-to-TTL adapter works in the same way as with the BluePill, except that you do not move any jumpers but instead press the NRST button while holding down the BOOT0 button, as with the DFU method. Select the port of the USB-to-TTL adapter and set &#8220;STM32CubeProgrammer (Serial)&#8221; as the upload method. &nbsp;<\/p>\n<p>The upload via SWD using the ST-LINK\/V2 works in the same way as with the BluePill, so I can save myself further explanations.&nbsp;&nbsp;<\/p>\n\n<h3 class=\"wp-block-heading\" id=\"blackpill_weact_hid\">Not Arduino-compatible: WeAct HID bootloader<\/h3>\n\n<p>If you are annoyed by pressing the NRST and BOOT0 buttons, you may be wondering whether there is an HID bootloader solution for the BlackPill board. <strong>First of all: to my knowledge, there is no really working solution<\/strong>, at least not for users of the Arduino IDE. Nevertheless, I would like to share my experiences. <\/p>\n<p>The bootloader WeAct_HID_Bootloader_F4x1 is pre-installed on brand new WeAct BlackPill boards. When uploading sketches via DFU, SWD or serial, you overwrite it. It is also available <a href=\"https:\/\/github.com\/WeActStudio\/WeAct_HID_Bootloader_F4x1\" target=\"_blank\" rel=\"noopener\">here<\/a> on GitHub. However, the bootloader is not available there as a finished bin file; instead, you have to create it first. How to do this is <a href=\"https:\/\/github.com\/WeActStudio\/WeAct_HID_Bootloader_F4x1\/issues\/2\" target=\"_blank\" rel=\"noopener\">discussed here<\/a>. One of the participants has made the final bin file available <a href=\"https:\/\/github.com\/user-attachments\/files\/18183810\/WeAct_HID_Bootloader_F4x1.bin.zip\" target=\"_blank\" rel=\"noopener\">here<\/a>.     &nbsp;<\/p>\n<p>After unzipping, the file WeAct_HID_Bootloader_F4x1.bin can be loaded onto the BlackPill board with STM32CubeProgrammer. If you reset the board while pressing the KEY button, you will enter bootloader mode. However, the upload does not work with the Arduino IDE and the upload option &#8220;HID Bootloader 2.2&#8221;.  <\/p>\n<p>Out of curiosity, I tried the command line tool <a href=\"https:\/\/github.com\/WeActStudio\/WeActStudio.MiniSTM32F4x1\/blob\/master\/Soft\/WeAct_HID_FW_Bootloader\/WeAct_HID_Flash-CLI.exe\" target=\"_blank\" rel=\"noopener\">WeAct_HID_Flash-CLI.exe<\/a> following <a href=\"https:\/\/hardwareliberopinerolo.github.io\/site\/blackpill\/\" target=\"_blank\" rel=\"noopener\">these instructions<\/a>. Despite a promising &#8220;Flash done!&#8221;, the sketch did not seem to have arrived on the board! <\/p>\n<p>If you know a working solution (for the Arduino IDE), please shar with me!<\/p>\n\n<h4 class=\"wp-block-heading\">Using the KEY button for other purposes<\/h4>\n\n<p>Even without a WeAct bootloader, the KEY button is not completely useless. PA0 is connected to GND via the KEY button. This means you can use the KEY button to trigger any actions. You can test this with the following small sketch.   &nbsp;<\/p>\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-group=\"key_test.ino\" data-enlighter-title=\"key_test.ino\">void setup() {\n  Serial.begin(115200);\n  pinMode(PA0, INPUT_PULLUP);\n}\n\nvoid loop() {\n  if(!digitalRead(PA0)){ \/\/ KEY pressed\n    Serial.println(\"KEY!\");\n    pinMode(LED_BUILTIN, OUTPUT); \/\/ LED on\n    delay(1000); \n    pinMode(LED_BUILTIN, INPUT);  \/\/ LED off        \n  }\n}\n<\/pre>\n\n<p>Here you can also see that the board LED is connected to VCC via a resistor. On the other side, it is connected to PC13. This is why the LED lights up when PC13 is OUTPUT\/LOW.  &nbsp;<\/p>\n\n<h2 class=\"wp-block-heading\" id=\"nucleo_upload\">Uploading sketches to Nucleo boards<\/h2>\n\n<p>The Nucleo boards have an integrated ST-LINK\/V2 programmer. This makes program uploads via USB connection child&#8217;s play. That&#8217;s almost boring after all the challenges of the Blue- and BlackPill!  <\/p>\n<p>First select the board family, i.e. Nucleo-32, -64 or -144, and then the correct model (&#8220;Board part number&#8221;). Here are the other settings: <\/p>\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/07\/settings_nucleo_432KC.png\"><img loading=\"lazy\" decoding=\"async\" width=\"374\" height=\"224\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/07\/settings_nucleo_432KC.png\" alt=\"Nucleo-Board Settings\" class=\"wp-image-24325\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/07\/settings_nucleo_432KC.png 374w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/07\/settings_nucleo_432KC-300x180.png 300w\" sizes=\"auto, (max-width: 374px) 100vw, 374px\" \/><\/a><figcaption class=\"wp-element-caption\">Nucleo-Board Settings<\/figcaption><\/figure>\n\n<h4 class=\"wp-block-heading\">Special features of the on-board ST-LINK\/V2<\/h4>\n\n<p>The ST-LINK\/V2 installed on the Nucleo boards is a newer version (ST-LINK\/V2-1 or higher). Two features are important here: &nbsp;<\/p>\n<ul>\n<li>The emulation of a USB mass storage device.<\/li>\n<li>A &#8220;virtual COM port&#8221;, i.e. a type of integrated USB-to-TTL adapter.<\/li>\n<\/ul>\n\n<p>The former causes the board to register as a USB mass storage device on the PC, i.e. like a USB stick or a USB hard disk. If you display your drives on the PC, the Nucleo board will appear there, e.g. the Nucleo-L432KC board as &#8220;Node-L432KC&#8221;. With the &#8220;Mass Storage&#8221; upload method, your sketch will then be copied to the board like to a drive.  &nbsp;<\/p>\n<p>The virtual COM port is already noticeable in the Arduino IDE in that a port is <em>always<\/em> displayed when the board is connected. This was different with the Blue- and BlackPills. The virtual COM port allows you to use serial via the USB port without having to activate USB support in the settings (if you do so anyway, the serial output will not work!). On the other hand, you must activate U(S)ART support if you want to use serial.   &nbsp;<\/p>\n<p>Since the on-board ST_LINK\/V2 still supports SWD, you can alternatively select &#8220;STM32CubeProgrammer (SWD)&#8221; as the upload method. <strong>With the Nucleo-L412KB you even have to choose this method<\/strong>, although this board is also recognized as a USB mass storage device. This is because it is not &#8220;Arm\u00ae Mbed Enabled\u2122&#8221;. Confusing!   &nbsp;<\/p>\n\n<h4 class=\"wp-block-heading\">And what is the purpose of the jumper connecting D2 and GND?<\/h4>\n\n<p>Anyone who buys a Nucleo 32 board is probably wondering what the jumper on the pin header that connects pin D2 to GND is for. On virgin Nucleo-32 boards there is a demo program that makes the green LED flash. If you remove the jumper, the flashing frequency changes. I don&#8217;t know the meaning of this. You can simply remove the jumper.    &nbsp;<\/p>\n\n<h2 class=\"wp-block-heading\" id=\"giga_upload\">Upload sketches to the Arduino GIGA R1 WiFi board<\/h2>\n\n<p>Like all official Arduino boards, the Arduino GIGA R1 WiFi has its own Arduino board package, namely &#8220;Arduino Mbed OS Giga boards&#8221;. You install it via the boards manager. As it is an Arduino-specific package, you do not need an additional board manager URL. You connect the board to the PC via the USB-C port, select the board and the correct port in the Arduino IDE and get started.    It&#8217;s as simple as that.<\/p>\n<p>In this case, the upload is controlled via a pre-installed software bootloader. If you need to reinstall it, you can put the board into DFU mode using the BOOT0 and RST buttons and flash the bootloader. Follow <a href=\"https:\/\/support.arduino.cc\/hc\/en-us\/articles\/7991505977116-Burn-the-bootloader-on-GIGA-R1-WiFi\" target=\"_blank\" rel=\"noopener\">these instructions<\/a>.  &nbsp;<\/p>\n\n<h2 class=\"wp-block-heading\" id=\"appendix\">Appendix 1 &#8211; Checking the real flash size<\/h2>\n\n<p>You can check the size of the flash memory with STMCubeProgrammer. How to install the program and connect it to your board is described in the article. In the &#8220;Target information&#8221; section you will find the entry &#8220;Flash size&#8221;. However, the information is not reliable. For example, I had a BluePill board that displayed 128 kB when connected via serial, but 64 kB when connected via ST-LINK (see below). Using this example, I would like to demonstrate with two small tests how you can check the actual available flash.     <\/p>\n<p>The simple variant is that you try to read the memory beyond 64 kB, i.e. from address 0x08010000. To do this, go to the &#8220;Memory &amp; File Editing&#8221; area, enter 0x08010000 as the address, set the &#8220;Size&#8221; to 0x10000 (= 65536) and then click on &#8220;Read&#8221;. &nbsp;<\/p>\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/STM32_flash_size_read_check-1024x590.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"590\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/STM32_flash_size_read_check-1024x590.png\" alt=\"STM32 boards - flash read above 64 KB\" class=\"wp-image-24242\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/STM32_flash_size_read_check-1024x590.png 1024w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/STM32_flash_size_read_check-300x173.png 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/STM32_flash_size_read_check-768x443.png 768w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/STM32_flash_size_read_check.png 1202w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Reading the flash beyond 64 kB<\/figcaption><\/figure>\n\n<p>The success message shows that the memory area between 64 and 128 KB can be read. If this should not work, you will receive the error message &#8220;Data read failed&#8221;. <\/p>\n\n<p>As a second test, we will attempt to write (even if this is no longer actually necessary). If you want to reproduce this, download the file ascii_repeat_64kb.bin <a href=\"https:\/\/github.com\/wollewald\/BlogStuff\/tree\/main\/ascii_repeat_64kb\" target=\"_blank\" rel=\"noopener\">here<\/a> (click on the file, then on the download symbol). It is exactly 64 kB in size and contains 256 times the extended ASCII table with 256 characters. Upload the file content, starting at the start address 0x08010000 (i.e. at 64 KB). Activate &#8220;Verify program&#8221;. If everything goes well, you will receive the message &#8220;Download verified successfully&#8221;. In the event of an error, the message will read: &#8220;failed to download the file&#8221;.      <\/p>\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/STM32_flash_size_write_check-1024x590.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"590\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/STM32_flash_size_write_check-1024x590.png\" alt=\"STM32-Boards - Flash Write Test above 64 KB\" class=\"wp-image-24244\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/STM32_flash_size_write_check-1024x590.png 1024w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/STM32_flash_size_write_check-300x173.png 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/STM32_flash_size_write_check-768x443.png 768w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/STM32_flash_size_write_check.png 1202w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">STM32 Flash Write Test above 64 KB<\/figcaption><\/figure>\n\n<p>You can read the flash content via &#8220;Memory &amp; File Editing&#8221;. If you select 8-bit as &#8220;Data width&#8221; and then click on &#8220;Read&#8221; again, it should look like this:  <\/p>\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/STM32_read_written_flash.png\"><img loading=\"lazy\" decoding=\"async\" width=\"889\" height=\"382\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/STM32_read_written_flash.png\" alt=\"STM32-Boards Flash Size Test - reading the written flash\" class=\"wp-image-24246\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/STM32_read_written_flash.png 889w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/STM32_read_written_flash-300x129.png 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/STM32_read_written_flash-768x330.png 768w\" sizes=\"auto, (max-width: 889px) 100vw, 889px\" \/><\/a><figcaption class=\"wp-element-caption\">STM32 Flash Size Test &#8211; reading the written flash<\/figcaption><\/figure>\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In part 1, I give an overview of STM32 and Nucleo boards and explain how to upload sketches to them using the Arduino IDE. Various methods are available. <\/p>\n","protected":false},"author":1,"featured_media":24088,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[543,2779],"tags":[556,2753,2746,2745,2528,2760,1069,2755,2763,2752,2758,2762,2497,2747,2748,2761,2764,2744,2395,2757,2756,2743,2754,2749,2751,2750,2071,2759],"class_list":["post-24444","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-boards-and-microcontrollers","category-lang-en-en","tag-arduino-en-2","tag-arduino-core-stm32-en","tag-blackpill-en","tag-bluepill-en","tag-board-package","tag-boot0-en","tag-bootloader-en-2","tag-dfu-en","tag-flash-size-en","tag-giga-r1-wifi-en","tag-hid-en","tag-jumper-en","tag-key-en","tag-l412kb-en","tag-l432kc-en","tag-maple-en","tag-nomenclature","tag-nucleo-en","tag-serial-en","tag-st_link-v2-en","tag-st-link-en","tag-stm32-en","tag-stm32cubeprogrammer-en","tag-stm32f103c8t6-en","tag-stm32f401ccu6-en","tag-stm32f411ce06-en","tag-swd-en","tag-weact-en"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>STM32 boards \u2013 Part 1: Overview and Upload &#8226; Wolles Elektronikkiste<\/title>\n<meta name=\"description\" content=\"In Part 1, I give an overview of STM32 boards and show you how to upload sketches to them using the Arduino IDE.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/wolles-elektronikkiste.de\/en\/stm32-boards-part-1-overview-and-upload\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"STM32 boards \u2013 Part 1: Overview and Upload &#8226; Wolles Elektronikkiste\" \/>\n<meta property=\"og:description\" content=\"In Part 1, I give an overview of STM32 boards and show you how to upload sketches to them using the Arduino IDE.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/wolles-elektronikkiste.de\/en\/stm32-boards-part-1-overview-and-upload\" \/>\n<meta property=\"og:site_name\" content=\"Wolles Elektronikkiste\" \/>\n<meta property=\"article:published_time\" content=\"2025-07-28T20:00:08+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-09-07T09:36:04+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/post_image_stm32.png\" \/>\n\t<meta property=\"og:image:width\" content=\"984\" \/>\n\t<meta property=\"og:image:height\" content=\"984\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Wolfgang Ewald\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Wolfgang Ewald\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"25 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\\\/stm32-boards-part-1-overview-and-upload#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\\\/stm32-boards-part-1-overview-and-upload\"},\"author\":{\"name\":\"Wolfgang Ewald\",\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en#\\\/schema\\\/person\\\/b774e4d64b4766889a2f7c6e5ec85b46\"},\"headline\":\"STM32 boards \u2013 Part 1: Overview and Upload\",\"datePublished\":\"2025-07-28T20:00:08+00:00\",\"dateModified\":\"2025-09-07T09:36:04+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\\\/stm32-boards-part-1-overview-and-upload\"},\"wordCount\":4944,\"commentCount\":4,\"publisher\":{\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en#\\\/schema\\\/person\\\/b774e4d64b4766889a2f7c6e5ec85b46\"},\"image\":{\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\\\/stm32-boards-part-1-overview-and-upload#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/post_image_stm32.png\",\"keywords\":[\"Arduino\",\"Arduino Core STM32\",\"BlackPill\",\"BluePill\",\"board package\",\"BOOT0\",\"Bootloader\",\"DFU\",\"flash size\",\"Giga R1 WiFi\",\"HID\",\"Jumper\",\"KEY\",\"L412KB\",\"L432KC\",\"Maple\",\"Nomenclature\",\"Nucleo\",\"Serial\",\"ST_LINK\\\/V2\",\"ST-LINK\",\"STM32\",\"STM32CubeProgrammer\",\"STM32F103C8T6\",\"STM32F401CCU6\",\"STM32F411CE06\",\"SWD\",\"WeAct\"],\"articleSection\":[\"Boards and Microcontrollers\",\"English\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\\\/stm32-boards-part-1-overview-and-upload#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\\\/stm32-boards-part-1-overview-and-upload\",\"url\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\\\/stm32-boards-part-1-overview-and-upload\",\"name\":\"STM32 boards \u2013 Part 1: Overview and Upload &#8226; Wolles Elektronikkiste\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\\\/stm32-boards-part-1-overview-and-upload#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\\\/stm32-boards-part-1-overview-and-upload#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/post_image_stm32.png\",\"datePublished\":\"2025-07-28T20:00:08+00:00\",\"dateModified\":\"2025-09-07T09:36:04+00:00\",\"description\":\"In Part 1, I give an overview of STM32 boards and show you how to upload sketches to them using the Arduino IDE.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\\\/stm32-boards-part-1-overview-and-upload#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\\\/stm32-boards-part-1-overview-and-upload\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\\\/stm32-boards-part-1-overview-and-upload#primaryimage\",\"url\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/post_image_stm32.png\",\"contentUrl\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/post_image_stm32.png\",\"width\":984,\"height\":984},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\\\/stm32-boards-part-1-overview-and-upload#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"STM32 boards \u2013 Part 1: Overview and Upload\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en#website\",\"url\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\",\"name\":\"Wolles Elektronikkiste\",\"description\":\"Die wunderbare Welt der Elektronik\",\"publisher\":{\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en#\\\/schema\\\/person\\\/b774e4d64b4766889a2f7c6e5ec85b46\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en#\\\/schema\\\/person\\\/b774e4d64b4766889a2f7c6e5ec85b46\",\"name\":\"Wolfgang Ewald\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/wp-content\\\/uploads\\\/2019\\\/03\\\/cropped-Logo-1.png\",\"url\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/wp-content\\\/uploads\\\/2019\\\/03\\\/cropped-Logo-1.png\",\"contentUrl\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/wp-content\\\/uploads\\\/2019\\\/03\\\/cropped-Logo-1.png\",\"width\":512,\"height\":512,\"caption\":\"Wolfgang Ewald\"},\"logo\":{\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/wp-content\\\/uploads\\\/2019\\\/03\\\/cropped-Logo-1.png\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"STM32 boards \u2013 Part 1: Overview and Upload &#8226; Wolles Elektronikkiste","description":"In Part 1, I give an overview of STM32 boards and show you how to upload sketches to them using the Arduino IDE.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/wolles-elektronikkiste.de\/en\/stm32-boards-part-1-overview-and-upload","og_locale":"en_US","og_type":"article","og_title":"STM32 boards \u2013 Part 1: Overview and Upload &#8226; Wolles Elektronikkiste","og_description":"In Part 1, I give an overview of STM32 boards and show you how to upload sketches to them using the Arduino IDE.","og_url":"https:\/\/wolles-elektronikkiste.de\/en\/stm32-boards-part-1-overview-and-upload","og_site_name":"Wolles Elektronikkiste","article_published_time":"2025-07-28T20:00:08+00:00","article_modified_time":"2025-09-07T09:36:04+00:00","og_image":[{"width":984,"height":984,"url":"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/post_image_stm32.png","type":"image\/png"}],"author":"Wolfgang Ewald","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Wolfgang Ewald","Est. reading time":"25 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/wolles-elektronikkiste.de\/en\/stm32-boards-part-1-overview-and-upload#article","isPartOf":{"@id":"https:\/\/wolles-elektronikkiste.de\/en\/stm32-boards-part-1-overview-and-upload"},"author":{"name":"Wolfgang Ewald","@id":"https:\/\/wolles-elektronikkiste.de\/en#\/schema\/person\/b774e4d64b4766889a2f7c6e5ec85b46"},"headline":"STM32 boards \u2013 Part 1: Overview and Upload","datePublished":"2025-07-28T20:00:08+00:00","dateModified":"2025-09-07T09:36:04+00:00","mainEntityOfPage":{"@id":"https:\/\/wolles-elektronikkiste.de\/en\/stm32-boards-part-1-overview-and-upload"},"wordCount":4944,"commentCount":4,"publisher":{"@id":"https:\/\/wolles-elektronikkiste.de\/en#\/schema\/person\/b774e4d64b4766889a2f7c6e5ec85b46"},"image":{"@id":"https:\/\/wolles-elektronikkiste.de\/en\/stm32-boards-part-1-overview-and-upload#primaryimage"},"thumbnailUrl":"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/post_image_stm32.png","keywords":["Arduino","Arduino Core STM32","BlackPill","BluePill","board package","BOOT0","Bootloader","DFU","flash size","Giga R1 WiFi","HID","Jumper","KEY","L412KB","L432KC","Maple","Nomenclature","Nucleo","Serial","ST_LINK\/V2","ST-LINK","STM32","STM32CubeProgrammer","STM32F103C8T6","STM32F401CCU6","STM32F411CE06","SWD","WeAct"],"articleSection":["Boards and Microcontrollers","English"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/wolles-elektronikkiste.de\/en\/stm32-boards-part-1-overview-and-upload#respond"]}]},{"@type":"WebPage","@id":"https:\/\/wolles-elektronikkiste.de\/en\/stm32-boards-part-1-overview-and-upload","url":"https:\/\/wolles-elektronikkiste.de\/en\/stm32-boards-part-1-overview-and-upload","name":"STM32 boards \u2013 Part 1: Overview and Upload &#8226; Wolles Elektronikkiste","isPartOf":{"@id":"https:\/\/wolles-elektronikkiste.de\/en#website"},"primaryImageOfPage":{"@id":"https:\/\/wolles-elektronikkiste.de\/en\/stm32-boards-part-1-overview-and-upload#primaryimage"},"image":{"@id":"https:\/\/wolles-elektronikkiste.de\/en\/stm32-boards-part-1-overview-and-upload#primaryimage"},"thumbnailUrl":"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/post_image_stm32.png","datePublished":"2025-07-28T20:00:08+00:00","dateModified":"2025-09-07T09:36:04+00:00","description":"In Part 1, I give an overview of STM32 boards and show you how to upload sketches to them using the Arduino IDE.","breadcrumb":{"@id":"https:\/\/wolles-elektronikkiste.de\/en\/stm32-boards-part-1-overview-and-upload#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/wolles-elektronikkiste.de\/en\/stm32-boards-part-1-overview-and-upload"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/wolles-elektronikkiste.de\/en\/stm32-boards-part-1-overview-and-upload#primaryimage","url":"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/post_image_stm32.png","contentUrl":"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2025\/06\/post_image_stm32.png","width":984,"height":984},{"@type":"BreadcrumbList","@id":"https:\/\/wolles-elektronikkiste.de\/en\/stm32-boards-part-1-overview-and-upload#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/wolles-elektronikkiste.de\/en"},{"@type":"ListItem","position":2,"name":"STM32 boards \u2013 Part 1: Overview and Upload"}]},{"@type":"WebSite","@id":"https:\/\/wolles-elektronikkiste.de\/en#website","url":"https:\/\/wolles-elektronikkiste.de\/en","name":"Wolles Elektronikkiste","description":"Die wunderbare Welt der Elektronik","publisher":{"@id":"https:\/\/wolles-elektronikkiste.de\/en#\/schema\/person\/b774e4d64b4766889a2f7c6e5ec85b46"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/wolles-elektronikkiste.de\/en?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/wolles-elektronikkiste.de\/en#\/schema\/person\/b774e4d64b4766889a2f7c6e5ec85b46","name":"Wolfgang Ewald","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2019\/03\/cropped-Logo-1.png","url":"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2019\/03\/cropped-Logo-1.png","contentUrl":"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2019\/03\/cropped-Logo-1.png","width":512,"height":512,"caption":"Wolfgang Ewald"},"logo":{"@id":"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2019\/03\/cropped-Logo-1.png"}}]}},"_links":{"self":[{"href":"https:\/\/wolles-elektronikkiste.de\/en\/wp-json\/wp\/v2\/posts\/24444","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wolles-elektronikkiste.de\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wolles-elektronikkiste.de\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wolles-elektronikkiste.de\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wolles-elektronikkiste.de\/en\/wp-json\/wp\/v2\/comments?post=24444"}],"version-history":[{"count":10,"href":"https:\/\/wolles-elektronikkiste.de\/en\/wp-json\/wp\/v2\/posts\/24444\/revisions"}],"predecessor-version":[{"id":24748,"href":"https:\/\/wolles-elektronikkiste.de\/en\/wp-json\/wp\/v2\/posts\/24444\/revisions\/24748"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wolles-elektronikkiste.de\/en\/wp-json\/wp\/v2\/media\/24088"}],"wp:attachment":[{"href":"https:\/\/wolles-elektronikkiste.de\/en\/wp-json\/wp\/v2\/media?parent=24444"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wolles-elektronikkiste.de\/en\/wp-json\/wp\/v2\/categories?post=24444"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wolles-elektronikkiste.de\/en\/wp-json\/wp\/v2\/tags?post=24444"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}