Problema de recepción de UART cuando la Interrupción SysTick está habilitada

3

Estoy utilizando la placa STM32F411RE-Nucleo y generando un proyecto con Cube MX para System Workbench. El problema es que la función HAL_UART_Receive no recibe información del usuario, aunque no cambie ninguna configuración de UART, GPIO, RCC o NVIC.

Sorprendentemente, cuando comento dos líneas en la función del controlador de interrupción SysTick, es decir, SysTick_Handler , HAL_UART_Receive comienza a funcionar, pero esto viene con otro problema.

void SysTick_Handler(void)
{
     HAL_IncTick();
     HAL_SYSTICK_IRQHandler();
}
La función

HAL_Delay() no funciona cuando deshabilito esas dos líneas. Supongo que es porque el procesador no puede manejar las garrapatas.

¿Cómo trabajar HAL_UART_Receive y HAL_Delay funcionan al mismo tiempo? Soy un poco nuevo en la programación integrada y lo siento si no pude aclararme.

Gracias.

Editar:

Utilizo esta función para recibir información del usuario:

  if( HAL_UART_Receive_IT(&huart2, (uint8_t*) RxMessage, RXBUFFERSIZE) != HAL_OK )
  {
      while(1)
      {

      }
  }

No quiero que el temporizador se ejecute mientras se utiliza la función HAL_UART_Receive() , que es lo mismo que HAL_UART_Receive_IT() pero con el parámetro TIMEOUT adicional. Como TIMOUT podría llamar a SYSTICK interrupt, decidí usar HAL_UART_Receive_IT() .

También el mensaje completo está DESACTIVADO, si es necesario saberlo.

Otras partes de mi código son las siguientes:

#define RXBUFFERSIZE        3
uint8_t RxMessage[RXBUFFERSIZE];

void SysTick_Handler(void)
{
HAL_IncTick(); //enabled
HAL_SYSTICK_IRQHandler(); //enabled
}

void HAL_SYSTICK_IRQHandler(void)
{
  HAL_SYSTICK_Callback();
}

/**
  * @brief  SYSTICK callback.
  * @retval None
  */
__weak void HAL_SYSTICK_Callback(void)
{
  /* NOTE : This function Should not be modified, when the callback is needed,
            the HAL_SYSTICK_Callback could be implemented in the user file
   */
}
    
pregunta bex

0 respuestas

Lea otras preguntas en las etiquetas