Forum: Mikrocontroller und Digitale Elektronik DMA funktioniert nur einmal


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von buell (Gast)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Versuchs mal mit
1
hadc1.Init.DMAContinuousRequests = ENABLE;
2
hadc1.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN;

von buell (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.