Forum: Compiler & IDEs STM32: _delay_us() und seine Freunde.


von Walter T. (nicolas)


Lesenswert?

Guten Abend zusammen,
ich bin gerade wieder Anfänger geworden und mache meine ersten 
Gehversuche mit einem STM32F4discovery, CooCoxIDE und ARM-GCC. Bei den 
ersten Versuchen geht es mir darum quick & dirty alte Hardware, die am 
AVR lief, wieder ans Laufen zu bekommen - und an der Stelle vermisse ich 
am meisten die schönen alten _delay-Funktionen.

(Konkret geht es mir darum, früh genug herauszubekommen, an welchen 
Stellen ich Pegelwandler brauche und wo nicht - und die noch rechtzeitig 
vor Weihnachten bestellen zu können - aber das ist OT).

Momentan bin ich einfach "lost in Durcheinander" - es scheint einige 
Versuche einer Implementierung im www zu geben, manche auf dem 
SysTick-Timer beruhend - aber gibt es für so einfache Funktionen keine 
Standardlösung?

Ein verwirrter
W.T.

von (prx) A. K. (prx)


Lesenswert?

Im Unterschied zum AVR ist das Laufzeitverhalten der Cortexe nicht 
ausschliesslich von den Befehlen selbst abhängig, sondern beispielsweise 
auch von den Waitstates und ob der Code grad in RAM oder ROM sitzt. Das 
steht einem simplen delay_us im Weg.

Wenn man an Stelle des Systick unbedingt Laufzeitschleifen verwenden 
will, beispielsweise um den Systick völlig frei zu haben oder weil 
ARM7/9 keinen haben, dann empfiehlt es sich, sie anfangs zu 
kalibirieren. Also die Laufzeit der Routine beim Start gegen eine 
bekannte Zeit zu messen und daraus einen Faktor zu gewinnen.

: Bearbeitet durch User
von Walter T. (nicolas)


Lesenswert?

Daraus lese ich zwischen den Zeilen: Eine Standardlösung gibt es nicht. 
Dann verschiebe ich meine Planung: Erst mehr in die Timer einsteigen und 
dann mit der Hardware weitermachen. Ich stehe nicht unter Zeitdruck, und 
meine kompletten ARM-Kenntnisse sind deutlich weniger als 10 Stunden 
alt.

Danke für die Antwort!

von Lutz H. (luhe)


Lesenswert?

Willkommen, bei meinem System gibt es,

void TimingDelay_Decrement(void);
void Delay(__IO uint32_t nTime);

und werden auf magische Weise vom systick aufgerufen.
Grüße

von (prx) A. K. (prx)


Lesenswert?

lutz h. schrieb:
> void TimingDelay_Decrement(void);
> void Delay(__IO uint32_t nTime);

Aus dem ST Beispielcode. Basiert auf dem Systick Interrupt und ist daher 
erst im Millisekundenbereich nutzbar. Im Nano- bis Mikrosekundenbereich 
ist Code nützlicher, der den Systick direkt abfragt.

: Bearbeitet durch User
von Gerhard G. (g_g)


Lesenswert?

Hallo,

hier findest du ein Beispiel für Delay_ms/Delay_us

Beitrag "STM32F4Discovery mit CooCox :: GPIO,SDIO,Timer,SoftTimer,USART,printf"

Stm32F407_blink_06.zip\Stm32F407_blink\Driver\source

suche in der Zip-Datei nach sTimer.c und sTimer.h

Gruß G.G.

von Walter T. (nicolas)


Lesenswert?

Hallo Gerhard,
danke für den Tipp und das Beispiel. Werde ich mir mal in Ruhe zu Gemüte 
führen. Das ist dann auch die richtige Gelegenheit, mich an die neue 
Projektstruktur und die Trennung von *.c und *.h-Dateien zu gewöhnen. 
Bislang hatte ich immer ein flaches Verzeichnis mit allen 
Source-Dateien.

Viele Grüße
W.T.

von Uwe Bonnes (Gast)


Lesenswert?

Wenn der Systick Timer laeuft, kann man fuer Verzoegerungen im 
Mikrosekundenbereich auch auf eine bestimmte Differenz im Systick 
Zaehler warten...

von public (Gast)


Lesenswert?

Hallöchen,

haben diese netten kleinen ST-ARM-Monster nicht auch nen RTOS? also da 
hätteste gleich nen Sekundentakt...

Grüßle

von (prx) A. K. (prx)


Lesenswert?

Jemand fragt im Kontext von Pegelwandlern nach der Implementierung von 
Verzögerungen. Wie könnte eine Signalisierung technisch aussehen, bei 
der ein Sekundentakt dabei weiterhilft? RFC1149? :-)

von Walter T. (nicolas)


Lesenswert?

Och, paßt schon. Der delay-Ersatz läuft problemlos seit Sonntagmorgen 
und alle Peripherie, die vorher am AVR lief tut es auch schon wieder - 
ich LIEBE die 5V-toleranten Eingänge.

Also kann der Thread gerne für wildfremde Spekulationen zweckentfremdet 
werden.

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.