Forum: Mikrocontroller und Digitale Elektronik STM32F Daten in DMA schreiben und auslesen


von Sefi (Gast)


Lesenswert?

Hallo zusammen

Ich bin ganz neu auf dem Gebiet und habe mich begonnen einzuarbeiten. 
Verzeiht mir also bitte "dumme Fragen" :).

Endziel meiner Aufgabe ist es, Sensordaten kontinuierlich mittels STM32F 
einzulesen (dabei mittels DMA abspeichern, damit der Cpntroller in den 
SLEEP-Modus gehen kann), sobald der Buffer voll ist, soll er kurz 
aufwachen um die Daten zu verarbeiten und danach wieder schlafen.

Nun habe ich mittels der HAL "Library" diverse Funktionen gefunden, habe 
aber nicht wirklich den Durchblick... Kann mir evtl jemand grob 
erklären, wie ich Daten (zum starten müssen das noch nicht wechselnde 
Sensorwerte sein) mittels DMA schreiben, danach schlafen und bei DMA 
Interrupt wieder aufwachen kann um das ganze zu wiederholen?

Vielen Dank!

von Stefan F. (Gast)


Lesenswert?

DMA habe ich bisher nur in Zusammenhang mit PC Soundkarten programmiert, 
deswegen kann ich Dir da nicht helfen.

Ich denke, dass du dich mit dem Referenzhandbuch deines Mikrocontrollers 
auseinander setzen musst. Dort sind alle Funktionen auf Register-Ebene 
erklärt. Danach kannst du die Register benutzen, oder die Doku zur HAL 
lesen, um herauszufinden, wie du die Register indirekt durch die HAL 
korrekt ansprichst. Mein Eindruck zur HAL Doku ist: Zu knapp, man muss 
den Quelltext lesen. Der ist übrigens umfangreich kommentiert.

Für weitere Details solltest du den Mikrocontroller benennen. STM32F ist 
ein sehr weites Feld von hunderten Modellen die mit unterschiedlichen 
DMA Controllern bestückt sind.

Dein Wunsch, den Controller möglichst lange Schlafen zu lassen, lässt 
mich vermuten, dass du Strom sparen willst oder musst. Falls dem so ist, 
würde ich Dir empfehlen, einen Blick auf die STM32L0 Serie zu werfen, 
denn die sind dafür optimiert.

von Rolltür (Gast)


Lesenswert?

Mir fehlen da einige Infos. Vermutlich geht es um das Stromsparen beim 
Batteriebetrieb. Mit DMA kann der Controller (CPU) zwar lange schlafen, 
aber nicht sehr tief. Wäre es nicht sinnvoller den Controller sehr tief 
(alle Takte ausgeschaltet) schlafen zu lassen und ihn zur Messung über 
die interne RTC wecken zu lassen?

von Sefi (Gast)


Lesenswert?

Es handelt sich im Moment um das Nucleo-Board F446RE, später dann 
STM32F746ZG (vorgegeben). Der Controller wird die meiste Zeit tief 
schlafen (auch keine Sensordaten) auslesen. Da sehr stark Batterie 
geschont werden muss, sollte er im Betrieb allerdings die CPU nur 
anwerfen um die Daten, welche mittels DMA eingelesen wurden, rasch 
auszuwerten.

von Stefan F. (Gast)


Lesenswert?

Sefi schrieb:
> STM32F746ZG (vorgegeben)
> sehr stark Batterie geschont werden muss

Sorry, aber da hat man Dir eine Kombination vorgegeben, die schon zum 
Scheitern verurteilt ist. Dieser Mikrocontroller nimmt im Sleep schon 
mehr Strom auf, als einige kleinere im laufenden Betrieb!

von Bedenken Träger (Gast)


Lesenswert?

Na hoffentlich funktioniert die DMA Maschine wenn der
Prozessor "schläft".

von Stefan F. (Gast)


Lesenswert?

Sefi schrieb:
> Der Controller wird die meiste Zeit tief
> schlafen (auch keine Sensordaten) auslesen

Das war nicht gefordert, siehe:

> Der Controller wird die meiste Zeit tief
> schlafen (auch keine Sensordaten) auslesen

von Sefi (Gast)


Lesenswert?

Der ist vorgegeben, weil damit noch viele weitere Dinge erledigt werden. 
Meine Aufgabe besteht primär nur in der DMA-Thematik..

von Stefan F. (Gast)


Lesenswert?

Wenn ich an einem Projekt mit widersrpüchlichen Anforderungen arbeiten 
muss, achte ich darauf, wenigstens meinen Tisch rein zu halten.

Du solltest mit dem Auftraggeber klären, welche Stromaufnahme erwartet 
wird und welche lieferbar sein wird.

von Rolltür (Gast)


Lesenswert?

Der DMA braucht doch einen Takt!? Dann kann der Schlaf also nicht tief 
ein. Mein Gefühl sagt, DMA bringt da nichts.

von Stefan F. (Gast)


Lesenswert?

Manchmal ist es besser, einen kleinen Mikrocontroller als Master mit 
einem großen als Arbeitspferd zu kombinieren, wobei der große dann in 
den Pausen komplett Stromlos geschaltet wird.

von Stefan F. (Gast)


Lesenswert?

Rolltür schrieb:
> Der DMA braucht doch einen Takt!? Dann kann der Schlaf also nicht tief
> ein. Mein Gefühl sagt, DMA bringt da nichts.

Das war nicht gefordert, siehe:

> Der Controller wird die meiste Zeit tief
> schlafen (auch keine Sensordaten) auslesen

von Bedenken Träger (Gast)


Lesenswert?

Rolltür schrieb:
> Mein Gefühl sagt, DMA bringt da nichts.

Ja für ein paar Daten alle Nase lang ist das wie mit
Atombomben auf Spatzen geworfen.

von Rolltür (Gast)


Lesenswert?

Da fehlen Infos.
Wenn der Controller beispielsweise nur 100 Mal pro Sekunde Sensordaten 
lesen soll, dann ist der zusätzliche Strom für 500 statt 50 Takten 
unwesentlich. Nochmals: Mein Gefühl sagt, DMA bringt da nichts.

von Bedenken Träger (Gast)


Lesenswert?

Ich werde jetzt mein selbstgebautes Fernthermometer das mir
alle 3 Minuten die Temperatur schickt auch auf DMA umstellen
damit ich meine Temperatur noch schneller ablesen kann (sind
ja immerhin etwa 10 Bytes die da immer verschickt werden).

Dann bin ich - weil ich DMA mache - auch auf der Höhe der Zeit.

von Rene K. (xdraconix)


Lesenswert?

Ich glaube auch, der TO hat ein falsches Verständnis von DMA.

Frage: Wohin sollen die Daten eigentlich gespeichert werden? Weil... DMA 
speichert keine Daten, so wie es sich er TO vorstellt. DMA ist eine 
Transportschicht von Speicherpunkt A zu Speicherpunkt B.

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.