mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Handbuch STM8S Discovery


Autor: Mirco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mahlzeit,

gibt es zu dem Stm8s Discovery eine Art Handbuch in der man sehen kann, 
welche Register wie beschrieben werden müssen?
Ich habe mir schon sämtliche PDFs von der ST Seite geladen aber nicht 
gefunden was ich suche.

Ich suche einfach eine Übersicht in der man sieht: "Port x Pin y soll 
ein Ausgang sein und low initialisiert werden. Also muss ich in das 
Register XYZ den Wert 0x02 schreiben"

sowas in der Art. Ich hoffe es ist klar geworden was ich suche ;)

Autor: Mirco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Edit: Und das eben nicht nur für Aus und Eingänge sondern auch für ADCs, 
Timer und ähnliches.

Autor: Das_Warzenschwein (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Die Infos über alle Periph. fidnest du im Reference Manual RM0016. So 
ist z.B. in Kapitel 11 über GPIOs beschrieben. Desweiteren findest du in 
Kapitel 11.9 eine kleine Beschreibung zu den jewieligen Registern des 
GPIOs. Die genauen Hex-Addressen sind im STM8S105xx Datenblatt 
enthalten. Du wirst in den Manuals keine programmcodes als Beispiele 
sehen. Da kannst du lange suchen.

Das GPIO Output Data Register von port A beschreibst du mit folgendem c 
code:
/* DDR = Data Direction Register: alle 8 pins als output setzen */
/* DDR-adresse: 0x5003 */
*(char*)0x5003 = 0xFF

/* alle output 8 pins sind auf high level */
/* ODR-adresse: 0x5000 */
*(char*)0x5000 = 0xFF

Mit dieser Info oben kommst du schon sehr, sehr weit. Du musst halt das 
Datenblatt verstehen, wofür die register stehen. So lernst du halt mehr 
als irgendwelche abgekupferte programmteile.
Sonderinfos und Tipps sind in den anderen Manuals enthalten. Ach ja, es 
gibt kein handbuch, in dem ein assembler oder c-code gezeigt wird.

Autor: Mirco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
vielen Dank. Exakt sowas wie das RM0016 habe ich gesucht. =)

Autor: Mirco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
eine Frage noch

müsste die Adresse vom DDR nicht 0x00 5002 sein? bzw 0x5002 und nicht 
0x5003?
Habe das so datasheet gefunden auf Seite 31

Demnach also *(char*)0x5002 = 0xFF für alle Ports auf output?

Nicht das ich da jetzt was durcheinander bringe...

