地阔星串口接收缓冲区溢出导致程序卡死
代码中串口 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 < USART1_RECEIVE_LENGTH - 1) { // 预留1字节存结束符 u1_recv_buff[u1_recv_length++] = USART_ReceiveData(USART1); } 该问题可能广泛存在在地阔星开发手册中
立创开发板
全部评论 默认 最新
oihnv
2025-11-20 21:18:52 来自四川
今天我也遇到同样的问题了,你的贴子对我有了启发,但我觉得用环形数组这样更好些
没有更多啦~