Forum: Mikrocontroller und Digitale Elektronik Ein Timer, ein DMA und zwei ADCs bei STM32


von Holger T. (holger1979)


Lesenswert?

Hallo Zusammen,

ich sitze gerade an einem Problem, dass ich so einfach nicht gelöst 
bekomme.
Ich könnte mir jedoch vorstellen, dass die Lösung ganz einfach ist.

Ich habe einen STM32. Dieser soll in festen Zeitabständen von wenigen µs 
eine Messung auf zwei ADCs gleichzeitig starten.

Die Messergebnisse sollen dann per DMA in einen Speicher geschrieben 
werden.

Ich benutze CubeMX für die Konfiguration.
Leider habe ich die Kombination noch nicht gefunden, die
mir das Problem löst.

Ich kann den DMA auf Continuous stellen, aber dann macht der doch die 
Messungen so schnell wie er kann hintereinander. Daher müssen die 
Messungen vom Timer getriggert werden. Und wie bekomme ich de STM dazu, 
die Messwerte in einen Speicher zu legen? Und wenn eine bestimmte Anzahl 
an Messungen fertig ist, dann soll ein Interrupt vom DMA kommen. Brauche 
ich einen zwei DMAs? Das Ganze ist noch etwas konfuß.

Viele Grüße und vielen Dank schonmal,

Holger

von Marcus H. (Firma: www.harerod.de) (lungfish) Benutzerseite


Lesenswert?

Hi Holger,
Schaltplan / MCU?

In seltenen Fällen bekomme ich Setupkombinationen mit den Bibliotheken 
nicht zustande. In diesem Fall werden die Registerbits direkt nach 
Datenblatt gekippt.

Ein aktuelles Beispiel ist ein Hardwaretreiber, der aus drei Timern, 
zwei ISRs und zwei DMAs besteht. Der soll sich dann nahtlos ins 
Restsystem einfügen. ;)

Cheerio,
 marcus

von Holger T. (holger1979)


Lesenswert?

Hallo Marcus,

es handelt sich um einen STM32F215VET.

Die ADCs hängen an
PC1 (ADC_IN11) und
PC2 (ADC_IN12).

Tim2 soll jetzt einen weiteren Timer (TimX) triggern, welcher dann 100 
mal im 10µs Abstand die beiden ADCs synchron triggert, sodass diese ihre 
Ergebnisse per DMA in einem Speicher ablegen.

Das Triggern von Timern über Timer ist mir kompliziert genug, bekomme 
ich aber noch hin. Ich komme nur nicht weiter, wo jetzt der Timer die 
ADCs triggert und das gleichzeitig noch irgendwie mit DMA gehen soll.

Da kriege ich einfach die Konfiguration nicht hin.
Und ich muss einen TimX finden, der von Tim2 getriggert werden kann.
Ich meine mich erinnern zu können, dass Tim6 verwendet werden kann.

Vielen Dank aber schonmal bis jetzt   ;)

von Marcus H. (Firma: www.harerod.de) (lungfish) Benutzerseite


Lesenswert?

Das klingt doch recht unspektakulär. Nur so ins Unreine gedacht:

Wer triggert wen? Die typische Kette wäre:

TIM->ConversionStart-+->ADC1->ConversionComplete->DMA(n1)Stream(m1)
                     |
                     +->ADC2->ConversionComplete->DMA(n2)Stream(m2)

Sahnehäubchen -> DMA Transfer Complete triggert ISR ;)

von Holger T. (holger1979)


Lesenswert?

Ja genau so. Die Frage ist nur wie ich das konfiguriere? Ich muss ja 
alles irgendwo einstellen. Besonders beim DMA habe ich noch keine Idee 
obwohl es nicht schwer sein kann.

Gibt es für diesen Fall ein tutorial?

von Marcus H. (Firma: www.harerod.de) (lungfish) Benutzerseite


Lesenswert?

Holger T. schrieb:
> Ja genau so. Die Frage ist nur wie ich das konfiguriere? Ich muss ja
> alles irgendwo einstellen. Besonders beim DMA habe ich noch keine Idee
> obwohl es nicht schwer sein kann.
>
> Gibt es für diesen Fall ein tutorial?

Fühl Dich jetzt bitte nicht auf den Arm genommen, aber wie das auf 
Registerebene funktioniert steht glasklar in:

- RM0033_STM32F2_Reference_Manual_CD00225773 (TIM/DMA/ADC)
- STM32F2_datasheet_CD00237391_1410_rev12
- STM32F2_errata_DM00027213
- PM0056_F10_F20_F21_L1_M3_Programming_Manual_CD00228163

Wie das mit dem Abstraktionswerkzeug dieser Woche geht, kann ich Dir 
nicht sagen, da ich solche Sachen direkt auf dem Blech konfiguriere.

Frage am Rande: Brauchst Du's gewerblich?

von Falk B. (falk)


Lesenswert?


von Holger T. (holger1979)


Lesenswert?

Hallo,

ich werde mir das ab Dienstag mal anschauen.

Erst einmal vielen Dank und schönes Osterwochenende!

von Felix C. (felix_c13)


Lesenswert?

Marcus H. schrieb:
> Fühl Dich jetzt bitte nicht auf den Arm genommen, aber wie das auf
> Registerebene funktioniert steht glasklar in:
>
> - RM0033_STM32F2_Reference_Manual_CD00225773 (TIM/DMA/ADC)
> - STM32F2_datasheet_CD00237391_1410_rev12
> - STM32F2_errata_DM00027213
> - PM0056_F10_F20_F21_L1_M3_Programming_Manual_CD00228163

Wer mit dem Cube arbeitet schaut wohl kaum ins Datasheet^^

Hab ein Projekt mit dem F7 wo genau das gemacht wird. OHNE HAL-Library, 
kann da später mal den Source geben. Ist ja bei den STM32 überall fast 
gleich.

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.