Nachdem ich auf der Embedded World in Nürnberg dieses Jahr ein STM8 Nucleo board erhalten habe, habe ich mich mal wieder mit den STM8 von STmicroelectronic beschäftigt. Meine letzte Erfahrung mit den STM8 war beim Bau unserer Küchenarbeitslampe. Damals gab es noch nicht die Möglichkeit unter Linux zu debuggen, das Compilieren ging zwar mit dem SDCC, aber da ich unbedingt den Debugger brauchte, habe ich mich für das STM eigene Tool "STVD" und den Compiler von COSMIC entschieden. Ich habe es sogar geschafft den Compiler in einer Windows VM laufen zu lassen und von Ubuntu den Compilevorgang zu starten. Bei meiner jetzigen Recherche habe ich nun aber eine brauchbare Lösung gefunden mit der die Mikrocontroller unter Ubuntu debugbar sind.
Benötigt werden folgende Tools:
GDB ist Teil der binutils. Bisher ist der stm8 Teil noch nicht in den offiziellen Entwicklungszweig aufgenommen worden, deshalb müssen wir uns den GDB selbst patchen und übersetzen. Die Hauptarbeit wurde uns schon abgenommen, denn es gibt auf sourceforge ein Script welches die Quellen herunterläd, patcht und baut.
stm8-binutils-gdb-sources-*.tar.gz herunterladen
chrimbo@helios:~/Downloads$ tar xvfz stm8-binutils-gdb-sources-*.tar.gz
chrimbo@helios:~/Downloads$ cd stm8-binutils-gdb-sources
chrimbo@helios:~/Downloads$ ./patch_binutils.sh
chrimbo@helios:~/Downloads$ ./configure_binutils.sh
chrimbo@helios:~/Downloads$ cd binutils-2.30
chrimbo@helios:~/Downloads$ make
chrimbo@helios:~/Downloads$ sudo make install
Die Version in den Paketquellen von Ubuntu 18.04 LTS wurde leider nicht mit STM8 support kompiliert, sodass wir auch dieses Programm selbst übersetzen müssen. Ich verwende hier die aktuellen Quellen aus dem git repository.
chrimbo@helios:~/Downloads$ git clone https://git.code.sf.net/p/openocd/code openocd
chrimbo@helios:~/Downloads$ cd openocd
chrimbo@helios:~/Downloads/openocd$ ./bootstrap
chrimbo@helios:~/Downloads/openocd$ ./configure
chrimbo@helios:~/Downloads/openocd$ make
chrimbo@helios:~/Downloads/openocd$ sudo make install
Die SDCC Version in den Quellen von Ubuntu hat den Support für den STM8 bereits, vermisst aber die Möglichkeit elf Dateien zu erstellen. Glücklicherweise muss der SDCC nicht selbst kompiliert werden, da auf sourceforge bereits übersetzte Programme vorliegen hier
Das Archiv muss nur entpackt werden und nach /usr/local kopiert werden.
cp -r * /usr/local
Das Demo projekt kann hier heruntergeladen werden.
/*
* STM8 NUCLEO-8L152R8 blinking LED
*/
#include <stdint.h>
#include "stm8l.h"
void main(void)
{
// Configure LED pin/port
PB_DDR = 0x20;
PB_CR1 = 0x20;
while(1)
{
PB_ODR ^= 0x20;
for(uint16_t i = 0; i < 30000; i++)
;
}
}
übersetzen mit
sdcc -mstm8 blink.c --out-fmt-elf --all-callee-saves --debug --verbose --stack-auto --fverbose-asm --float-reent --no-peep
sollte (unter anderem) ein blink.elf
(ggf. Dateinamen anpassen) erstellen.
In einer Shell openocd starten
chrimbo@helios:~/Downloads/blink$ openocd -f interface/stlink.cfg -f target/stm8l.cfg -c "init" -c "reset halt"
und in einer weiteren gdb
chrimbo@helios:~/Downloads/blink$ stm8-gdb blink.elf
mit start
kann das Programm auf den STM8 geladen werden. Es durchläuft dann die Initialisierung und setzt einen breakpoint auf die erste Zeile in main. Mit continue
wird das Programm fortgesetzt. Die LED sollte nun blinken.