本人刚接触32是个小白,求大神告知为什么STM32F103串口打印在串口中断中出错?

ESP8266与单片机usart1相连,通过手机APP给WiFi发1和0的十六进制
在串口1 中断函数中将其存在全局变量Temp中。

我在网上找了串口打印的重定义,将printf 用usart3打印输出然后通过串口助手在电脑上显示,但是我printf在main 的while(1)中打印串口助手显示1或0;而在串口一的中断中打印就出现了错误
在main中打印在串口一中断中打印

以下是部分代码,其他地方是串口初始化
/******usart1中断**********/
void USART1_IRQHandler()
{

if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)
{

        USART_ClearFlag(USART1,USART_IT_RXNE);
        //UART1Test();

//      USART_ClearITPendingBit(USART1,USART_IT_RXNE); //清除中断标志
        Temp = USART_ReceiveData(USART1);
        //      printf (" \n %d \n",Temp );
}

/*******main函数**********/
int main(void)
{

SystemInit(); /* 配置系统时钟为 72M */

        Usart1_Init(); //USART1 配置 
        Usart3_Init();  //USART3 配置

        USART1_SendString((u8*)" AT\r\n");
            DelayNmS(1000);
        USART1_SendString((u8*)"AT+CWMODE=2\r\n");
            DelayNmS(1000);
        USART1_SendString((u8*)"AT+RST\r\n"); 
            DelayNmS(5000);
        USART1_SendString((u8*)"AT+CIPMUX=1\r\n"); 
            DelayNmS(2000);
        USART1_SendString((u8*)"AT+CIPSERVER=1,5050\r\n"); 
            DelayNmS(2000);
        USART1_SendString((u8*)"AT+CIPSEND=\r\n"); 
            DelayNmS(2000);

while (1)
{
    printf (" \n %d \n",Temp );
}

}