I'm using a STM32F411RE-Nucleo board and generating a project with Cube MX for System Workbench. The problem is that HAL_UART_Receive
function doesn't receive input from the user, even though I don't change any UART, GPIO, RCC or NVIC configuration.
Surprisingly, when I comment two lines in SysTick Interrupt Handler function i.e. SysTick_Handler
, HAL_UART_Receive
starts working but this comes with another problem.
void SysTick_Handler(void)
{
HAL_IncTick();
HAL_SYSTICK_IRQHandler();
}
HAL_Delay()
function doesn't work when I disable those two lines. I guess it's because the processor can't handle the ticks.
How to work HAL_UART_Receive
and HAL_Delay
work at the same time? I'm a bit new in embedded programming and I'm sorry if I couldn't get myself clear.
Thanks.
Edit:
I use this function for receiving user input:
if( HAL_UART_Receive_IT(&huart2, (uint8_t*) RxMessage, RXBUFFERSIZE) != HAL_OK )
{
while(1)
{
}
}
I don't want the timer to run while using HAL_UART_Receive()
function, which is the same as HAL_UART_Receive_IT()
but with an additional TIMEOUT
parameter. As the TIMEOUT
might call the SYSTICK
interrupt, I decided to use HAL_UART_Receive_IT()
.
Also, the full assert is OFF, if it's necessary to know.
Other parts of my code are as follows:
#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
*/
}