The 0.70 € STM8S103F3 Board

The 0.70 € Board

So you ordered your super cheap stm8 dev board from aliexpress oder eBay and now you want to do at least a blinking LED, then this Mini Tutorial is exactly for you


The STM8S103F3 dev board

Just in case you do not have your board yet, search for “STM8S103F3 board” on you favorite china shopping page. You should see a plethora of listings from anything between 70 cents and 10 EUR, if some of them say ARM do not let them confuse you as the STM8 is very far away from an ARM cpu.

And yes they all show a MicroUSB port on them, but this is for nothing more then to power this board. For Programming you need something called an STLink

The STLink v2 is a small stm32 based Programmer for STM8 and also STM32, they are all based on the Reference design by ST but way cheaper. And as the Design and Firmware was made opensource china created these cheap USB Sticks so you do not need to buy a 50 EUR STLink Original.

Again, if you don’t have one search for “stlink v2” and you should see listings starting at 2 EUR.



First you need some software, on a Ubuntu >=15.04 you just need to install sdcc, the small device c compiler, a compiler that supports the old 8051, zilog z80, PIC16, a lot more and for this tutorial most important the STM8

sudo apt-get install sdcc

Just to be sure that your installed version of sdcc supports the stm8 you can check the version string which should contain stm8

sdcc --version
 SDCC : mcs51/z80/z180/r2k/r3ka/gbz80/tlcs90/ds390/TININative/ds400/hc08/s08/stm8 3.4.0 #8981 (Jul 12 2014) (Linux)
 published under GNU General Public License (GPL)


The next software you need is the stm8flash software that you need to fetch from github

git clone
cd stm8flash

If you want to install the stm8flash software globally to you system just run sudo make install after make finished. This will save you from typing the full path to stm8flash over and over again.

The first steps (and what you will most probably stumble upon)

When you get your fresh STM8S103F3 Board from China, they are most probably in a “locked mode” This will show up when you want to program them as an error message

Is it locked?

sudo stm8flash -c stlinkv2 -p "stm8s103f3" -w blinky.ihx
 Determine FLASH area
 Writing Intel hex file 182 bytes at 0x8000... Tries exceeded

There is a pretty simple fix for this found in the stm8flash issues Thos who are interested in what all the 00 and ff mean, can go to the datasheet page 45 and read about the “option bytes”

echo "00 00 ff 00 ff 00 ff 00 ff 00 ff" | xxd -r -p > factory_defaults.bin
stm8flash -c stlinkv2 -p stm8s103f3 -s opt -w factory_defaults.bin

And now the minimal code needed to blink an LED on your super cheap development board. The LED is connected to Pin B5, which means Port B, pin 5


// Port B data output latch register, for setting pins HIGH or LOW)
#define PB_ODR *(unsigned char*)0x5005

// Port B data direction register, for setting pins as INPUT or OUTPUT 
#define PB_DDR *(unsigned char*)0x5007

// Port B control register 1, 
#define PB_CR1 *(unsigned char*)0x5008

int main() {
	int d;
	// Configure pins
	PB_DDR = 0x20; // 0x20(00100000) pin 5 set to 1 -> setting it as OUTPUT 
	PB_CR1 = 0x20; // 0x20(00100000) pin 5 set to 1 -> setting it as PUSH-PULL Mode (only when configured as output)
	// Loop
	do {
		PB_ODR ^= 0x20; // 0x20(00100000) pin 5 XOR/toggle between HIGH and LOW
		for(d = 0; d < 29000; d++) {
	} while(1);

Push–pull output

Now we need to compile this file

sdcc -lstm8 -mstm8 --out-fmt-ihx ledblink.c

SDCC has no compiled our C code into a “ledblink.ihx” file that can be uploaded to our devboard.

sudo stm8flash -c stlinkv2 -p stm8s103f3 -w ledblink.ihx
 Determine FLASH area
 Writing Intel hex file 189 bytes at 0x8000... OK
 Bytes written: 189

Tada, now you have a blinking LED on your STM8 dev board.

comments powered by Disqus