es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo obtener datos de diferentes UART en una misma función de callback en STM32.

Estoy usando el controlador stm32f407. Estoy usando 2 uart – 2 y 3. La primera vez me interrumpieron, pero la segunda vez fui interrumpido en uart 2 – no fui interrumpido en uart3.

A continuación se muestra mi función de devolución de llamada:

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
    if(huart2.Instance == USART2)
    {
        gsm.RxData[gsm.RxDataCnt]=Uart_Rx_Buffer;
        gsm.RxDataCnt=(1+ gsm.RxDataCnt) % MAX_Buff_Size;
        HAL_UART_Receive_IT(&huart2,&Uart_Rx_Buffer, 1);
    }
    else if(huart3.Instance == USART3)
    {
        lidar.RxData[lidar.RxDataCnt]=uart3_RX_Data;
        lidar.RxDataCnt=(1+ lidar.RxDataCnt) % MAX_LIDAR_BUFFER;
        HAL_UART_Receive_IT(&huart3,&uart3_RX_Data, 1);
        if(lidar.RxDataCnt >MAX_COUNT_BUFFER)
        {
            lidar.received = true;
        }
    }
}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    A partir del fragmento de código proporcionado, parece que el experto en TI está implementando una función de devolución de llamada de interrupción UART para el controlador stm32f407. La función se llama HAL_UART_RxCpltCallback y toma como argumento un puntero a una estructura UART_HandleTypeDef.

    El experto parece estar utilizando dos interfaces UART, a saber, UART2 y UART3. La instrucción if verifica si se produjo la interrupción en UART2 o no comparando la instancia con USART2. Si fue así, los datos recibidos se agregan al arreglo gsm.RxData y luego se actualiza el búfer.

    Por otro lado, si la interrupción ocurrió en UART3, los datos recibidos se agregan al arreglo lidar.RxData y lidar.RxDataCnt se incrementa. El experto también verifica si el búfer está lleno y, si lo está, lidar.received se establece en verdadero. Finalmente, el búfer se actualiza para UART3.

    Sin embargo, a partir de la información proporcionada, no está claro por qué el experto fue interrumpido solo en UART2 y no en UART3. Puede ser debido a varias razones, como un problema de configuración, un problema de hardware o un problema de sincronización. Se requeriría más información para identificar la causa raíz del problema.

Comments are closed.