Bluepill STM32F103C8 support for Mbed OS 6

Bluepill board support for Mbed OS 6

Warning

It does not work with the Mbed Online Compiler.

This is an example of configuration for the Bluepill board for Mbed OS 6.

It shows how to create a custom board support based on Mbed OS and how to compile a simple Blinky application.

Note this project makes use of the full Mbed OS with RTOS included. It's possible to make changes in the configuration to support the Baremetal profile and reduce memory requirements - see this.

Example application

This repository includes blinky.cpp as an example application to demonstrate how to use the Bluepill custom board support. It's expected to work out of the box using both Mbed CLI and Mbed Studio. Note this test application can be ignored using the MBED_BLINKY_EXAMPLE macro in mbed_app.json, so you can add your own files and application on top of this project.

You can follow these steps to import and compile with Mbed CLI:

mbed import https://os.mbed.com/users/hudakz/code/mbed-os-bluepill
mbed compile -t GCC_ARM -m bluepill

Bluepill and Mbed OS version support

BluepillMbed OS (hash)Status
preview6.2.0 (#a2ada74770 )Compiles and runs ok

Updating Mbed OS

Note not every version of Mbed OS is being tested, therefore update at your own risk. Unless strictly required, you should stick to versions of Mbed OS that are known to work ok.

If you do want to udpate Mbed OS, then follow these steps:

cd mbed-os
mbed update <mbed-os hash / tag>

Testing

This application has been tested on the Bluepill board and runs ok: it blinks and LED and sends a message over the serial port (115200 bauds - see mbed_app.json).

However, it's recomended to run regression tests based on the Greentea framework whether possible (more details to be added).

Programming with STLink programming utility

The Bluepill board doesn't have a programming interface on board. However, it's easy to connect an external adapter such as the STLink/V2 and get it working in minutes.

Use the STM32 ST-Link utility to program the binary into the device.

https://os.mbed.com/media/uploads/hudakz/stlink-prog.png

Wire the Bluepill to the STLink and serial adapter as follow:

BluepillSTLink (20-pin JTAG)Serial adapter
SDWIO (CN4)7-
SWCLK (CN4)9-
RESET15-
GND4GND
TX (PA_2)-RX
RX (PA_3)-TX

ST-LINK/V2 JTAG pintout
https://os.mbed.com/media/uploads/hudakz/jtag_pinout.png

This is the pinout of the Bluepill board: /media/uploads/hudakz/stm32f103c8t6_pinout_voltage01.png

https://os.mbed.com/media/uploads/hudakz/connections.jpg

Additional example programs

Bare metal on Bluepill
Bare metal with EventQueue on Bluepill

Warning

The examples above are not meant to be compiled with the online compiler. Follow these steps to import and compile them with Mbed CLI:

mbed import Program's_URL
mbed compile -t GCC_ARM -m bluepill

Known issues

  • Please check the issues reported.
Committer:
hudakz
Date:
Wed May 13 12:25:39 2020 +0000
Revision:
0:2577a4fb6e72
Bluepill STM32F103C8 support for Mbed OS 6

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hudakz 0:2577a4fb6e72 1 #! armcc -E
hudakz 0:2577a4fb6e72 2 ; Scatter-Loading Description File
hudakz 0:2577a4fb6e72 3 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
hudakz 0:2577a4fb6e72 4 ; Copyright (c) 2016, STMicroelectronics
hudakz 0:2577a4fb6e72 5 ; All rights reserved.
hudakz 0:2577a4fb6e72 6 ;
hudakz 0:2577a4fb6e72 7 ; Redistribution and use in source and binary forms, with or without
hudakz 0:2577a4fb6e72 8 ; modification, are permitted provided that the following conditions are met:
hudakz 0:2577a4fb6e72 9 ;
hudakz 0:2577a4fb6e72 10 ; 1. Redistributions of source code must retain the above copyright notice,
hudakz 0:2577a4fb6e72 11 ; this list of conditions and the following disclaimer.
hudakz 0:2577a4fb6e72 12 ; 2. Redistributions in binary form must reproduce the above copyright notice,
hudakz 0:2577a4fb6e72 13 ; this list of conditions and the following disclaimer in the documentation
hudakz 0:2577a4fb6e72 14 ; and/or other materials provided with the distribution.
hudakz 0:2577a4fb6e72 15 ; 3. Neither the name of STMicroelectronics nor the names of its contributors
hudakz 0:2577a4fb6e72 16 ; may be used to endorse or promote products derived from this software
hudakz 0:2577a4fb6e72 17 ; without specific prior written permission.
hudakz 0:2577a4fb6e72 18 ;
hudakz 0:2577a4fb6e72 19 ; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
hudakz 0:2577a4fb6e72 20 ; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
hudakz 0:2577a4fb6e72 21 ; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
hudakz 0:2577a4fb6e72 22 ; DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
hudakz 0:2577a4fb6e72 23 ; FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
hudakz 0:2577a4fb6e72 24 ; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
hudakz 0:2577a4fb6e72 25 ; SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
hudakz 0:2577a4fb6e72 26 ; CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
hudakz 0:2577a4fb6e72 27 ; OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
hudakz 0:2577a4fb6e72 28 ; OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
hudakz 0:2577a4fb6e72 29 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
hudakz 0:2577a4fb6e72 30
hudakz 0:2577a4fb6e72 31 #if !defined(MBED_BOOT_STACK_SIZE)
hudakz 0:2577a4fb6e72 32 #define MBED_BOOT_STACK_SIZE 0x400
hudakz 0:2577a4fb6e72 33 #endif
hudakz 0:2577a4fb6e72 34
hudakz 0:2577a4fb6e72 35 #define Stack_Size MBED_BOOT_STACK_SIZE
hudakz 0:2577a4fb6e72 36
hudakz 0:2577a4fb6e72 37 LR_IROM1 0x08000000 0x10000 { ; load region size_region (64K)
hudakz 0:2577a4fb6e72 38
hudakz 0:2577a4fb6e72 39 ER_IROM1 0x08000000 0x10000 { ; load address = execution address
hudakz 0:2577a4fb6e72 40 *.o (RESET, +First)
hudakz 0:2577a4fb6e72 41 *(InRoot$$Sections)
hudakz 0:2577a4fb6e72 42 .ANY (+RO)
hudakz 0:2577a4fb6e72 43 }
hudakz 0:2577a4fb6e72 44
hudakz 0:2577a4fb6e72 45 ; 59 vectors (16 core + 43 peripheral) * 4 bytes = 236 bytes to reserve (0xEC) 8-byte aligned = 0xF0
hudakz 0:2577a4fb6e72 46 RW_IRAM1 (0x20000000+0xF0) (0x5000-0xF0-Stack_Size) { ; RW data
hudakz 0:2577a4fb6e72 47 .ANY (+RW +ZI)
hudakz 0:2577a4fb6e72 48 }
hudakz 0:2577a4fb6e72 49
hudakz 0:2577a4fb6e72 50 ARM_LIB_HEAP AlignExpr(+0, 16) EMPTY (0x20000000+0x5000-Stack_Size-AlignExpr(ImageLimit(RW_IRAM1), 16)-0xF0) {
hudakz 0:2577a4fb6e72 51 }
hudakz 0:2577a4fb6e72 52
hudakz 0:2577a4fb6e72 53 ARM_LIB_STACK (0x20000000+0x5000) EMPTY -Stack_Size { ; stack
hudakz 0:2577a4fb6e72 54 }
hudakz 0:2577a4fb6e72 55 }