STM32CubeIDE - obsluha vice kanalu ADC

Pavel Kutina hw na prelude.cz
Pondělí Listopad 1 15:57:31 CET 2021


Zdravím,

tak pořád nějak válčím s Cube a teď jsem se zaseknul zase trochu hlouběji:

Potřebuji měři na čtyřech kanálech ADC.
V klikátoru je mám nastavené na ADC1 (je to STM32L471VGT) jako ADC1_IN1 na 
PC0 až ADC1_4 na PC4.

Rád bych vyčítal každý kanál "ručně", zatím nechci DMA, snažím se to 
rozbíhat po kouskách a vzhledem k mým (ne)vědomostem začátečníka to chci 
řešit postupně. Ale jak to nakonfigurovat?

V předgenerovaném kódu mám teď tohle, ale jak na jednotlivé kanály 
přistupovat, resp. jak z nich číst? V DMA režimu to snad napadá do pole, do 
kterého to vyčítám, ale bez DMA? Zjevně mi někde něco uniká, googlováním 
jsem strávil podstatnou část odpoledne, buď nevím, co hledám, nebo to bez 
DMA nejde?

V hlavní smyčce mám teď jenom tohle, ale rád bych nějaké hodnoty i do 
ADCval2 ... 4

Díky za každé nasměrování.

Pavel Kutina



//------------------------------------------------------------------
  HAL_ADC_Start(&hadc1);
  HAL_ADC_PollForConversion(&hadc1, 0xFFFFFFFF);

  ADCval1 = HAL_ADC_GetValue(&hadc1);
  ADCval2 = ?


  V inicializaci:
//------------------------------------------------------------------

  /** Configure Regular Channel
  */
  sConfig.Channel = ADC_CHANNEL_1;
  sConfig.Rank = ADC_REGULAR_RANK_1;
  sConfig.SamplingTime = ADC_SAMPLETIME_2CYCLES_5;
  sConfig.SingleDiff = ADC_SINGLE_ENDED;
  sConfig.OffsetNumber = ADC_OFFSET_NONE;
  sConfig.Offset = 0;
  if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  {
    Error_Handler();
  }

  sConfig.Channel = ADC_CHANNEL_2;
  if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  {
    Error_Handler();
  }

  sConfig.Channel = ADC_CHANNEL_3;
  if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  {
    Error_Handler();
  }

  sConfig.Channel = ADC_CHANNEL_4;
  if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  {
    Error_Handler();
  }



Další informace o konferenci Hw-list