我的程序中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行返回一個字符給上位機
4.jpg (14.41 KB, 下載次數: 49)
下載附件
2021-5-2 21:53 上傳
下面是問題:
每次單片機運行開始,等待上位機傳遞數據。每次傳送不一定成功,偶爾會出現只傳送2行就卡住不動了,單片機復位或重啟,再重新傳送才能成功。
不是每次都出現,有時出現有時不出現,故障率30%左右,自查沒找到原因,求教大佬,謝謝 |