主题:[讨论]串口API函数接收数据问题
我是用WINDOWS API写的接收与发送函数,因为MSCOMM和SPCOMM老是出问题,接收的数据是乱码,不知道为什么!
现在说说我遇到的问题吧,希望你们能帮我指出问题所在!!
用同一个接收数据的函数,在没有给单片机发送数据的前提下,我能收到单片机发送上来的数据。但是,我一旦给单片机发送数据,单片机并返
回数据,这个数据却得不到,单步运行通过串口监视工具,我看见数据已经在缓冲区,但就是
读取不了!这是接收数据的函数!!
function TForm4.receive(i:integer):string;
var
temp:string;//接收到的数据
inbuff:array[0..100] of char;
nbytesread,dwevent,dwerror:longWORD;
CS:TCOMSTAT;
len:integer;
begin
ClearCommError(hcomm,dwError,@cs);
if cs.cbInQue>sizeof(inbuff) then begin
purgeComm(hcomm,PURGE_RXCLEAR);
EXIT;
END;
ReadFile(hcomm,inbuff,cs.cbInQue,nbytesread,nil);//inbuff缓冲区已经有数据了,但单步运行却发现temp,result中没任何数据,len为0
temp:=copy(inbuff,1,cs.cbInQue); //而不给单片机写数据,让单片机直接把数据发送上来,这个函数接收是没问题!!
result:=temp;
len:=length(result);
end;
现在说说我遇到的问题吧,希望你们能帮我指出问题所在!!
用同一个接收数据的函数,在没有给单片机发送数据的前提下,我能收到单片机发送上来的数据。但是,我一旦给单片机发送数据,单片机并返
回数据,这个数据却得不到,单步运行通过串口监视工具,我看见数据已经在缓冲区,但就是
读取不了!这是接收数据的函数!!
function TForm4.receive(i:integer):string;
var
temp:string;//接收到的数据
inbuff:array[0..100] of char;
nbytesread,dwevent,dwerror:longWORD;
CS:TCOMSTAT;
len:integer;
begin
ClearCommError(hcomm,dwError,@cs);
if cs.cbInQue>sizeof(inbuff) then begin
purgeComm(hcomm,PURGE_RXCLEAR);
EXIT;
END;
ReadFile(hcomm,inbuff,cs.cbInQue,nbytesread,nil);//inbuff缓冲区已经有数据了,但单步运行却发现temp,result中没任何数据,len为0
temp:=copy(inbuff,1,cs.cbInQue); //而不给单片机写数据,让单片机直接把数据发送上来,这个函数接收是没问题!!
result:=temp;
len:=length(result);
end;