STM32G0x1 NumberOfConversion > 8

#6969370
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
Gast #6969429
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren