Hallo zusammen, ich würde gerne mit dem Nucleo-F303RE simultan Strom und Spannung mit dem ADC1 & 2 (nur jeweils Channel1) abtasten und per DMA in zwei separaten Arrays ablegen. Dazu würde ich nach AN4195 den Dual regular simultaneous mode mit zwei separaten DMAs nutzen. Kann mir jemand sagen, mit welcher HAL-Funktion ich dann die ADCs bzw. DMAs starten soll? In der Note von HAL_ADC_START_DMA() steht „This function is for single-ADC mode only. For multimode, use the dedicated MultimodeStart function.“ Wenn ich also die HAL_ADCEx_MultiModeStart_DMA() nutze, dann kann ich damit lediglich die beiden ADCs mit einer gemeinsamen DMA (32 bit-Werte: 16 bit Spannung, 16 bit Strom) aus dem ADC1_2 common data register lesen und in gemeinsames Array schreiben, was so auch bei mir funktioniert hat. Die MultiDMA wäre demnach aber nicht das, was ich benötige um zwei getrennte Arrays zu füttern, oder? Zu guter Letzt gäbe es dann noch die Möglichkeit einfach die HAL_ADC_START() zu benutzen, in der Note steht dazu: „Case of multimode enabled (for devices with several ADCs): if ADC is slave, ADC is enabled only (conversion is not started). if ADC is master, ADC is enabled and multimode conversion is started.“, was ja dem entspricht, was ich eigentlich tun möchte. Nur wird dabei keine DMA gestartet, ich komme also nicht an die Daten ran… In der Konfiguration vom Multimode habe ich den DMAAccesMode auf ADC_DMAACCESSMODE_DISABLED gestellt, was laut HAL-reference „DMA multimode disabled: each ADC will use its own DMA channel“ bedeutet. Ich bin über jede Hilfe zur Thematik dankbar, die Aufgabe sollte an sich eigentlich nicht sonderlich schwer zu lösen sein, bin trotzdem schon seit einer Woche am verzweifeln… Anbei der Code der main.c. Es grüßt ein blutiger STM32-Einsteiger
Das Ergebnis von ADC1&2 steht im selben Register. Daher gibt es nur einen DMA Kanal. Du musst die Werte (hi und lo word für ADC2/1) nach der DMA Geschichte trennen. Grüsse
geb schrieb: > Daher gibt es nur einen DMA Kanal Bist du dir da sicher? In der Application Note steht ja extra drin: "When using the DMA, there are two possible cases: *Use of two separate DMA channels for master and slave. *Use of the dual mode DMA. Und in der ADC_MultiModeTypeDef wird sogar ausdrücklich empfohlen, mit zwei DMAs zu arbeiten: "Configures the DMA mode for multi ADC mode: selection whether 2 DMA channels (each ADC use its own DMA channel) or 1 DMA channel (one DMA channel for both ADC, DMA of ADC master) This parameter can be a value of @ref ADCEx_Direct_memory_access_mode_for_multimode Caution: Limitations with multimode DMA access enabled (1 DMA channel used): In case of dual mode in high speed (more than 5Msps) or high activity of DMA by other peripherals, there is a risk of DMA overrun. Therefore, it is recommended to disable multimode DMA access: each ADC uses its own DMA channel. Refer to device errata sheet for more details. */" Weiß nur nicht mit welcher DMA-Funktion ich das machen kann, die einzige die halt bei mir funktioniert, ist die HAL_ADCEx_MultiModeStart_DMA()...
Ich habe mich auf den STN32F103 bezogen, das ist ja offenbar ein F3. Ob das dort anders ist weiss ich jetzt nicht, aber du solltest das einmal im Reference Manual nachlesen und nicht in dem HAL. Grüsse
Hallo zusammen Ich bin auch an der Thematik interessiert und würde gerne Erfahren ob schon neue Erkenntnisse gewonnen wurden. Ich stehe vor der selbigen Problematik beim STM32F407 die ADCs im "Triple injected simultaneous mode" betreiben zu wollen und die Daten per DMA in einen Buffer zu schreiben. Leider bin ich bis heute auch nur an die Stelle von STM32 Beginner gekommen. Gruss
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.