Trabajando i2s con adc (stm32)

1

Estoy intentando que i2s y adc trabajen juntos en la placa stm32f4. Aquí está mi código para generar una onda de sierra simple, y salida a través de CS43L22

frequency = 80;
fs = 48000;
step = fs/frequency;
k = 65536/step;
while (1)
{
buffer[0]=i;
buffer[1]=i;
HAL_I2S_Transmit(&hi2s3, buffer, 2  , 10);

i>65536?i=0:(i+=k);
}

Y estoy usando un búfer DMA circular con conversión continua de adc. Si comienzo el proceso adc_dma, la generación de la onda se detiene.

Tengo tres preguntas con respecto a este tema;

1) ¿Por qué se detiene i2s al convertir adc con dma?

2) ¿Debo usar diferentes métodos I2S, es decir, IT, DMA?

3) Con respecto a la segunda pregunta, ¿cómo se utilizan las funciones getstate de hal? Intenté usar algo como

if(HAL_I2S_GetState(&hi2s3) == HAL_I2S_STATE_READY)
HAL_I2S_Transmit_DMA(&hi2s3, buffer, 2);

en el bucle while, no funcionó. ¿Qué estoy haciendo mal? ¿Debo estar utilizando controles de bandera como este?

if(hi2s3.State == HAL_I2S_STATE_READY)
HAL_I2S_Transmit_DMA(&hi2s3, buffer, 2);
    
pregunta Can Uysal

0 respuestas

Lea otras preguntas en las etiquetas