/** @defgroup boards_bluepill Bluepill board @ingroup boards @brief Support for the stm32f103c8 based bluepill board. ## Overview The bluepill is an STM32F103 based board which can be bought for around 2€ on sides like AliExpress, eBay and others. Although the STM32F130C8 MCU nominally has 64 KB flash, most [actually have 128 KB flash][Flashsize]. ## Hardware ![bluepill](https://camo.githubusercontent.com/8df2fb54f87527bdd57fe007352d72c1f377d08f/687474703a2f2f77696b692e73746d33326475696e6f2e636f6d2f696d616765732f7468756d622f312f31392f53544d33325f426c75655f50696c6c5f746f702e6a70672f38303070782d53544d33325f426c75655f50696c6c5f746f702e6a7067) ### MCU | MCU | STM32F103C8 | |:----------|:-----------------------| | Family | ARM Cortex-M3 | | Vendor | STMicroelectronics | | RAM | 20 KB | | Flash | 64 KB / 128 KB | | Frequency | up to 72 MHz | | Timer | 3x 16-Bit | | ADC | 2x 12-bit, 10 channels | | UART | 3 | | SPI | 2 | | I2C | 2 | | CAN | 1 | | Vcc | 2.0 to 3.6 V | | Datasheet | [Datasheet][Datasheet] | ## Implementation Status | ID | Supported | |:----- |:--------- | | GPIO | yes | | PWM | yes | | UART | yes | | ADC | yes | | I2C | no | | SPI | yes | | USB | no | | Timer | yes | | CAN | no | ## Flashing To program and debug the board you need a SWD capable debugger. The easiest way is using [OpenOCD][OpenOCD]. By default RIOT uses the hardware reset signal and connects to the chip under reset for flashing. This is required to reliably connect to the device even when the MCU is in a low power mode. Therefore not only SWDIO and SWCLK, but also the RST pin of your debugger need to be connected to the board. Once the device is connected to the debugger and OpenOCD is installed, you can flash the device with: $ make BOARD=bluepill flash ### Additional Flash To make use of the entire 128 KB flash, compile your application with: $ make STM32F103C8_FLASH_HACK=1 BOARD=bluepill This sets the `CPU_MODEL` make variable to `stm32f103cb`, the default value is `stm32f103c8`. These two CPU models basically only have one major difference, the latter has 128 KB flash while the former has 64 KB. You may also set `STM32F103C8_FLASH_HACK` as environment variable. If you want to flash a binary compiled this way you either need to figure out how to adjust the OpenOCD configuration to make it use 128 KB flash or use this [stlink fork][caboStlink] which has a [patch][caboPatch] to make use of the entire 128 KB flash using: $ C8T6HACK=1 st-flash write /dev/sgX $pathToHexFile 0x8000000 ## Connecting via Serial The default UART port used is UART2, which uses pins A2 (TX) and A3 (RX). To use it, configure your UART to operate at a baudrate of 115200/8N1. ## Using PWM PWM is available at pins A8 to A11. ## Known Issues ### USB connector The Micro-USB port is sometimes not soldered properly. Also, it is usually equipped with an incorrect resistor. [This can be fixed multiple ways][USB]. ### Flashing fails Please check whether the debugger is properly connected, including the hardware reset signal pin. | Pin on Debugger | Pin on Blue Pill | |:------------------ |:---------------- | | SWDIO | DIO | | SWCLK | DCLK | | NRST | R | | GND | GND | | VDD (3.3V) (*) | 3.3 | | Target VCC (**) | 3.3 | - (*) Most debuggers have a 3.3V supply voltage to power the board. You can alternatively power the board using the TTL-Adapter or via Micro-USB. - (**) Some debuggers monitor the voltage of the target MCU. Their target VCC pin needs to be connected to one of the 3.3V pins of the boards. Most very cheap SWD debuggers (especially those imported for about 2€ from far east) do not have a Target VCC pin; they will still work just fine. On these cheap debuggers the pin to send the reset signal to the board is often either not present or defunct. You can work around this by pressing the reset button when OpenOCD wants to connect to the Blue Pill. Hit the reset button again after flashing in order to boot the newly flashed image. ## Where to buy The board is sold under different names. On some sites it is called `bluepill` or `blue pill`. On others you might find it by searching for `stm32f103c8` or `stm32f103c8t6`. Try [eBay][eBay] or [AliExpress][AliExpress]. ## Further reading * http://wiki.stm32duino.com/index.php?title=Blue_Pill * http://wiki.stm32duino.com/index.php?title=Maple_Mini#Clones * http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit- arm-cortex-mcus/stm32-mainstream-mcus/stm32f1-series/stm32f103/stm32f103c8.html [Datasheet]: http://www.st.com/content/ccc/resource/technical/document/datash eet/33/d4/6f/1d/df/0b/4c/6d/CD00161566.pdf/files/CD00161566.pdf/jcr:content/tran slations/en.CD00161566.pdf [Flashsize]: http://wiki.stm32duino.com/index.php?title=Blue_Pill#128_KB_flash_on_C8_version [eBay]: https://www.ebay.com/sch/i.html?_nkw=stm32f103c8 [AliExpress]: https://www.aliexpress.com/wholesale?SearchText=STM32F103C8T6 [OpenOCD]: https://github.com/RIOT-OS/RIOT/wiki/OpenOCD [USB]: http://wiki.stm32duino.com/index.php?title=Blue_Pill#Hardware_installation [imgTop]: http://wiki.stm32duino.com/images/thumb/1/19/STM32_Blue_Pill_top.jpg/800px- STM32_Blue_Pill_top.jpg [caboStlink]: https://github.com/cabo/stlink [caboPatch]: https://github.com/cabo/stlink/commit/e2ff1710ca6caeb55b5b99f7bd8a29181ccf533d */