我已经有足够信息来回答这个问题了。结合用户提供的图片(STC8G ISP软件,V6.97版本,型号A2D0691-36I64),我来给出综合性的分析和建议。
您好!感谢您提供截图并反馈 CDC-HID串口助手 "接收数据时发送会卡一下/闪退" 的问题。
从您的截图可以看到,您使用的是 STC8G 系列单片机(A2D0691-36I64),ISP软件版本为 V6.97,通过 COM17 [USB-CDC] 与电脑通信。
结合论坛上多个相关反馈案例,我对这个问题的分析如下:
一、问题定位:大概率是 PC 端 ISP 软件接收线程的问题
据论坛用户反馈(TID:24817),ISP软件在长时间连续接收 USB-CDC 数据时,存在接收线程内存泄露的缺陷,现象与您描述的完全一致——数据量大、连续收发时软件卡死甚至退出:
"问题出在接收线程的代码里面有内存泄露,只有在长时间连续接收的情况下,将问题逐步严重化,最终才能发现问题。" —— 据论坛官方工作人员反馈
那位用户用 V6.96Z 连续接收约 3 亿字节后软件停止工作。您是 V6.97,若频繁、大量收发,同样可能触发。
二、建议您先做以下排查
1. 升级到最新版 AiCube-ISP 软件
很多闪退问题(如"发送HEX闪退")都在后续版本修复过(TID:22535 在 V6.96R 解决)。请到官网下载最新版替换。
2. 交叉验证是"PC端软件"还是"单片机程序"问题
- 用您的 STC8G 板卡,仅做纯接收(不点发送),长时间监听,看是否最终卡死 → 若是,基本可确认是 PC 端接收线程内存问题。
- 再单独做纯发送(勾选自动发送),观察软件是否正常 → 若正常,说明问题集中在"接收+发送并发"场景。
3. 尝试更换 USB 口 / USB 线 / 电脑
论坛有用户反馈是 USB 链路或 ESP 模块干扰导致(TID:22535 回复5)。排除硬件链路干扰也有必要。
三、如果是单片机端程序并发收发导致的卡顿
您的截图接收缓冲区持续收到 <+Timer0>,说明单片机在持续向 PC 发送数据。若您在接收中断里同时调用发送函数,很容易因重入或标志位未正确清零导致"卡一下"。
正确的收发处理建议(STC8G 同样适用):
- 接收用中断,把数据存入缓冲区,不在中断里直接发送;
- **发送采用"忙标志 + 主循环轮询"**方式,避免死等卡死。
参考范例(STC8G,串口1):
bit busy = 0; // 发送忙标志
unsigned char temp; // 临时接收缓冲
void UART1_Isr(void) interrupt 4
{
if (TI) // 发送完成
{
TI = 0;
busy = 0; // 允许发送下一字节
}
if (RI) // 接收完成
{
RI = 0;
temp = SBUF; // 读取数据(建议存入环形缓冲区)
}
}
void UartSend(unsigned char dat)
{
while (busy); // 等上一字节发完
busy = 1;
SBUF = dat;
}
注意:如果您之前用的是 while(!TI); 这种查询式发送,且同时开启了串口中断,TI 会被中断服务清零导致死循环卡死——这也是论坛中常见的"发一次就卡死"的原因(TID:19882)。
四、关于软件界面本身
从截图看,您的软件操作日志显示"下载成功",烧录功能本身正常。CDC-HID 串口助手属于软件附带的调试工具,其稳定性受软件版本影响较大,强烈建议优先升级到最新版再复测。
总结:您遇到的"接收时发送会卡一下"现象,优先怀疑是 PC 端 ISP 软件在接收+发送并发时的已知内存问题,请先升级最新版;若升级后仍复现,请提供您的单片机具体程序收发逻辑(是否在中断里发送)、ISP软件完整版本号、以及大概的收发数据量,我再帮您进一步定位是软件问题还是程序问题。
🔍 搜索 "https://www.stcaimcu.com/thread-25294-1-1.html"
⏱️ 查找用时 3.6s | 总回答用时 13.9s