STM8S-Discovery

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche

Das STM8S-Discovery ist ein sehr günstiges Evalutionsboard für die Controllerfamilie STM8 von ST Microelectronics. Auf der Platine befindet sich ein kompletter USB-Programmer/Debugger, ein zu programmierender Mikrocontroller vom Typ STM8S105C6T6 sowie eine LED und ein kapazitiver Taster. Für das Discovery benötigt man kein Netzteil, da es die Betriebsspannung über den USB-Anschluss bezieht. Mit dem Programmer/Debugger kann man jeden beliebigen STM8 über SWIM – der einpoligen Programmierschnittstelle für STM8 – flashen und auf Fehlersuche gehen.

STM8S Discovery.jpg

Benötigte Hardware

Einer der großen Vorteile des STM8S-Discovery ist, dass man außer dem Evaluationsboard eigentlich nur noch ein USB Kabel (A auf B) braucht. Man braucht weder ein externes Netzteil noch zusätzliche Bauteile wenn man mit dem Board ein wenig herumexperimentieren möchte.

Benötigte Software

STM liefert eine kostenlose IDE (Entwicklungsoberfläche) samt Flash-Tool. Dazu muss aus einer Auswahl von drei verschiedenen genau ein Compiler installiert werden. Diese Compiler sind kommerzielle Angebote, für die jeweils kostenlose, aber eingeschränkte Lizenzmodelle verfügbar sind. Die IDE von STM funktioniert nur mit einem dieser Compiler. Eine Alternative ist die Verwendung einer eigenen IDE wie z.B. Eclipse oder Code::Blocks zusammen mit dem freien Compiler SDCC.

Ein Weg mit Code::Blocks und SDCC unter Windows ist hier beschrieben: Code::Blocks für STM8S Discovery einrichten.

Linux

Die USB Implementierung des ST-Links ist zumindestens auf dem STM8S Discovery Board kaputt. Beim Anstecken des USB Steckers kommen andauernd Fehlermeldungen des USB Subsystems, siehe [1] Informationen zum oder über einen Update der ST-Link Firmware wurden im Netz nicht gefunden (Feb. 2011)

ST MCU Toolset

Das ST MCU Toolset beinhaltet die Entwicklungsumgebung ST Visual Develop (Vergleichbar zum AVR Studio von Atmel) und einen graphischen Flasher. Es beinhaltet den Treiber für den Programmer/Debugger, den uneingeschränkten Assembler und Linker und einen Simulator. Es kann auf der ST Webseite herunter geladen werden.

Die C-Compiler

Bei den C-Compilern hat man die Wahl zwischen 4 verschiedenen. Einige Compiler können voll in das ST Visual Develop integriert werden.

SDCC
Ein freier Compiler. SDCC unterstützt ISO C90, C95, C99, C11, allerdings mit Lücken. Falls die "Standard Peripheral Library" von ST verwendet werden soll, ist für diese ein Patch nötig.
Cosmic Compiler
Cosmic unterstützt ISO C90, allerdings mit Lücken. Diesen Compiler gibt es mit kostenloser Lizenz bei einer Codegrößen-Beschränkung auf 32 KBytes. Man beachte, dass man sich für Download und Installation registrieren muss. Nachdem man sich während der Installation registriert und die Email an Comsic geschickt hat, bekommt man relativ schnell (bei mir waren es 5 Minuten) eine Lizenz zugeschickt.

(UPDATE 09.11.2016) Kostenlos für STM8 ohne iregndwelche Begrenzungen. [2]

Raisonance Compiler
Raisonance unterstützt ISO C90, allerdings mit Lücken. Für diesen Compiler gibt es eine kostenlose 16k Version, was aber für die meisten Hobbyprojekte mehr als ausreichend ist. Der Compiler kann zusätzlich mit der Entwicklungsumgebung von Raisonance (Ride7) genutzt werden. Anscheinend ist dieser Compiler aber nicht so umfangreich wie der Cosmic. Für detaillierte Informationen siehe die Hilfe des ST Visual Develop.

(UPDATE 10.05.2013) Die kostenlose Version ist nicht mehr verfügbar (kostet jetzt 700€). Es scheint aber noch eine 2K-Version zu geben.

