STM32F Daten in DMA schreiben und auslesen

Gast #5779139
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!
Gast #5779230
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.
Gast #5779277
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?
Gast #5779293
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.
Gast #5779298
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!
Gast #5779306
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.
Gast #5779334
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.
Gast #5779340
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren