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!
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.
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?
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.
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!
Na hoffentlich funktioniert die DMA Maschine wenn der Prozessor "schläft".
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
Der ist vorgegeben, weil damit noch viele weitere Dinge erledigt werden. Meine Aufgabe besteht primär nur in der DMA-Thematik..
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.
Der DMA braucht doch einen Takt!? Dann kann der Schlaf also nicht tief ein. Mein Gefühl sagt, DMA bringt da nichts.
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.
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
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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.