IAR STM8 IDE
IAR hat nahezu vollständige Unterstützung für ISO C90 und C99. Die kostenlose Version STM8 Kickstart mit 8 KBytes Codegrößen-Beschränkung ist eine vollfunktionsfähige Entwicklungsumgebung. Sie verfügt im Vergleich mit den anderen Compilern über einen guten Code-Optimierer. Auf der höchsten Optimierungsstufe "Size" kann bei der ST-Library eine Codegrößen-Reduzierung von bis zu 30% beobachtet werden. Mit der Optimierungsoption "Discard Unused Publics" werden nur die verwendeten Funktionen compiliert, wodurch eine weitere Codegrößen-Reduzierung von bis 50% erreicht werden kann.

IAR Embedded Workbench for STMicroelectronics STM8

Datenblätter

Bevor man loslegt, sollte man sich noch folgende Datenblätter herunterladen, damit man bei Problemen immer schnell nachschlagen kann:

  • STM8S-DISCOVERY das Handbuch zum STM8S Discovery
  • STM8S105xx Datenblatt des auf dem Discovery verwendeten Mikrocontroller
  • RM0016 Generelle Informationen über die einzelnen Register/Funktionen der STM8 Plattform
  • STM8S FWLi Firmware Libary, mit vielen Funktionen zu den GPIO etc., sodass man das Rad nicht jedesmal neu erfinden muss. Dazu später mehr.
  • STM8S optimized examples Programmbeispiel

Erste Schritte

Erstinbetriebnahme

Zu aller erste sollte man das Discovery auspacken und via USB an einen Rechner anschließen. Nun sollte der PC das Board als einen USB-Stick erkennen, auf dem 3 Links gespeichert sind. Außerdem sollte es möglich sein, mit Hilfe des kapazitiven Buttons die Blinkfrequenz der LED zu ändern, denn auf dem Discovery ist schon ein Beispielprogramm von ST vorinstalliert. Dieses kann man sich zusammen mit der Dokumentation von der ST Downloadseite herunterladen.

Installation der benötigten Software

Um selbst Programme schreiben und debuggen zu können, muss man die komplette Toolchain installiert haben.

  1. Installation des ST MCU Toolsets. Einfach immer auf OK klicken. Am Ende der Installation wird man gefragt, ob man einen ST MicroConnect Parallel Port Driver installieren möchte. Dieser wird für das Arbeiten mit dem STM8S-Discovery nicht benötigt und man kann getrost die Frage verneinen.
  2. Installation des Compilers. In dieser Einführung wird der Cosmic 32K Compiler verwendet. Während der Installation des Compilers muss man eigentlich bis zum Ende immer nur mit Ok bestätigen. Nach erfolgreicher Installation wird man gefragt, ob man schon eine Lizenz besitzt. Wenn man noch keine (Free-)Lizenz besitzt muss man sich unbedingt registrieren. Auch für die kostenlose Lizenz ist eine Registrierung nötig, sonst kann man den Compiler nicht benutzen. Außerdem braucht man für jeden Rechner eine extra Lizenz. Alle Felder die mit einem Stern makiert sind, müssen ausgefüllt werden. Anschließend schickt man die Registrierung ab, indem man mit "Register by Email" bestätigt. Hat man auf dem Rechner kein E-Client installiert und benutzt statt dessen ein Webmaildienst, so muss man auf auf "Write to File" klicken, dieses dann als z.B. reg.txt abspeichern und dessen Inhalt an die Email Adresse stm8_32k@cosmic.fr verschicken.

Einrichten des ST Visual Develop

Workspace Creation.jpg

Um das erste Programm zu schreiben, öffnet man das ST Visual Develop (ähnlich dem AVR Studio). Leider sieht es nach dem Starten noch relativ leer aus. Doch das soll sich bald ändern!

Als erstes klickt man unter File (linke obere Ecke, erster Menüpunkt) auf New Workspace. Danach öffnet sich ein kleines Fenster. Hier wählt man das Arbeitsverzeichnis des ST Visual Develop aus. Dieses kann für alle Projekte gleich sein.

