|
我的程序中PYTHON上位機(jī)通過(guò)串口發(fā)送數(shù)據(jù)給單片機(jī),每次發(fā)送10行,每發(fā)送一行單片機(jī)會(huì)給上位機(jī)返回一個(gè)字符,上位機(jī)收到字符后發(fā)送下一行,10行發(fā)送完成后等待單片機(jī)處理完畢后,單片機(jī)會(huì)再發(fā)送一個(gè)字符給上位機(jī),上位機(jī)繼續(xù)傳遞下10行數(shù)據(jù),如此循環(huán)至數(shù)據(jù)發(fā)送完成。
上位機(jī)代碼如下:
try:
#端口,GNU / Linux上的/ dev / ttyUSB0 等 或 Windows上的 COM3 等
portx="COM7"
#波特率,標(biāo)準(zhǔn)值之一:50,75,110,134,150,200,300,600,1200,1800,2400,4800,9600,19200,38400,57600,115200
bps=115200
#超時(shí)設(shè)置,None:永遠(yuǎn)等待操作,0為立即返回請(qǐng)求結(jié)果,其他值為等待超時(shí)時(shí)間(單位為秒)
timex=5
# 打開(kāi)串口,并得到串口對(duì)象
ser=serial.Serial(portx,bps,timeout=timex)
# 寫(xiě)數(shù)據(jù)到串口
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'):#等待一行發(fā)送完成得到回應(yīng)A
msg=ser.read(1)
if(j ==10 ):
print("%d條代碼發(fā)送完,正在處理"%(i+1))
while(msg!=b'B'):#發(fā)完10行等待再次發(fā)送的指令B
msg=ser.read(1)
j=0
ser.write('$'.encode('UTF-8'))#寫(xiě)完完畢,發(fā)結(jié)束信號(hào)
print("傳送完成完畢")
ser.close()#關(guān)閉串口
單片機(jī)串口接收程序如下:
if(RI)
{
if(recf==1)//接收g指令
{
if(SBUF)
{
recbuf[compos][recpos]=SBUF;
recpos++;
}
if(SBUF=='\n')
{
compos++;
recpos=0;
SBUF='A';//收完一行返回一個(gè)A
while(!TI)
TI=0;
if(compos==10)
{
recf=0;//暫停接收
wrif=1;//開(kāi)始執(zhí)行
}
}
if(SBUF=='$')//傳送結(jié)束標(biāo)志
{
recbuf[compos][recpos]=0;
recf=0;//暫停接收
wrif=1;//開(kāi)始執(zhí)行
}
RI=0;
}
}
下面是主函數(shù)while循環(huán)中的處理完10行返回一個(gè)字符給上位機(jī)
4.jpg (14.41 KB, 下載次數(shù): 49)
下載附件
2021-5-2 21:53 上傳
下面是問(wèn)題:
每次單片機(jī)運(yùn)行開(kāi)始,等待上位機(jī)傳遞數(shù)據(jù)。每次傳送不一定成功,偶爾會(huì)出現(xiàn)只傳送2行就卡住不動(dòng)了,單片機(jī)復(fù)位或重啟,再重新傳送才能成功。
不是每次都出現(xiàn),有時(shí)出現(xiàn)有時(shí)不出現(xiàn),故障率30%左右,自查沒(méi)找到原因,求教大佬,謝謝 |
|