EVC串口通讯问题

Irenewei   2008-4-7 23:20 楼主
用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);为什么不能写入?到底是哪里错了??求助各位高手了!!感谢!!

回复评论 (10)

没有用过MFC,写入返回的错误是什么呢,LZ?
点赞  2008-4-8 08:14
要加个换行动作吧
点赞  2008-4-8 13:35
不能写入,是writefile返回错误。还是在串口另外一端readfile没有接收到数据。
建议先下载一个CE的串口调试程序,确认物理串口没有问题。
另外:CE下的串口访问非常成熟和常用,应该不会有什么问题的。
点赞  2008-4-8 15:02
很抱歉,搞错了,最终发现是串口没有打开。对这方面实在是不懂啊,在EVC的模拟器下试过,总之无法打开串口压呀。不明白为什么。
点赞  2008-4-8 16:01
那你串口打开的那段函数呢 ,,看看出问题了没有,可以直接连pc,用XP系统的超级终端也可以测试,
点赞  2008-4-9 10:42
重说一下我的问题,串口能够打开了,数据也能够写入,测试的数据还是那个,但是返回的dwBytesWritten=0(没有出现不能写入串口的对话框)。没有想通这个问题。拜托各位帮忙解决一下。
点赞  2008-4-9 21:04
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;
}
//用这个试试
点赞  2008-4-10 18:33
串口通信的测试最好用实物,不要用模拟器
点赞  2008-4-10 18:35
up
点赞  2008-4-11 09:28
谢谢楼上了,我会去试试的。
点赞  2008-4-11 23:53
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复