Autor: Das_Warzenschwein (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In der Tat hast du Recht. Ich habe mich in der Zeile verguckt.

Autor: Mirco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok super. hast mir schonmal sehr geholfen danke

Autor: Das_Warzenschwein (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Für die STM8 gibt's eine IDE (Freeware) von:

- Cosmic mit 32 Kbs: http://www.cosmic-software.com/stm8.php
  Forum:
hxxps://my.st.com/public/STe2ecommunities/mcu/Lists/STM8SDiscovery/AllIt 
ems.aspx

hxxtps://my.st.com/public/STe2ecommunities/mcu/Lists/STM8SDiscovery/AllI 
tems.aspx

- IAR STM8 mit 8 Kbs: hxxp://www.iar.com/website1/1.0.1.0/2167/1/

- Raisonance mit 32 Kbs: 
http://www.mcu-raisonance.com/stm8-download.html
  Forum:  hxxp://forum.raisonance.com/viewforum.php?id=5

Bezugsquelle:
- hbe-shop.de/katalog/suche.php

- rs-online.de

- soselectronic.de/?searchstring=stm8s&str=378
  (für größere Mengen echt günstig) STM8S207 und 208er Reihe;
  Programierung entspricht der STM8S105, daher keine großen 
Umlernprozesse erforderlich

Autor: Mirco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke. Ist IDE der Compiler? Kenne mich mit den Begrifflichkeiten nicht 
so aus. Habe zumindest als Programierumgebung den STVD und als Compiler 
den Cosmic 32k.

Bin grade dabei diese Adressen zb *(char*)0x5002 mit define in eine 
Headerdatei zu schreiben das man später einfach schreiben kann zb.
PD_DDR = 0xFF. Erscheint mit auf Dauer einfacher als das hier: 
*(char*)0x5003 = 0xFF

Oder gibts es so eine Headerdatei bereits?

Autor: Das_Warzenschwein (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt eine Library von ST, die einen Anfänger ohne Kenntnisse in C 
etwas überfordert. Daher hier eine kleine Anleitung meinerseits:

In der Rar-Datei findest du ein Headerfile namens "stm8s_conf.h". In 
dieser Datei stehen die Include-Anweisungen für die Peripherie des 
Mikrocontrollers. Um die GPIO Funktionen nutzen zu können, muss die 
Zeile / * #define _GPIO (1) */ entkommentiert werden, also: #define 
_GPIO (1). In der Main.c fügst du in die erste Zeile folgende Anweisung 
#include "stm8s_conf.h" in die Main.c ein. So könnte ein Programm 
aussehen.

Main.c
#include "stm8s_conf.h"

void main(void)
 {  
  /* Resettet GPIO D */
  GPIO_DeInit(GPIOD);

   // Initialisiere Pin 0 : Output/ Push-Pull/ Low level (LED geht an)/ Fast (10 MHz )  
    GPIO_Init(GPIOD, GPIO_PIN_0,
    GPIO_MODE_OUT_PP_LOW_FAST);  
    }
}


Codeausschnitt von "stm8s_conf.h":
[...]

/************************************* AWU ************************************/
/* #define _AWU (1) */

/************************************* BEEP ***********************************/
/* #define _BEEP (1) */ 

/************************************* CLK ************************************/
#ifdef STM8S208
 /* #define _CAN (1) */ 
#endif /* (STM8S208) */

/************************************* CLK ************************************/
 #define _CLK (1)  

/************************************* EXTI ***********************************/
/* #define _EXTI (1) */

/******************************* FLASH/DATA EEPROM ****************************/
/* #define _FLASH (1) */

/********************************* OPTION BYTES *******************************/
/* #define _OPT (1) */

/************************************* GPIO ***********************************/
/ * #define _GPIO (1) */

/************************************* I2C ************************************/
/* #define _I2C  (1) */

[...]


Autor: Das_Warzenschwein (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In der Main.c ist ein Zeichen "}" zu viel.

Es muss daher lauten:
#include "stm8s_conf.h"

void main(void)
 {  
  /* Resettet GPIO D */
  GPIO_DeInit(GPIOD);

   // Initialisiere Pin 0 : Output/ Push-Pull/ Low level (LED geht an)/ Fast (10 MHz )  
    GPIO_Init(GPIOD, GPIO_PIN_0,
    GPIO_MODE_OUT_PP_LOW_FAST);  

 }

Autor: Das_Warzenschwein (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Im Anhang ist ein Programmklassiker, der überall im Internet zu finden 
ist. Hierbei schaltet das Discoveryboard die Led an GPIO Port D, Pin 0 
an bzw. aus.

Autor: Mirco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das mit den Headerdateien "stm8s_conf.h" hatte ich auch schon gefunden 
und auch schon angefangen mit diesem code hier:

    GPIO_Init(GPIOD, GPIO_PIN_0,
    GPIO_MODE_OUT_PP_LOW_FAST);

etwas zu schreiben. Habe das auch soweit verstanden und konnte mir aus 
der entsprechenden Headerdatei auch zusammen reimen, was der einzelne 
Befehl bedeutet. Aber ich wurde aus den Headerdateien nicht schlau wie 
man zum Beispiel einen Timer oder einen ADC zu beschreiben hat. Deshalb 
bin ich auch ursprünglich auf die Frage gekommen, ob es diese 
Datei(RM0016) gibt in der man die Register nachgucken kann.

C Kenntnisse habe ich schon. Und habe auch im Ramhmen des Studiums schon 
mit einem anderen uC gearbeitet (H8S/2357). Aber bin eben nicht so 
richtig fit auf dem Gebiet. Und wie gesagt konnte ich nirgends etwas 
finden wie ich die Register zu beschreiben habe. Aber mit dem RM0016 
sollte das nun klappen hoffe ich mal

Autor: Guest (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In den offiziellen Quellen der Library gibt es auch eine Hilfedatei, wo 
diverse Beispiele zur Verwendung der Peripherie gegeben sind. Ist an 
sich sehr Hilfreich.

An sich erleichtern die ganzen Bibliotheken den Umgang mit den STM8* 
ungemein. Ich arbeite hiermit jetzt seit fast 1 1/2 Jahren in der 
Produktentwicklung und hatte bislang keine Probleme. Aber um den vollen 
Umfang nutzen zu können, ist doch das Hauptmanual des STM8S Pflicht.

Autor: Das_Warzenschwein (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Um die Library von ST zu verstehen, soll hier ein kleines Beispiel 
aufgeführt werden:
GPIO-Header:
#define GPIO_A_BaseAddress     0x5000  /* GPIO Port A Ouput Data Register */ 

/* die GPIO Register nachbilden  */
typedef struct GPIO_Port
    {
vu8 ODR; /* Output Data Register */
vu8 IDR; /* Input Data Register */
vu8 DDR; /* Data Direction Register */
vu8 CR1; /* Configuration Register 1 */
vu8 CR2; /* Configuration Register 2 */
    } GPIO_Port_Struct;

#define GPIO_A ((GPIO_Port_Struct*) GPIO_A_BaseAddress)
/* entspricht: (GPIO_Port_Struct*) 0x5000) */

----------------------------------------------------------------------
GPIO-Source:
GPIO_DeInit(GPIO_Port_Struct * GPIO_x)
 {
   GPIO_x->ODR = 0x00;
   // Anweisungen
 }
----------------------------------------------------------------------
main.c:
GPIO_DeInit(GPIO_A);
/* entspricht: GPIO_DeInit(*(GPIO_Port_Struct*) 0x5000));
   Oh Wunder, das kommt einem ja bekannt vor: *(char*)0x5000 
   statt char ist es halt eine Struktur, auf deren einzelne Elemente mittels Pfeiloperator zugegriffen werden
*/ 
Also wird durch die "// Anweisungen" die Basis Adresse inkrementiert, so 
gilt für Port A:
    GPIOA_ODR     0x5000  Port A Ouput Data Register (Base Address)
    GPIOA_IDR     0x5001  Port A Input Data Register
    GPIOA_DDR     0x5002  Port A Data Direction Register
    GPIOA_CR1     0x5003  Port A Control Register 1
    GPIOA_CR2     0x5004  Port A Control Register 2

Mit diesen Erkenntnissen versteht man die Funktionsweise des 
Programmcodes.
Meine Herangehensweise war damals:
Ich will eine Peripherie ansteuern
1) Schaue mir die Header an und sehe, welche Befehle es gibt.
2) Dann wird die Source analysiert: Parameter[in], Retval (Return Value)
3) Schlussendlich  Manual 

Autor: Mirco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok so langsam wird einem das klar. Ich denke mal nun sollte ich genug 
wissen oder zumindest wissen wo ich was nachgucke um mit dem Ding 
erstmal ordentlich rum zu spielen.
Danke erstmal für deine ganze Hilfe.

Autor: micha-uhl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
wie geht man Anfänger am besten vor, um Datum und Uhrzeit auf einem LCD 
darzustellen? Die Ansteuerung des LCD funktioniert schon.
Micha

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

ich bin auf der Suche nach einer älteren Version von STVD bzw. STVP für 
das stm8s discovery Board. Die neuste 4.2.1 funktioniert bei mir unter 
Vista einfach nicht.

Gruß
Peter

Autor: LuckyLuke (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo !

Ich habe ein STM8S-Discovery geschenkt bekommen und möchte mir nun die 
Entwicklungsumgebung zusammen bauen. Kann mir jemand sagen wo ich die 
Libary "stm8sfblib.zip" downloaden kann ? Habe auf der Seite von ST 
alles abgesucht und nicht gefunden. Vielen Dank für Eure Hilfe !

Gruß Luke

Autor: virtualwinner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
LuckyLuke schrieb:
> Kann mir jemand sagen wo ich die
> Libary "stm8sfblib.zip" downloaden kann ? Habe auf der Seite von ST
> alles abgesucht und nicht gefunden.

Ich bin ebenfalls neu und hatte das gleiche Problem. Da haben sich wohl 
gegenüber dem Zeitpunkt des Erstellens des Tutorials Bezeichnungen von 
Dateien und Ordnern geändert oder das Tutorial hat einfach ein paar 
Bezeichnungen unterschlagen.

Auf der Produktseite des Discovery-Boards 
(http://www.st.com/internet/evalboard/product/247087.jsp) unter dem 
Punkt "Firmware" gibt es verschiedene libraries downzuloaden. Für das 
Beispiel sollte die Datei mit der Beschreibung "Using the 
STM8S-DISCOVERY GPIOs and interrupt controller to drive LEDs (AN3266)" 
ausreichen.

Ich habe die beiden Ordner "Libraries" und "Project" aus der Zip-Datei 
ins Projekt entpackt. Dort findest du dann auch die Dateien wie im 
Screenshot mit der Dateiliste dargestellt.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.