Forum: Mikrocontroller und Digitale Elektronik DMA funktioniert nur einmal


von buell (Gast)


Angehängte Dateien:

Lesenswert?

Hallo

Ich habe eine Frage zur DMA und zwar habe ich den Chip STM32L431RCI6.
Ich habe den Fall, dass ich über einen Timer den ADC triggere (1027 
Pulse) und mit der DMA die Daten wegschaufele.
Der ganze Prozess so funktioniert auch und die Daten werden konvertiert. 
Diese werden auch durch die DMA einmal in den Speicher gelegt.
Wenn ich den Prozess aber nochmals durchführe, sprich den ADC ein 2. Mal 
triggere (1027) Pulse, ändern sich die Daten im Speicher nicht mehr..
Ich würde meinen, dass ich den ADC und die DMA aber richtig konfiguriert 
hätte.
Was habe ich übersehen?

Ich danke für eure Hilfe

von Nils Z. (nils_z)


Lesenswert?

Versuchs mal mit
1
hadc1.Init.DMAContinuousRequests = ENABLE;
2
hadc1.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN;

von buell (Gast)


Lesenswert?

Nils Z. schrieb:
> Versuchs mal mithadc1.Init.DMAContinuousRequests = ENABLE;
> hadc1.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN;

Danke vielmals, das werde ich heute gleich mal versuchen :)
Ich hoffe es klappt.

buell

von buell23 (Gast)


Lesenswert?

Nils Z. schrieb:
> Versuchs mal mithadc1.Init.DMAContinuousRequests = ENABLE;
> hadc1.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN;

Ich habe die Einstellungen nun vorgenommen, die Werte im Memory 1 im 
Debugger ändern sich trotzdem nicht..
Liegt es vielleicht doch an den DMA Einstellungen?

von Nico W. (nico_w)


Lesenswert?

Irgendwie sehe ich in deinem Code nicht, wie du den ADC wieder startest.

Ich konfiguriere bei mir den DMA, dann den ADC. DMA mit transfer 
complete interrupt. Wenn der auslöst, dann lösche ich das DMA und 
CONT-bit beim ADC.

Bei einem Neustart muss ich dann DMA, CONT und SWSTART-bit setzen. Wie 
das mit der HAL geht kann ich aber nicht sagen.

von buell23 (Gast)


Angehängte Dateien:

Lesenswert?

Nico W. schrieb:
> Irgendwie sehe ich in deinem Code nicht, wie du den ADC wieder
> startest.
>
> Ich konfiguriere bei mir den DMA, dann den ADC. DMA mit transfer
> complete interrupt. Wenn der auslöst, dann lösche ich das DMA und
> CONT-bit beim ADC.
>
> Bei einem Neustart muss ich dann DMA, CONT und SWSTART-bit setzen. Wie
> das mit der HAL geht kann ich aber nicht sagen.

Hallo

Ich habe das im Main im nach dem Init drin. Zeile 259.
Ich starte den ADC nur einmal vorerst.

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.