Forum: Mikrocontroller und Digitale Elektronik Delay für STM32F4Discovery


von Malte B. (aerandir)


Lesenswert?

Hallöchen

ich bin neu hier bei euch im Forum und noch neuer im Bereich der µC 
programmierung. Arbeite für die Uni mit einem STM32F4Discovery, was 
leider nicht so ganz einsteigerfreundlich ist ;-)

Ich bin auf der Suche nach einer Delay Funktion, mit der ich Delays im 
ms Bereich verwirklichen kann. Ich hab hier im Forum und auch bei google 
schon viel dazu gelesen und probiert...unter anderem mit dem Systick und 
einer einfachen for-Schleife. Aber irgendwie krieg ich das alles nicht 
hin :-(

Wäre nett, wenn mir jemand möglichst genau erklären kann, wie so etwas 
funktioniert.

Danke schonmal für eure Hilfe

von K. D. (deka)


Lesenswert?

Google doch einfach
stm32 discovery delay
da findet sich doch schon im ersten Ergebnis was.

Wenn du aber wirklich daran denkst Delays zu verwenden, dann würde ich 
dir einen einfacheren 8bit µC ans Herz legen. PIC / AVR. Dann ist's 
einfach noch nicht so weit, dass du mit der Komplexität zu Recht kommst.

von Malte B. (aerandir)


Lesenswert?

Hey, danke für deine Antwort.

Google hat mir wie gesagt nichts geholfen...und bei dem Beispiel, dass 
du mit gezeigt hast ist die Zeit nicht genau Definiert, die gewartet 
wird.

Ich würde schon, seit ich mit dem Projekt angefangen habe lieber auf 
einen AVR arbeiten, würde für mich alles viel einfacher machen...Darf 
ich aber leider nicht, weil mit dieses Board von der Uni vorgeschrieben 
wurde...

von m.n. (Gast)


Lesenswert?

Verwendest Du als Grundlage ein Demo-Programm?
Wenn nicht, solltest Du das am Anfang machen!

Darin findet sich zumeist eine Funktion
void SysTick_Handler(void), die typischerweise alle 10ms per Interrupt 
aufgerufen wird.

Initialisiert wird an anderer Stelle mit:
  RCC_ClocksTypeDef RCC_Clocks;

/* SysTick end of count event each 10ms */
  RCC_GetClocksFreq(&RCC_Clocks);
  SysTick_Config(RCC_Clocks.HCLK_Frequency / 100);

In dem oben erwähnten SysTick_Handler() kannst Du ein Flag setzen, was 
in einer Warte-Funktion ausgewertet wird, oder auch eine 
uint32_t-Variable auf '0' runterzählen und, und, und ...

von Malte B. (aerandir)


Angehängte Dateien:

Lesenswert?

Danke

Jetzt hab ich das Beispiel das ich hatte endlich verstanden :D Das hat 
mich nen bisschen verwirrt, weil zu viel drum rum stand.

Habe mal meinen einfachen Blinky mit nem Systick angefügt.

von Thomas R. (Gast)


Lesenswert?

Malte B. schrieb:
> Ich bin auf der Suche nach einer Delay Funktion, mit der ich Delays im
> ms Bereich verwirklichen kann.

Du erwartest offensichtlich eine Funktion, die den Prozessor für eine 
begrenzte Zeit zum Nichtstun verurteilt.
Sowas wäre machbar, es gibt aber auch die Möglichkeit, dass diese Zeit 
zur Erledigung anderer Aufgaben genutzt wird.
Welchen Vorteil siehst du, diese Zeit ungenutzt verstreichen lassen?

von Malte B. (aerandir)


Lesenswert?

Ich will damit einen DS18B20 Temperatursensor ansprechen. Dazu muss ich 
den Pin der Datenleitung für eine gewissen Zeit auf High und dann wieder 
auf Low schalten, um mit dem Sensor zu kommunizieren.

von m.n. (Gast)


Lesenswert?

Malte B. schrieb:
> Habe mal meinen einfachen Blinky mit nem Systick angefügt.

Das meinte ich :-)

von Peter (Gast)


Angehängte Dateien:

Lesenswert?

Nicht die allerfeinste Art, aber angepasst für den STM32F4-Discovery @ 
168MHz mit Optimierung -OS (Die Optimierung sollte keinnen allzugrossen 
Einfluss haben, da delay_us() eine inline-asm Funktion ist!

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.