Forum: Mikrocontroller und Digitale Elektronik STM32G0x1 NumberOfConversion > 8


von Dimitri K. (clusterice)


Lesenswert?

Guten Abend

Ich programiere zur Zeit eine Anwendung mit einem STM32G071KBTxN mC.

Gerne würde ich bei dieser Anwendung sämtliche ADC Kanäle im DMA 
Continuous Request auslesen. Dazu habe ich folgende Einstellungen 
gemacht:
1
hadc1.Instance = ADC1;
2
  hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4;
3
  hadc1.Init.Resolution = ADC_RESOLUTION_12B;
4
  hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
5
  hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;
6
  hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
7
  hadc1.Init.LowPowerAutoWait = DISABLE;
8
  hadc1.Init.LowPowerAutoPowerOff = DISABLE;
9
  hadc1.Init.ContinuousConvMode = ENABLE;
10
  hadc1.Init.NbrOfConversion = 8;
11
  hadc1.Init.DiscontinuousConvMode = DISABLE;
12
  hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
13
  hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
14
  hadc1.Init.DMAContinuousRequests = ENABLE;
15
  hadc1.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN;
16
  hadc1.Init.SamplingTimeCommon1 = ADC_SAMPLETIME_160CYCLES_5;
17
  hadc1.Init.SamplingTimeCommon2 = ADC_SAMPLETIME_160CYCLES_5;
18
  hadc1.Init.OversamplingMode = DISABLE;
19
  hadc1.Init.TriggerFrequencyMode = ADC_TRIGGER_FREQ_HIGH;

Zudem habe ich den DMA für den ADC auf Circular und Word gestellt.

Leider kann ich
1
hadc1.Init.NbrOfConversion = 8;
 nicht grösser als 8 setzen. In den Datenblätter finde ich diese 
Einschränkung aber nicht. Gibt es jemand der weiss wie man mehr ADC im 
DMA Modus kontinuierlich auslesen kann.

Danke und Grüsse
Clusterice

von Guest (Gast)


Lesenswert?

Reference Manual Seite 354

Sequencer fully configurable
The CHSELRMOD bit is set in ADC_CFGR1 register.
– Sequencer length is up to 8 channels
- ......

von A. B. (Gast)


Lesenswert?

Dimitri K. schrieb:

> Leider kann ich
1
hadc1.Init.NbrOfConversion = 8;
 nicht grösser als
> 8 setzen. In den Datenblätter finde ich diese Einschränkung aber nicht.

Doch das steht sehr wohl im RM:

"15.12.9 ADC channel selection register [alternate] (ADC_CHSELR)
...
The same register can be used in two different modes:
– Each ADC_CHSELR bit enables an input (CHSELRMOD = 0 in ADC_CFGR1). 
Refer to the current section.
– ADC_CHSELR is able to sequence up to 8 channels (CHSELRMOD = 1 in 
ADC_CFGR1). Refer to next section."

Entweder man setzt CHSELRMOD auf 1, dann können max. 8 Kanäle, aber in 
beliebiger(!) Reihenfolge gewandelt werden, allerdings auch nur die 
Kanäle 0 bis 14, da ja nur 4 bit pro Kanalwahl zur Verfügung stehen.

Oder man setzt es auf 0, dann können alle 19 Kanäle gewandelt werden, 
allerdings nur in aufsteigender oder absteigender Reihenfolge (durch 
SCANDIR auswählbar).

Ob in der HAL beide Modi verwendet werden können? Doku oder Sourcen 
befragen.
Im Zweifel beackert man die paar Register halt direkt, ist auch nicht 
die Welt, sondern eher ein bescheidener Registersatz.

von Guest (Gast)


Lesenswert?

A. B. schrieb:
> Ob in der HAL beide Modi verwendet werden können?

Yes

von Dimitri K. (clusterice)


Lesenswert?

Vielen Dank für eure Antworten und Tipps! Thema ist für mich somit 
gelöst.

Grüsse

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.