stm32 串口频繁接收数据卡死,咋解决?

//初学stm32,好多都不清除,望各位帮忙
//在进行串口处理程序(Serialport_3_Dataanalysis();)中,再次接收数据,程序卡住,怎么解决??
uint8_t usart3_rxBuf[21]={0};
Rec_Data LORA_Rec_Data;
uint8_t rxCompleted = RESET;
uint8_t RecData_Flag = 0;
void on_UART_IDLE( UART_HandleTypeDef *huart )
{

if(__HAL_UART_GET_FLAG( &huart3,UART_FLAG_IDLE ) == RESET)
 return;  
    __HAL_UART_CLEAR_IDLEFLAG( &huart3 ); 
    __HAL_UART_DISABLE_IT( &huart3 ,UART_IT_IDLE );
            if(rxCompleted)  
    {
        LORA_Rec_Data.recount = 0;
        RecData_Flag = 0;
        Serialport_3_Dataanalysis();         //  串口处理程序!!!!!!!!!!!!!!!!
        rxCompleted = RESET;               //
        for(uint8_t x=0;x<21;x++)
        {
                usart3_rxBuf[x]=0;
        }
        HAL_UART_Receive_IT( &huart3,usart3_rxBuf,21);
        }

}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart ->Instance == USART3) //
{
rxCompleted = SET ;
for(uint16_t i=0;i<21;i++)
LORA_Rec_Data.Recbuf[LORA_Rec_Data.recount++] = usart3_rxBuf[i] ;
__HAL_UART_ENABLE_IT( &huart3 ,UART_IT_IDLE);
}
}

看不清代码
但你一会关HUART3的中断一会又打开,不是好习惯也没必要