STM32, triple mode Interleaved mode, periodisch falsch

OP #3711341
Lesenswert?
• ▲
▼
Hallo,

ich lasse gerade die 3 ADCs des STM32F429 Discos im tripl mode 
interleaved laufen. Habe mich dabei an der Vorlage von ST orientiert.
Hierbei werden die ADC Werte in ein word-array gespeichert. im lower 
half word wird ADC1 gespeichet, im upper half word ADC2, dann in der 
nächsten Zeile ADC3 im lower half word und ADC1 im upper half word.
Das funktioniert auch, nur bekomme ich immer nur 3 elemente der 
Hintereinander mit korrekten Daten gefüllt (also 6 ADC-Werte), die 
nächsten 3 Elemente sind die Kopie von Element 2. Dann ist bi Elementen 
6-8 wider alles in Ordnung, und bei den Elementen 9-11 ist wieder nur 
die Kopie von Elelemt 8 darin usw.
Auf dem Bild soll eigentlich ein 300kHz Sinus zu sehen sein.

Wenn ich die Daten auf dem Display anzeigen lasse:
1
for (i=0; i<240/2;i++){
2
UB_Graphic_DrawPixel(2*i,320-(uint8_t) ((aADCTripleConvertedValue[i] & 0xFFFF)>>4),RGB_COL_RED);
3
UB_Graphic_DrawPixel(2*i+1,320-(uint8_t)(aADCTripleConvertedValue[i]>>20),RGB_COL_RED);
4
}

also die 12bit Werte auf 8bit Werte reduziere und direkt als Höhe so 
ausgebe, erhalte ich das selbe Bild. Die Daten sind also wirklich so auf 
dem Controller.
Wo ist mein Fehler?
Angehängte Dateien:
(Firma: NONE) #4673826
Lesenswert?
• ▲
▼
Sorry for writing in English. I can read German but writing German is an 
other story.

I know this toippic is a half year old. But it might be useful to the OP 
or somebody else.

About your sample problem.

I'm using the STM32F405 with an external RAM. The ADC has been 
configured in triple interleaved ADC mode and the samples are 
transferred to the external RAM under DMA control.

What I have noticed, is that the ADC and DMA start to behave erratic 
when the DMA controller is enabled by writing the EN bit in the DMA_SxCR 
to 1 when some flags in the DMA_LISR or DMA_LISH are still set.


Probing the RAM EN line (nothing else is accessing the RAM) when this 
occurs shows the following:
-The ADC is not sampling anymore at regular intervals.
-The ADC is sampling at a wrong sample rate.
-The RAM content shows that the sample order is not always ADC2-ADC1, 
ADC1-ADC3, ADC3-ADC2 and sometimes erratic as if all ADC sample at the 
same time.

Clearing the flags in the DMA_LISR or DMA_LISH before enableing the DMA 
solves this problem.

More information can be found in RM0090 (for the STM32F405) under 
register descriptions for the DMA controller.(page 330 for REV12 of 
RM0090)

Best regards, Inventor-y

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.