用EVC编了一个串口自发自收的程序,串口能够打开,但是不写数据。程序应该是对的,与书上写的以及网上通过测试的程序一样。下面是写数据部分的一段程序。
DWORD CSerial::WritePort(const BYTE *buf,DWORD dwCharToWrite)
{
BOOL fWriteState;
DWORD dwBytesWritten;
//写入数据
fWriteState=WriteFile(hPort,buf,dwCharToWrite*sizeof(BYTE),&dwBytesWritten,NULL);
if(!fWriteState)
{
//不能写数据
MessageBox(NULL,TEXT("Can't Write String to Comm"),TEXT("Error"),MB_OK);
dwBytesWritten=0;
}
return dwBytesWritten;
}
测试的 const BYTE byte='a';在调用这个函数时,我是这么写的CSerial cs;cs.WritePort(&byte,1);为什么不能写入?到底是哪里错了??求助各位高手了!!感谢!!
不能写入,是writefile返回错误。还是在串口另外一端readfile没有接收到数据。
建议先下载一个CE的串口调试程序,确认物理串口没有问题。
另外:CE下的串口访问非常成熟和常用,应该不会有什么问题的。
很抱歉,搞错了,最终发现是串口没有打开。对这方面实在是不懂啊,在EVC的模拟器下试过,总之无法打开串口压呀。不明白为什么。
那你串口打开的那段函数呢 ,,看看出问题了没有,可以直接连pc,用XP系统的超级终端也可以测试,
重说一下我的问题,串口能够打开了,数据也能够写入,测试的数据还是那个,但是返回的dwBytesWritten=0(没有出现不能写入串口的对话框)。没有想通这个问题。拜托各位帮忙解决一下。
DWORD CSerialPort::SendData(const unsigned char*uBuf,DWORD bufLen)
{
DWORD dwBytesWritten;
DWORD dwWritten =0 ;
if(m_hComm == INVALID_HANDLE_VALUE ||uBuf==NULL || bufLen<0)
return -1;
PurgeComm(m_hComm,PURGE_TXCLEAR);
while (TRUE)
{
if (WriteFile (m_hComm,uBuf+dwWritten,bufLen-dwWritten, &dwBytesWritten,NULL))
{
dwWritten = dwWritten + dwBytesWritten;
if (dwWritten == bufLen)
return dwWritten;
}
else
{
return -2;
}
}
return 0;
}
//用这个试试