Wichtig
Im Workspacenamen dürfen keine Leerzeichen vorhanden sein, ansonsten bricht später das Compilieren mit einer Fehlermeldung ab.

Unser erstes Projekt trägt den Namen STM8S_ErstesProgramm. Nachdem man den gewünschten Pfad eingegeben hat, bestätigt man mit "ok" (siehe Bild rechts).

Workspace ProjectCreation.jpg

Als nächstes erscheint schon wieder ein Fenster. Hier legt man den Projektnamen und den Projektpfad fest, am besten ein Unterordner im Workspaceverzeichnis. In unserem Fall nennen wir unser Projekt "ErstesProgramm" und speichern es im Unterordner "ErstesProgramm" im Workspaceverzeichnis. Nun muss man nur noch die Toolchain definieren. Da wir den Cosmic 32K Compiler benutzen, wählt man unter Toolchain "STM8_Cosmic" aus. Zu guter Letzt muss man dem Programm noch mitteilen, in welchem Ordner sich der Compiler befindet. Bei einer Standardinstallation sollte dies der Pfad "C:\Program Files\COSMIC\CXSTM8_32K" sein. Danach kann mit "ok" bestätigt werden.

Workspace Tree.jpg

Ein letztes Fenster erscheint, indem man nur noch den genauen Mikrocontroller Typ auswählen muss, für den man ein Programm schreiben will. Auf dem STM8S Discovery ist ein STM8S105C6 verbaut. Man muss ihn in der Liste mit "select" auswählen und mit "ok" bestätigen.

So, endlich ist es geschafft. Man hat den ersten Workspace und das erste Projekt erfolgreich angelegt. Theoretisch könnte man jetzt loslegen zu programmieren. Aber nur theoretisch. Uns fehlt noch eine wichtige Komponente, die uns das Leben erheblich vereinfacht, nämlich die Firmware Libarys von ST.

Firmware Library

Um jetzt weiter machen zu können benötigt man die Datei stm8sfblib.zip von der ST Webseite. Am besten entpackt man diese Datei an einem sicheren Ort. Dabei sollte man ein Ordner "FWLib" erhalten sowie eine CHM-Datei (diese beinhaltet eine sehr ausführliche Dokumentation der Libarys und Beispiele) und eine TXT-Datei, die nicht weiter von Interesse ist.

Im Ordner "FWLib" befinden sich der Unterordner "libary", in dem sich im INC-Ordner alle Header-Files und im SRC-Ordner alle C-Files der Library befinden. Den gesamten Ordner kopieren wir in unseren Workspace "stm8s_ErstesProgramm". Nun wechseln wir wieder zurück ins ST Visual Develop. Am linken Rand sehen wir eine Baumstruktur unseres Projektes. Unser Projekt besteht zur Zeit aus drei Ordnern "Source", "Include" und "External Dependencies". Für uns sind nur die ersten beiden relevant. Unter Source befinden sich zur Zeit zwei Dateien, die "main.c" und die "stm8_interrupt_vector.c". Der Include-Ordner ist leer.

Mit einem Rechtsklick auf "Source" -> "New Folder..." erstellen wir einen neuen Ordner und benennen diesen "library". Das gleiche wird mit dem "Include"-Ordner gemacht.

Auf dem gerade letzten erstellen Ordner machen wir wieder einen Rechtsklick -> "Add Files to Folder..." und fügen alle Dateien und "library/inc" hinzu. Jetzt müssen wir nur noch die "stm8s_conf.h" zu unserem Projekt hinzufügen. Man findet diese Datei unter dem Pfad "FWLib\project" und kopiert sie dann in den Projektordner und fügt sie dem Projekt wie im oberen Schritt zu, aber nicht unter "Include\library", sondern einfach nur unter "Include". Jetzt sollte die Baumstruktur wie im Bild aussehen.

Erstes Programm

Jetzt ist es endlich so weit. Wir können loslegen und unser erstes Programm schreiben. Es soll nichts weiter tun als die Led auf dem STM8S Discovery blinken zu lassen.

