地阔星串口接收缓冲区溢出导致程序卡死
代码中串口 1 的接收缓冲区u1_recv_buff大小由USART1_RECEIVE_LENGTH定义,但未明确其值。如果缓冲区大小不足,当连续接收数据时,u1_recv_length会持续累加,最终超过缓冲区容量,导致数组越界,程序崩溃(表现为数据停止输出)。
关键代码问题:
在USART1_IRQHandler中断函数中,接收数据时仅简单累加u1_recv_length,未判断是否超过缓冲区大小:
c
运行
u1_recv_buff[u1_recv_length++] = USART_ReceiveData(USART1);
若u1_recv_length超过USART1_RECEIVE_LENGTH,会覆盖其他内存数据(如程序栈、全局变量),导致程序运行异常。
解决建议
修复串口缓冲区溢出:在中断接收中添加缓冲区边界判断,避免越界:
c
运行
if (u1_recv_length [removed]