Open8S208Q80

EX-STM8-Q48a-105

STM8/128-EVAL

STM8L101-EVAL

Getting started with stm8 development using free software: Serial output on the HCDVBD0019

This short tutorial presents a simple "Hello World" program for the Hobby components HCDVBD0019 board, with an extra Hobby Components HCCABL0015 USB to RS232 TTL Serial Interface Cable.
The author used a Debian GNU/Linux system, but the tutorial should work for other Linux distributions, *BSD or other Unices.

The tools we use are

The SDCC compiler, version 3.5.0 or later to compile C programs for the stm8.

stm8flash, to write programs onto devices.

Hardware setup

To write our program to the board, we attach a an ST-Link/V2. The board does have an USB connector, which can be used to power it, but it should only be used when there is no ST-Link attached.
We connect two of the connectors of the serial interface cable pinheaders on the HCDVBD0019 board (green to PD6, white to pin PD5).
On the USB end of the serial interface is connected to a computer running a terminal program configured for 9600 baud, no parity, 8 bits, 1 stop bit and no flow control. We used gtkterm.

Get SDCC

Depending on your operating system there might be an easy way to install SDCC 3.5.0 or newer using a package system or similar (e.g. apt-get install sdcc on Debian). While SDCC 3.4.0 should be sufficient for this tutorial, you might want to try a newer version in case you encounter any bugs. In particular, SDCC 3.4.0 has an issue with the library search path; this can be worked around by explicitly specifying the path to the standard library when linking.

Get stm8flash

The stm8flash source can be found at its GitHub location, where there is also a download link for a zip archive of the sources. To compile it, a C compiler, such as gcc, pkg-config and libusb need to be installed. Unzip the archive (e.g. using unzip stm8flash-master.zip) change into the directory stm8flash-master and type make. In case there are any errors, such as header files not found, check that pkg-config and development files for libusb are installed.

The Demo

We present a simple Demo that repeatedly outputs "Hello World!" on UART1. This demonstrates setting up and using the UART for serial I/O. Here is the C code:

SDCC is a freestanding, not a hosted implemenatation of C, and allows main to return void.
The printf() from the standard library uses putchar() for output. Since putchar() is device-specific we need to supply it. In this case we want it to output data using UART1.
Note that in older SDCC versions, putchar() returned void. Which was not standard compliant and has been changed since. For compiling the demo with an older version of SDCC, change the definition of putchar() to:

The demo can be compiled simply by invocing SDCC using sdcc -mstm8 --std-c99 serial.c assuming the C code is in led.c. The option -mstm8 selects the target port (stm8). An .ihx file with a name corresponding to the source file will be generated.

Put the demo onto the board

Assuming stm8flash and serial.ihx are in the same directory, the board is attached through an stlinkv2 device, ./stm8flash -c stlinkv2 -p stm8s103k3 -w serial.ihx will write the demo onto the board. You can see the "Hello world" via the serial interface cable, and using a terminal program configured for 9600 baud, no parity, 8 bits, 1 stop bit and no flow control.

More about stm8flash

stm8flash was written by Valentin Dudouyt. It works both with stlink (including the one integrated on the discovery boards) and stlinkv2 devices. The programmer can be selected using -c stlink or -c stlinkv2. The target device is selected using the -p option (to get a list of target devices, use the -p option with an option argument that is not an stm8 device, e.g. -p help. stm8flash will treat filenames ending in .ihx or .hex as Intel hex, and other filenames as binaries.

More about SDCC

SDCC was initially written by Sandeep Dutta for the MCS-51, and has a relatively conservative architecture (see Sandeep Dutta, "Anatomy of a Compiler", 2000). It has been extended by various contributors and more recently, incorporated some cutting-edge technologies, in particular in register allocation (see Philipp Klaus Krause, "Optimal Register Allocation in Polynomial Time", 2013). The stm8 backend was mostly written by Philipp Klaus Krause for his research into bytewise register allocation and spilling (see Philipp Klaus Krause, "Bytewise Register Allocation", 2015).