Forum: Mikrocontroller und Digitale Elektronik Warteschleifen für STM8-Controller?


von Third E. (third-eye)


Lesenswert?

Hallo,

ich mache gerade meine ersten Gehversuche abseits der AVR-Welt mit einem 
STM8S Discovery-Board.
Bisher habe ich ausschließlich AVRs programmiert.
Ich verwende das ST Visual Develop in Kombination mit einem Raisonance 
Compiler.

Mein erstes "Hello World" in der Mikrocontrollertechnik (= blinkende 
LED) läuft schon.
Allerdings habe ich eine primitive Warteschleife selber programmieren 
müssen, weil ich kein Äquvalent zu "_delay_us" und "_delay_ms" gefunden 
habe.
Gibt es da sowas?

Gerade für Wartezeiten, wo die Genauigkeit unkritisch ist, habe ich 
bisher sowas immer verwendet.
Z.B. habe ich immer gerne eine Power-On-Wartezeit von z.B. einer halben 
Sekunde, sodass die angeschlossene Hardware garantiert eingeschwungen 
ist, bevor der Controller loslegt.

Wie könnte man sowas ähnlich einfach implementieren wie die 
"_delay_xx"-Funktionen?

Danke.
Third-Eye

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Beim STM32F4xx mit 168MHz wäre es das:
1
void uDelay(const uint32_t usec) {
2
  uint32_t count = 0;
3
  const uint32_t utime = (120 * usec / 7);
4
  do {
5
    if (++count > utime) {
6
      return;
7
    }
8
  } while (1);
9
}
10
11
void mDelay(const uint32_t msec) {
12
  uDelay(msec * 1000);
13
}

Für Deinen müsstest Du die Zahlen wohl etwas verringern. (Oder suchen 
nach "uDelay" in den Demos von ST.)

: Bearbeitet durch User
von Norbert M. (Gast)


Lesenswert?

Im STM8-Circle hat sich jemand schon drüber gedanken gemacht:
http://www.stm8circle.com/forum/viewtopic.php?pid=57234

LG, N0R

von Falk B. (falk)


Lesenswert?

@ Markus Müller (mmvisual)

>Beim STM32F4xx mit 168MHz wäre es das:

Einfach mal as schnell hinschreiben ist selten eine gute Lösung.
Schau dir an wie das der avr-gcc macht, nämlich zweistufig. Zu zwar in 
der Form, dass es Funktionen/Macros gibt, die mit konstanten Parametern 
zu exakten Zeiten führen. Auch bei kleinen Verzögerungszeiten. Denn 
deine Division gibt es auch bei den meisten STM32 nicht umsonst in 3 
Takten, das ist alles per Software gerechnet.

von Norbert M. (Gast)


Lesenswert?

Norbert M. schrieb:
> Im STM8-Circle hat sich jemand schon drüber gedanken gemacht:
> http://www.stm8circle.com/forum/viewtopic.php?pid=57234

Hmm, da ist wohl etwas mit dem Link schiefgelaufen.
http://www.stm8circle.com/forum/viewtopic.php?pid=5723

von Michael K. (Gast)


Lesenswert?

Bau Dir einen 1ms system timer und mach z.B sowas in der IRQ
--t_100ms;
if (!t_100ms) {t_100ms = 100; flag_100ms = 1;}

Das Flag wertest Du in der main aus und setzt das nach Bearbeitung
zurück.
So brauchst Du nur einen Hardwaretimer für beliebig viele Zeiten und 
kannst parallel beliebige andere Sachen machen.

Die Seite hat mir beim STM8 Einstieg geholfen.
http://benryves.com/tutorials/stm8s-discovery/
Erst da habe ich halbwegs verständlich erfahren wie ich mir alles das 
zusammensuche was ich brauche und wie man z.B. IRQ Routinen erstellt 
weil die ST Seite anscheinen von der Konkurrenz erstellt wurde, anders 
kann mich mir das nicht erklären.

Das ST.com Forum ist tot und dem Support zu mailen ist sinnlos.
Die 'STM8S_StdPeriph_Driver' sind teilweise ganz nützlich und teilweise 
ziemlicher Mist der überhaupt keine Arbeit abnimmt oder sogar falsche 
Einstellungen macht.
Manches geht ganz einfach nicht über die LIBs so das man ohnehin direkt 
auf den Registern rumackern muß was so gut oder schlecht geht wie bei 
jeder MCU.
Die Datenblätter sind ok.
Die Peripherie-Schaltbilder sind viel zu grobe Blöcke und dürften gern 
so detailiert wie bei Microchip sein, denn die Setting sind teilweise so 
umfangreich das sich der Sinn in Textform nur schwer erschließt.

Ich verwende den IAR in der kostenfreien 8K Version weil ich mich weder 
mit Raisonance noch Cosmic so recht anfreunden konnte.
Beim IAR geht einfach alles ohne Beanstandung auch der für mich so 
wichtige Debugger geht sehr komfortabel und zuverlässig.
Der SDCC kann jetzt wohl auch STM8, falls Du lieber Open Source 
verwendest.

Wechselt man den Footprint vom z.B. K3-Typ (QFN) auf dem Discovery Board 
auf z.B. F3 (tssop20) auf einem eigenen Board muß man die Software 
ändern bzw. spezielle Einstellungen in den Option Bytes machen.
Wenn man es weiß ist das nur ärgerlich, aber ST verliert kein Wort 
darüber.
Wollen wohl die Überraschung nicht verderben

Einige Hardware (TIM1 ...) wird erst auf die Pins geroutet wenn man die 
Option bytes ändert. Mit dem ST Visual Programmer hat das 'irgendwie' 
nicht geklappt aber dafür mit dem IAR.
Schön ist der Timer dann einfach nicht die Kontrolle über einige Pins 
erlangt was eine recht herzerfrischende Fehlersuche nach sich gezogen 
hat.

Über den ST Visual Programmer kann ich z.B. auch kein erase machen.
Ausgegraut, nicht herauszufinden warum.
Überschreiben kann ich alles, wobei der F3, K3 und einige andere 
Controllertypen nicht auseinander halten kann.
Es ändert sich zwar die Funktion der Option bytes, aber sonst ist alles 
die gleiche Suppe für diese komische ST Software.

So sehr sich ST auch bemüht hat den Einstieg zum STM8 möglichst steinig 
zu gestalten, wenn man das hinter sich hat und möglichst nicht mehr den 
kleinsten Fitzel Software von ST verwendet, dann macht der Chip Spaß.
Kann wirklich viel (für einen kleinen 8bitter), kostet wenig.

Wertung:
Billige Hardware dafür nicht so das flauschige wohlfühl Ambiente wie bei 
den AVRs sonder eher ein bisschen krank und nerdig wie bei den PICs nur 
ohne die gute IDE und die freien C-Compiler.

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.