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 ;)
Edit: Und das eben nicht nur für Aus und Eingänge sondern auch für ADCs, Timer und ähnliches.
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.
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...
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
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?
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 | [...]
|
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 | }
|
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.
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
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.
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
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.
Hallo, wie geht man Anfänger am besten vor, um Datum und Uhrzeit auf einem LCD darzustellen? Die Ansteuerung des LCD funktioniert schon. Micha
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.