我的程序中PYTHON上位机通过串口发送数据给单片机,每次发送10行,每发送一行单片机会给上位机返回一个字符,上位机收到字符后发送下一行,10行发送完成后等待单片机处理完毕后,单片机会再发送一个字符给上位机,上位机继续传递下10行数据,如此循环至数据发送完成。
上位机代码如下:
try:
#端口,GNU / Linux上的/ dev / ttyUSB0 等 或 Windows上的 COM3 等
portx="COM7"
#波特率,标准值之一:50,75,110,134,150,200,300,600,1200,1800,2400,4800,9600,19200,38400,57600,115200
bps=115200
#超时设置,None:永远等待操作,0为立即返回请求结果,其他值为等待超时时间(单位为秒)
timex=5
# 打开串口,并得到串口对象
ser=serial.Serial(portx,bps,timeout=timex)
# 写数据到串口
j=0
for i in range(len(data1)):
j=j+1
print(data1[ i],end="")
ser.write(data1[ i].encode('UTF-8'))
msg=ser.read(1)
while(msg!=b'A'):#等待一行发送完成得到回应A
msg=ser.read(1)
if(j ==10 ):
print("%d条代码发送完,正在处理"%(i+1))
while(msg!=b'B'):#发完10行等待再次发送的指令B
msg=ser.read(1)
j=0
ser.write('$'.encode('UTF-8'))#写完完毕,发结束信号
print("传送完成完毕")
ser.close()#关闭串口
单片机串口接收程序如下:
if(RI)
{
if(recf==1)//接收g指令
{
if(SBUF)
{
recbuf[compos][recpos]=SBUF;
recpos++;
}
if(SBUF=='\n')
{
compos++;
recpos=0;
SBUF='A';//收完一行返回一个A
while(!TI)
TI=0;
if(compos==10)
{
recf=0;//暂停接收
wrif=1;//开始执行
}
}
if(SBUF=='$')//传送结束标志
{
recbuf[compos][recpos]=0;
recf=0;//暂停接收
wrif=1;//开始执行
}
RI=0;
}
}
下面是主函数while循环中的处理完10行返回一个字符给上位机
下面是问题:
每次单片机运行开始,等待上位机传递数据。每次传送不一定成功,偶尔会出现只传送2行就卡住不动了,单片机复位或重启,再重新传送才能成功。
不是每次都出现,有时出现有时不出现,故障率30%左右,自查没找到原因,求教大佬,谢谢 |