Tengo un proyecto generado desde CubeMX para mi STM32Nucleo F303K8. Mi IDE es SystemWorkbench.
Estoy usando un total de 8 entradas analógicas divididas entre dos ADC
ADC1: 1, 2, 4, 12.
ADC2: 1, 2, 3, 4.
No estoy seguro de cómo leer correctamente estos. Estoy usando DMA y la frecuencia con la que verifico el valor es mucho más lenta que el tiempo de exploración. Pero incluso si no fuera así, no me importaría leer el mismo valor dos veces.
Solo quiero tener un escaneo continuo, cuando uno termina, comienza el siguiente.
Pero sea lo que sea lo que trate de hacer, parece que la única manera de obtener escaneos continuos es iniciar manualmente los escaneos ADC una y otra vez en mi bucle principal usando:
HAL_ADC_Start(&hadc1);
HAL_ADC_Start(&hadc2);
o la variante _IT
.
He intentado habilitar la conversión continua y luego iniciar el ADC una vez fuera de mi bucle principal. Pero eso solo hace un escaneo y se detiene allí.
Pensé que tal vez podría usar la interrupción de escaneo completo para reiniciar el escaneo cuando finalice. Esto funciona cuando reinicio solo un ADC dentro de la interrupción. Sin embargo, tan pronto como agrego el segundo a la devolución de llamada, el sistema se bloquea. Obviamente hay una interrupción que no se está manejando en algún lugar.
/**
* @brief Callback when an ADC scan completes.
*/
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{
if (hadc->Instance == ADC1)
{
//HAL_ADC_Start_IT(&hadc1);
}
if (hadc->Instance == ADC2)
{
//HAL_ADC_Start_IT(&hadc2);
}
}
Mi código completo está aquí: refid actual: ef11437
Si alguien tiene alguna idea para mí, eso sería muy apreciado.