STM32F4 ADC: Dual Interleaved + Unabhängig

Einige STM32F4-Mikrocontroller haben 3 ADCs an Bord, sie können in verschiedenen Modi konfiguriert werden.
Ich frage mich, ob es möglich ist, ADC1 und ADC2 im "Dual Interleaved" -Modus zu konfigurieren, aber ADC3 als unabhängigen Kanal konfiguriert zu haben?

Wenn ich beim Generieren eines Projekts in CubeMX alle 3 ADCs einschalte und beispielsweise in ADC1 "Dual Interleaved Mode Only" auswähle, verwenden alle anderen ADC standardmäßig diesen Modus, ohne dass die Möglichkeit besteht, ihn zu ändern. Das ist ziemlich seltsam, da CubeMX im Grunde sagt, dass alle 3 ADCs im Dual-Interleaved-Modus konfiguriert sind, was unlogisch ist (3 ADCs arbeiten in Dual ...). Es gibt keine Möglichkeit, ADC3 in einen anderen Modus zu ändern, obwohl es die einzig logische Lösung zu sein scheint, ihn als "Independent" zu verwenden.

Auf Seite 402 hier unter Punkt 2 heißt es "Im Dual-ADC-Modus ist der ADC3-Slave-Teil nicht vorhanden." Ich bin mir nicht sicher, was damit gemeint ist: ADC3 als Ganzes funktioniert nicht im Dual-Modus oder einfach ADC3 ist nicht mehr SKLAVE?
Ich fürchte, es ist der einzige Hinweis auf ADC3 im Dual-Modus im offiziellen Referenzhandbuch.

Auf Seite 78 steht hier "ADC1-Master und ADC2-Slave, ADC3 ist unabhängig.", was darauf hindeutet, dass ADC3 als unabhängig konfiguriert werden kann, aber dieses PDF beschreibt es nicht weiter.

Ich habe auch diesen Anwendungshinweis gefunden , aber er gilt nur für Mikrocontroller mit 2 ADCs im Inneren. Wenn es die gleiche Notiz gibt, aber unter Berücksichtigung von ADC3 - bitte teilen, ich habe sie nicht gefunden.

Es stellen sich also folgende Fragen:

  1. Ist CubeMX abgehört? Ich meine, es macht eindeutig keinen Sinn, 3 ADCs in einer dualen Konfiguration zu konfigurieren. Es muss entweder ADC3 in den unabhängigen Modus versetzen oder die Fehlermeldung "Sie können ADC3 nicht mehr verwenden, lol" anzeigen.
  2. Kann ich es manuell im Code konfigurieren oder soll das so gar nicht funktionieren?

Ich könnte natürlich versuchen, es zum Laufen zu bringen, indem ich ein Projekt in einer solchen Konfiguration baue und sehen, ob es funktioniert, aber wenn es so überhaupt nicht funktionieren soll, wäre das nur eine Verschwendung von vielen Stunden. Es gibt keine Dokumentation darüber, selbst wenn es einigermaßen funktioniert, wird es ein höllisches Durcheinander sein, es mit DMA zum Laufen zu bringen, nehme ich an.

Wenn also jemand etwas Ähnliches getan hat oder genau weiß, dass es nicht funktionieren soll, wäre es schön zu hören.

Oh, und wenn sich jemand fragt, warum man das überhaupt macht:
Es wäre schön, "einen Kanal" zu haben, der den Dual-Modus verwendet, um 4,8 MSPS zu erhalten, und den anderen nur normal (von ADC3) mit 2,4 MSPS. Im Gegensatz zu zwei einfachen Kanälen bei 2,4 MSPS.

Antworten (2)

In der von Ihnen verlinkten Anwendungsnotiz heißt es auf Seite 9 im Zusammenhang mit dem Dual-Modus:

In einigen Geräten gibt es bis zu 3 ADCs: ADC1, ADC2 und ADC3. In diesem Fall arbeitet ADC3 immer unabhängig und ist nicht mit den anderen ADCs synchronisiert

Leider kann Cube nur einen kleinen Teil der Fähigkeiten der MCU offenlegen, und in diesem Fall scheinen die ADC-Optionen zu fehlen. Dies kann daran liegen, dass es relativ wenige Teile mit drei ADCs gibt, sodass es nicht so viele Impulse gibt, diese Modi zu unterstützen. Wenn Sie sich das Referenzhandbuch ansehen, hat das MULTI-Feld des ADC-Common-Control-Registers die folgenden Optionen (Seite 429):

Geben Sie hier die Bildbeschreibung ein

Warum Cube drei ADCs im Dual-Modus anzeigt, ist eindeutig ein Fehler. Entweder konfiguriert es ADC1 und ADC2 für den Dual-Modus und lässt ADC3 in Ruhe, oder es konfiguriert alle drei für den Triple-Modus. Der einzige Weg, um sicher zu sein, kann darin bestehen, zu untersuchen, wie der generierte Code das gemeinsame Steuerregister aufbaut.

Möglicherweise möchten Sie dies mit ST erhöhen, aber in der Zwischenzeit scheint es so, als müssten Sie, um die gewünschte Konfiguration zu erhalten, die Low-Level-APIs verwenden, wie die Antwort von Tomas Li vorschlägt, oder die Register direkt programmieren.

Ich kann bestätigen, dass ADC3 im Dual-Modus unabhängig verwendet werden kann. Derzeit gibt es Einschränkungen in CubeMX/Cube lib, sodass Sie die LL-API nur verwenden können, um ADC3 zu starten, wenn Sie den Dual-Modus verwenden. Ich habe dies getan.