STM32 HAL El uso de ADC con DMA afecta la transmisión de UART

1

Estoy utilizando la placa STM32 Nucleo F334R8. Transmito algunos datos usando UART en modo asíncrono a mi PC usando:

HAL_UART_Transmit_IT(&huart2, &data, sizeof(data));

Noté que después de habilitar ADC en el modo de DMA, el microcontrolador comenzó a enviar datos incorrectos a través de UART.

Cuando acabo de comentar:

HAL_ADC_Start_DMA(&hadc1, adc_dma_values, 2);

La transmisión UART envía datos correctos.

Cuando reemplacé HAL_UART_Transmit_IT() con HAL_UART_Transmit() también sorprendentemente funciona bien.

No entiendo cómo HAL_ADC_Start_DMA() puede afectar a HAL_UART_Transmit_IT() .

Aquí hay un código completo de main.c , tal vez sea útil.

    
pregunta Madras

1 respuesta

2

Basado en lo siguiente:

  • el UART está funcionando si lo está utilizando sin interrupciones junto con el DMA, y

  • si no se usa DMA, el UART funciona con interrupciones.

Las interrupciones DMA pueden suceder tan a menudo que no permiten que se ejecute el IRQ de UART ya que la CPU siempre está ocupada para manejar las interrupciones DMA.

Darle mayor prioridad a UART IRQ debería resolver el problema.

    
respondido por el Bence Kaulics

Lea otras preguntas en las etiquetas