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.
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
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!
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
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
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.
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.
Wenn der Systick Timer laeuft, kann man fuer Verzoegerungen im Mikrosekundenbereich auch auf eine bestimmte Differenz im Systick Zaehler warten...
Hallöchen, haben diese netten kleinen ST-ARM-Monster nicht auch nen RTOS? also da hätteste gleich nen Sekundentakt... Grüßle
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? :-)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.