Guten Tag. Ich möchte ADC1 und ADC2 im dual mode betreiben und dazu (nicht gleichzeitig) auch noch ADC3 benutzen. Allerdings funktioniert bei mir kein ADC mehr, wenn ich alle drei initialisiere. Also ich schaffe es ADC1 und ADC2 im dual mode zu betreiben, wenn ADC3 nicht initialisiert ist und andersrum kann ich ADC3 wie geplant betreiben, wenn ADC1 und ADC2 nicht initialisiert sind. Dazu sei gesagt, dass ich für alle ADC noch den DMA verwende. Mir stellt sich nun die Frage, ob ich überhaupt einen dual mode und einen independent ADC haben kann oder auf den triple mode ausweichen muss wenn ich drei ADCs betreiben will.
Guck mal ins ref-Manual. Sort steht etwas dazu. Ich meine mich zu erinnern dass das geht.
Leider konnte ich dazu noch nirgendwo etwas finden. Es wurde nirgendwo explizit beschrieben, mehrere ADCs unabhängig voneinander zu betreiben.
Sorry, das war nicht im Ref-Manual, sondern in der AppNote :) http://www.st.com/content/ccc/resource/technical/document/application_note/c4/63/a9/f4/ae/f2/48/5d/CD00258017.pdf/files/CD00258017.pdf/jcr:content/translations/en.CD00258017.pdf
Ok, danke. Also ich habe mal zwei wichtige Sätze gefunden: "In some devices, there are up to 3 ADCs: ADC1, ADC2 and ADC3. In this case ADC3 always works independently, and is not synchronized with the other ADCs" Da ich den STM32F446 benutze bei dem genau das der Fall ist, nehme ich einfach mal an, dass es prinzipiell möglich ist ADC1 und ADC2 im dual mode und zusätzlich ADC3 im independent mode zu betreiben. "This application note does not describe the ADC modes that result from the combination of other modes." Leider steht dort nicht beschrieben wie, oder was das Problem sein könnte, dass es bei mir nicht funktioniert. Über Ideen oder Anregungen würde ich mich sehr freuen!
Schau mal nach dem Errata Sheet, vllt steht da ja noch was drin zu dem Thema. Deine Beschreibung ist ja auch sehr vage mit "funktioniert nicht mehr" :)
Versuchs mal mit ner langsam Abtastung ohne DMA per Interrupt. Schau dir die Register an, was die so sagen.
Also anscheinend ist mein Vorhaben doch zum scheitern verurteilt. Das Problem ist nämlich die ADC Common Init Structure, die nur einmal gemacht werden kann. Mein ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent; und mein ADC_CommonInitStructure.ADC_Mode = ADC_DualMode_RegSimult; beißen sich. Ein Satz dazu aus dem stm32f4xx_adc.c file: "ADC_CommonInitStruct: pointer to an ADC_CommonInitTypeDef structure that contains the configuration information for All ADCs peripherals." Muss also doch auf den triple mode ausweichen.
Aljo E. schrieb: > Also anscheinend ist mein Vorhaben doch zum scheitern verurteilt. Das > Problem ist nämlich die ADC Common Init Structure, die nur einmal > gemacht werden kann. Mein ADC_CommonInitStructure.ADC_Mode = > ADC_Mode_Independent; > und mein ADC_CommonInitStructure.ADC_Mode = ADC_DualMode_RegSimult; > beißen sich. > > Ein Satz dazu aus dem stm32f4xx_adc.c file: > > "ADC_CommonInitStruct: pointer to an ADC_CommonInitTypeDef structure > that contains the configuration information for All ADCs peripherals." > > Muss also doch auf den triple mode ausweichen. Versuche mal einen anderen Ansatz: Die SPLibrary deckt ja schon jede Menge Möglichkeiten zur Abarbeitung deines Codes. Aber eben nicht alle! Ich benutze bspws. bei der Initialisierung möglichst die SPL, es geht allerdings nicht immer, weil die eben nicht immer das macht was ich möchte. Dann setze ich die Register eben manuell. In meinen Interrupts benutze ich ausschließlich, aus Performance-Gründen, die manuelle Setzung der Register. Lese dich in den ADC-Abschnitt ein (beachte dabei auch die AppNote) und in die ADC-Register. Dann initialisierst und steuerst du das ganze einfach per manuelle Änderungen am Register, ohne die SPL.
Das ist ein guter Hinweis, vielen Dank. Ich scheine jetzt die Lösung im Reference manual gefunden zu haben: MULTI[4:0]: Multi ADC mode selection – 00001 to 01001: Dual mode, ADC1 and ADC2 working together, ADC3 is independent Wenn ich also ADC_Mode = ADC_DualMode_RegSimult; implementiere, ist das genau mein gewünschtes setup. Eine zweite ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent; würde mir das also wieder verwerfen. Ich werd das mal auspprobieren und berichten. Muss nochmal schauen wie ich das mit dem DMA dann regle.
Ich nutze bei einem STM32F407 Projekt ADC1 und 2 im Dual Mode und ADC3 getrennt davon. Auch alles via DMA, das funktioniert garantiert.
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.