Question
UART_WaitOnFlagUntilTimeout
i was debugging code HAL_uart_Receive ();
sprintf(command, "AT+CMGL=\"ALL\"\r\n");//read all sms
HAL_UART_Transmit(&huart1, (uint8_t *)command, strlen(command), 10);
// HAL_Delay(100);
HAL_UART_Receive(&huart1, RXbuffer, sizeof(RXbuffer), HAL_MAX_DELAY);i jump suddenly in here
/**
* @brief This function handles UART Communication Timeout. It waits
* until a flag is no longer in the specified status.
* @PAram huart Pointer to a UART_HandleTypeDef structure that contains
* the configuration information for the specified UART module.
* @PAram Flag specifies the UART flag to check.
* @PAram Status The actual Flag status (SET or RESET).
* @PAram Tickstart Tick start value
* @PAram Timeout Timeout duration
* @retval HAL status
*/
static HAL_StatusTypeDef UART_WaitOnFlagUntilTimeout(UART_HandleTypeDef *huart, uint32_t Flag, FlagStatus Status,
uint32_t Tickstart, uint32_t Timeout)
{
/* Wait until flag is set */
while ((__HAL_UART_GET_FLAG(huart, Flag) ? SET : RESET) == Status)
{
/* Check for the Timeout */
if (Timeout != HAL_MAX_DELAY)
{
if (((HAL_GetTick() - Tickstart) > Timeout) || (Timeout == 0U))
{
return HAL_TIMEOUT;
}
if ((READ_BIT(huart->Instance->CR1, USART_CR1_RE) != 0U) && (Flag != UART_FLAG_TXE) && (Flag != UART_FLAG_TC))
{
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE) == SET)
{
/* Clear Overrun Error flag*/
__HAL_UART_CLEAR_OREFLAG(huart);
/* Blocking error : transfer is aborted
Set the UART state ready to be able to start again the process,
Disable Rx Interrupts if ongoing */
UART_EndRxTransfer(huart);
huart->ErrorCode = HAL_UART_ERROR_ORE;
/* Process Unlocked */
__HAL_UNLOCK(huart);
return HAL_ERROR;
}
}
}
}
return HAL_OK;
}
how to solve this problem?
