Forum: Mikrocontroller und Digitale Elektronik STM32L072KZT6: ADC mit DMA: geht nicht mehr zu main.c zurück


von Martin R. (mme)


Angehängte Dateien:

Lesenswert?

Hallo,

ich benutze den ADC mit 2 Kanälen im DMA-Modus (Circular).

Das zyklische Wandeln geht zwar problemlos, aber das Programm kommt 
nicht mehr zur Main-Loop zurück. Irgend wie bleibt es immer im 
HAL_DMA_IRQHandler drin.

Für die Konfiguration benutze ich STM32CubeMX. Bild anbei.

Ich starte den ADC vor der Main-Loop mit:
1
HAL_ADC_Start_DMA(&hadc, (uint32_t*)_ADC.uiAdcResults, ADC_ANZAHL_KANAELE);

ADC und DMA haben keinen ErrorCode (ist jeweils 0). Warum kommt das 
Programm nicht mehr aus dem IRQ-Handler raus?

Gruß
Martin

von Felix U. (ubfx)


Lesenswert?

Wie schnell samplest du denn? Nicht unwahrscheinlich, dass der Handler 
einfach so lange zum Ausführen braucht, dass dann schon direkt der 
nächste Interrupt wartet.

von Martin R. (mme)


Lesenswert?

Danke für den Tipp! Habe den Clock Prescaler im ADC nun von 2 auf 64 
gesetzt. Nun ghet es.

: Bearbeitet durch User
von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Warum ist der ADC IRQ überhaupt aktiv wenne per DMA abholst?
Da brauchts nur den "DMA hat fertig" IRQ wenn beide Kanäle durch sind.
Den brauchts aber auch nur wenn man daraif hin was auslösen will.

Ansonsten kann auch der DMA überrannt werden, wenn der Bustakt im 
Verhältnis zur ADC Samplezeit zu gering ist (ADC PSC = 2 weist darauf 
hin).
Also dreh mal den Bustakt hoch und lass den nicht bei den 16MHz des 
startups.

Zudem lieber die Sampling CLKs erhöhen anstatt den Prescaler.
Umso länger die Sampletime des ADC umso höher ist die Eingangsimpedanz 
des ADC Kanals, je nach Impedanz der Quelle handelt man sich sonst 
Fehler ein.

von Roman (Gast)


Lesenswert?

Mw E. schrieb:
> Warum ist der ADC IRQ überhaupt aktiv wenne per DMA abholst?
Stimmt, habe ich nun entfernt

> Da brauchts nur den "DMA hat fertig" IRQ wenn beide Kanäle durch sind.
> Den brauchts aber auch nur wenn man daraif hin was auslösen will.
Den kann man im Cube aber nicht deaktivieren.


> Also dreh mal den Bustakt hoch und lass den nicht bei den 16MHz des
> startups.
Bustakt hatte ich bereits bei 32 MHz.


> Zudem lieber die Sampling CLKs erhöhen anstatt den Prescaler.
> Umso länger die Sampletime des ADC umso höher ist die Eingangsimpedanz
> des ADC Kanals, je nach Impedanz der Quelle handelt man sich sonst
> Fehler ein.
Werde ich machen.

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.