Estoy trabajando en un proyecto en el que necesito leer las salidas analógicas de 4 fuentes y convertirlas a un valor digital usando un solo módulo ADC en el microcontrolador STM32F407. Quiero muestrear los valores de ADC cada 50 ms y, por lo tanto, he decidido usarlos en el modo de sondeo y tener un temporizador de interrupción cada 50 ms para activar la lectura de ADC. Estoy usando el software STM32 CubeMX para generar inicializaciones para mí.
Aquí están las inicializaciones de ADC:
hadc1.Instance = ADC1;
hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2;
hadc1.Init.Resolution = ADC_RESOLUTION_12B;
hadc1.Init.ScanConvMode = DISABLE;
hadc1.Init.ContinuousConvMode = ENABLE;
hadc1.Init.DiscontinuousConvMode = DISABLE;
hadc1.Init.NbrOfDiscConversion = 0;
hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
hadc1.Init.ExternalTrigConv = ADC_EXTERNALTRIGCONV_T1_CC1;
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc1.Init.NbrOfConversion = 1;
hadc1.Init.DMAContinuousRequests = ENABLE;
hadc1.Init.EOCSelection = DISABLE;
Y en mi función principal:
while (1)
{
/* USER CODE END WHILE */
g_ADCValue = HAL_ADC_GetValue(&hadc1);
}
Ahora esto funciona cuando tengo un canal ADC habilitado, pero ¿cómo leo de más de 1 canal al mismo tiempo? ¿Cómo la función GetValue()
devuelve el valor ADC de un determinado canal? También sé que no quiero usar interrupciones de ADC para esto, ya que quiero muestrear el ADC en intervalos de tiempo particulares (cada 50 ms), pero ¿debo usar DMA? Si es así, ¿cómo haría eso?
¡Muchas gracias por toda tu ayuda!