Gast
#4006957
Hi, ich lese mit dem STM32F4 Discovery Werte von einem Port ein. Das Ganze passiert getaktet auf 14 MHz und damit das so schnell auch funktioniert benutze ich DMA um die Daten von der Peripherie in einen Buffer zu übertragen. Im Großen und Ganzen funktioniert das alles recht zuverlässig und stabil, nur eine Sache kann ich mir nicht so recht erklären. Ich gehe folgendermaßen vor: Ich generiere mir ein Testsignal, das ich genau kenne und lese dieses per DMA ein. Anschließend sehe ich im Debugger nach, ob alles passt. Und von den ca. 8000 Werten sind auch 7990 ok. Nur die ersten 5-10 Werte am Anfang des DMA-Transfers sind nicht zuverlässig richtig, die ersten drei sind sogar so ziemlich immer falsch. Nur eben nie gleich falsch. Eher sowas wie ein Wert taucht dreimal auf. Wenn ich z.B. Zahlen 1-8000 übertrage kommt sowas raus: 1,2,2,2,5,6,7,8,9,10... oder 8,1,1,1,3,6,7,8,9,10... danach ist dann alles gut. Der DMA-Stream ist schon lange "enabled", bevor das eigentliche Signal ankommmt. Das Einzige, was mit dem ersten DMA-Wert gestartet wird, ist ein Timer, der an den Daten-Clock-Pin gekoppelt ist, um die Anzahl der eingelesenen Werte hochzuzählen und den DMA-Transfer immer bei einer steigenden Clock-Flanke auszulösen. Könnte es sein, dass dieser Timer den Transfer der ersten paar DMA-Werte behindert? Ich stecke nicht tief genug in der Thematik drin um das beurteilen zu können und wäre daher für Ideen dankbar :-)