首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

串口写数据解决方法

2012-01-19 
串口写数据各位老兄,大家好,我最近做了一个有关串口通信的软件,但是很郁闷,往串口写数据的时候总是出错,不

串口写数据
各位老兄,大家好,我最近做了一个有关串口通信的软件,但是很郁闷,往串口写数据的时候总是出错,不知道为什么?
情况如下:
  我用超级终端可以写成功,而且效果很好,但是我写的时候总是出现“重叠IO正在进行中”.
我已经成功的从串口读数据,所以认为自己代码应该没有太大的问题。

  我怀疑我的数据格式不对,我用超级终端写的数据比如是32000,但是不知道超级终端怎么把这个数据提交给串口的,加了什么结束字符了或者别的什么特殊字符?
请教高手指点, 本人手机号13426189597,msn:trxdy@hotmail.com
本人愿意呈上300~500大洋请求帮助。

我的写数据代码大概如下:
[code=C/C++][/code]
OVERLAPPED m_osWrite;
memset(&m_osWrite,0,sizeof(OVERLAPPED));
m_osWrite.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);

// TODO: Add your control notification handler code here
char lpOutBuffer[5];
memset(lpOutBuffer,'\0',5);
lpOutBuffer[0]='3';
lpOutBuffer[1]='2';
lpOutBuffer[2]='0';
lpOutBuffer[3]='0';
lpOutBuffer[4]='0';



DWORD dwBytesWrite=5;
DWORD dwBytesSent = 0;
COMSTAT ComStat;
DWORD dwErrorFlags;
BOOL bResult = TRUE;  

ClearCommError(hCom,&dwErrorFlags,&ComStat);
bResult = WriteFile(hCom,lpOutBuffer,
dwBytesWrite,& dwBytesSent,&m_osWrite);

if(!bResult)
{
DWORD errorCode = GetLastError();
ShowErrorMsg(errorCode);


if(errorCode == ERROR_IO_PENDING)
{
bResult = GetOverlappedResult(hCom,&m_osWrite,&dwBytesSent,TRUE);
}
}
CloseHandle(m_osWrite.hEvent);
ClearCommError(hCom,&dwErrorFlags,&ComStat);




[解决办法]
楼主请看这个,真相大白:
http://www.vckbase.com/document/viewdoc/?id=1734
[解决办法]
从你提供的信息来看,我给你以下建议:
1.由于文档中次提到followed by “Enter”,因此串口数据中应该包括“Enter”的值,即0x0D,相当于结束符.
2.文档中没有提供如何用串口编码,因此你可以使用第三方监视工具,监视超级终端给设备发了什么数据,若你手头没有这样的工具,我已经给你发送.
3.先不要使用你的程序来测试,先使用成熟的第三方串口调试工具来测试,模拟超级终端的数据,看对端设备的反应是否正常,若正常了,再用你的程序来发送.
[解决办法]
后面加上“\r\n”结束符试试
char lpOutBuffer[7]; 
memset(lpOutBuffer,'\0',5); 
lpOutBuffer[0]='3'; 
lpOutBuffer[1]='2'; 
lpOutBuffer[2]='0'; 
lpOutBuffer[3]='0'; 
lpOutBuffer[4]='0'; 
lpOutBuffer[5]='\r'; 
lpOutBuffer[6]='\n'; 


热点排行