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
*/
}