你没有明白串口中断的规则:
STM32的单片机串口接收中断,是接收到一个字符,那就进一次中断。
任何中断,都是要求快进快出的设计原则,你这串口中断函数里面做了太多的事情。
建议你把发送函数挪到while(1)里面。