Da wir hierfür einen GPIO (General Purpose I/O, also einen Pin, der sowohl als Eingang als auch als Ausgang konfiguriert werden kann) benutzen wollen, müssen wir, um die GPIO-Funktionen benutzen zu können, die GPIO-Library "stm8s_gpio.c" importieren. Die Datei finden wir unter "Libary\src" und fügen sie unter "Source\library" hinzu (s. Bild). Nun müssen wir nur noch die GPIO-Library in der "stm8s_conf.h" aktivieren. Dazu entfernen wir die Kommentarzeichen /* und */:

/* #define _GPIO (1) */

So das in der Zeile nur noch folgendes steht:

   #define _GPIO (1)

In der Regel werden alle Librarys, die man verwenden möchte, auf diese Weise in ein bestehendes Programm importiert. Dabei ist zu beachten, dass nur Librarys, die benutzt werden, zu importieren und in der "stm8s_conf.h" zu aktivieren sind. Ansonsten kann es beim Compilieren zu Fehlern kommen.

Die Main-Routine des ersten Programms:

#include "stm8s.h"                                         // (1)

main()                                                     // (2)
{
  GPIO_DeInit(GPIOD);                                      // (3)
  GPIO_Init(GPIOD, GPIO_PIN_0,GPIO_MODE_OUT_PP_LOW_SLOW);  // (4)
	
  while (1)                                                // (5)
  {
    u16 i;                                                 // (6)
	
    for(i = 0; i < 60000; i++)                             // (7)
    {
      nop();                                               // (8)
    }
		
    GPIO_WriteReverse(GPIOD, GPIO_PIN_0);                  // (9)
  }                                                        // (10)
}                                                          // (11)
  1. In der Zeile (1) wird eine sogenannte Header-Datei eingebunden. In ihr sind alle Registernamen definiert, die man zur Programmierung des STM8S braucht. Header-Dateien haben immer die Endung ".h", woran sie einfach zu erkennen sind. Die "stm8s.h" bindet selbst die "stm8s_conf.h" ein, in der wiederrum die aktivierten Librarys eingebunden werden, sodass erstmal nur eine Header-Datei eingebunden werden muss.
  2. In der Zeile (2) beginnt das eigentliche Programm. Jedes C-Programm beginnt mit der main()-Funktion.
  3. Bei (3) wird der der GPIO-Port D zurückgesetzt bzw. in den Zustand nach einem Reset gebracht (nähere Informationen zu diesem Zustand steht im Datenblatt).
  4. Nachdem der GPIO-Port D zurückgesetzt wurde, wird er bei (4) initalisiert. Der Pin 0 wird definiert als:
    1. Ausgang
    2. Push-Pull-Driver
    3. mit dem Potential Low
    4. im Slow-Modus, d. h. er wird mit 2 Mhz angesteuert
  5. In Zeile (5) beginnt die Endlosschleife und endet in Zeile (10).
  6. Innerhalb der Endlosschleife (Zeile (6) bis (9)) wird wiederum eine Schleife durchlaufen, Zeile (7) und (8). Hier wird die 16-Bit Variable 'i' mit 0 initialisiert, dann wird der Dummy-Befehl "nop" ausgeführt, der aber keine Funktion hat (nop = no operation). Dieses wird solange widerholt, bis die Var. i den Wert 59999 erreicht. Wenn i = 60000 ist, wird die Schleife verlassen. Der Zweck ist, einfach Prozessor-Zeit zu verschwenden. Würde der nop()-Befehl nicht in der Schleife stehen, würde der Compiler die gesamte Schleife wegoptimieren und damit wäre die Zeitverschwendung auch weg, denn Warteschelifen auf diese Art zu programmieren ist suboptimal.
  7. Nachdem die Schleife nach einer gewissen Zeit durchlaufen ist, wird der Portpin D0 (Port D, Pin 0) von Low nach High gesetzt (Zeile (9)) und im nächsten Durchlauf wieder nach Low. Damit blinkt die am Portpin D0 angeschlossene LED.
  8. In Zeile (11) endet eigentlich das gesamte Programm. Allerdings wird der Punkt nie erreicht wegen der Endlosschleife. Das Programm hängt darin also fest und kann nur über einen Reset verlassen werden. Allerdings startet das Programm dann wieder von vorne....

Siehe auch

STM8

Weblinks