Forum: Mikrocontroller und Digitale Elektronik Handbuch STM8S Discovery


von Mirco (Gast)


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 ;)

von Mirco (Gast)


Lesenswert?

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

von Das_Warzenschwein (Gast)


Angehängte Dateien:

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:
1
/* DDR = Data Direction Register: alle 8 pins als output setzen */
2
/* DDR-adresse: 0x5003 */
3
*(char*)0x5003 = 0xFF
4
5
/* alle output 8 pins sind auf high level */
6
/* ODR-adresse: 0x5000 */
7
*(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.

von Mirco (Gast)


Lesenswert?

vielen Dank. Exakt sowas wie das RM0016 habe ich gesucht. =)

von Mirco (Gast)


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...

von Das_Warzenschwein (Gast)


Lesenswert?

In der Tat hast du Recht. Ich habe mich in der Zeile verguckt.

von Mirco (Gast)


Lesenswert?

Ok super. hast mir schonmal sehr geholfen danke

von Das_Warzenschwein (Gast)


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

von Mirco (Gast)


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?

von Das_Warzenschwein (Gast)


Angehängte Dateien:

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
1
#include "stm8s_conf.h"
2
3
void main(void)
4
 {  
5
  /* Resettet GPIO D */
6
  GPIO_DeInit(GPIOD);
7
8
   // Initialisiere Pin 0 : Output/ Push-Pull/ Low level (LED geht an)/ Fast (10 MHz )  
9
    GPIO_Init(GPIOD, GPIO_PIN_0,
10
    GPIO_MODE_OUT_PP_LOW_FAST);  
11
    }
12
}

Codeausschnitt von "stm8s_conf.h":
1
[...]
2
3
/************************************* AWU ************************************/
4
/* #define _AWU (1) */
5
6
/************************************* BEEP ***********************************/
7
/* #define _BEEP (1) */ 
8
9
/************************************* CLK ************************************/
10
#ifdef STM8S208
11
 /* #define _CAN (1) */ 
12
#endif /* (STM8S208) */
13
14
/************************************* CLK ************************************/
15
 #define _CLK (1)  
16
17
/************************************* EXTI ***********************************/
18
/* #define _EXTI (1) */
19
20
/******************************* FLASH/DATA EEPROM ****************************/
21
/* #define _FLASH (1) */
22
23
/********************************* OPTION BYTES *******************************/
24
/* #define _OPT (1) */
25
26
/************************************* GPIO ***********************************/
27
/ * #define _GPIO (1) */
28
29
/************************************* I2C ************************************/
30
/* #define _I2C  (1) */
31
32
[...]

von Das_Warzenschwein (Gast)


Lesenswert?

In der Main.c ist ein Zeichen "}" zu viel.

Es muss daher lauten:
1
#include "stm8s_conf.h"
2
3
void main(void)
4
 {  
5
  /* Resettet GPIO D */
6
  GPIO_DeInit(GPIOD);
7
8
   // Initialisiere Pin 0 : Output/ Push-Pull/ Low level (LED geht an)/ Fast (10 MHz )  
9
    GPIO_Init(GPIOD, GPIO_PIN_0,
10
    GPIO_MODE_OUT_PP_LOW_FAST);  
11
12
 }

von Das_Warzenschwein (Gast)


Angehängte Dateien:

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.

von Mirco (Gast)


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

von Guest (Gast)


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.

von Das_Warzenschwein (Gast)


Lesenswert?

Um die Library von ST zu verstehen, soll hier ein kleines Beispiel 
aufgeführt werden:
1
GPIO-Header:
2
#define GPIO_A_BaseAddress     0x5000  /* GPIO Port A Ouput Data Register */ 
3
4
/* die GPIO Register nachbilden  */
5
typedef struct GPIO_Port
6
    {
7
vu8 ODR; /* Output Data Register */
8
vu8 IDR; /* Input Data Register */
9
vu8 DDR; /* Data Direction Register */
10
vu8 CR1; /* Configuration Register 1 */
11
vu8 CR2; /* Configuration Register 2 */
12
    } GPIO_Port_Struct;
13
14
#define GPIO_A ((GPIO_Port_Struct*) GPIO_A_BaseAddress)
15
/* entspricht: (GPIO_Port_Struct*) 0x5000) */
16
17
----------------------------------------------------------------------
18
GPIO-Source:
19
GPIO_DeInit(GPIO_Port_Struct * GPIO_x)
20
 {
21
   GPIO_x->ODR = 0x00;
22
   // Anweisungen
23
 }
24
----------------------------------------------------------------------
25
main.c:
26
GPIO_DeInit(GPIO_A);
27
/* entspricht: GPIO_DeInit(*(GPIO_Port_Struct*) 0x5000));
28
   Oh Wunder, das kommt einem ja bekannt vor: *(char*)0x5000 
29
   statt char ist es halt eine Struktur, auf deren einzelne Elemente mittels Pfeiloperator zugegriffen werden
30
*/
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 

von Mirco (Gast)


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.

von micha-uhl (Gast)


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

von Peter (Gast)


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

von LuckyLuke (Gast)


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

von virtualwinner (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.