com口通讯问题
s_hhm 2014-04-23 05:15:45 同步操作COM 先发送数据到COM1 然后再从COM读数据.无法读到.也不知道是没写入成功,还是读不出来?望高手指导!代码如下:
//打开并设置COM1
hCom=CreateFile("COM1",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
if(hCom==(HANDLE)-1)
{
MessageBox("打开COM失败!");
}
else
{
MessageBox("打开COM口成功");
}
SetupComm(hCom,1024,1024);
COMMTIMEOUTS TimeOuts;
memset(&TimeOuts,0,sizeof(COMMTIMEOUTS));
TimeOuts.ReadIntervalTimeout=MAXDWORD;
TimeOuts.ReadTotalTimeoutConstant=0;
TimeOuts.ReadTotalTimeoutMultiplier=0;
TimeOuts.WriteTotalTimeoutConstant=0;
TimeOuts.WriteTotalTimeoutMultiplier=0;
SetCommTimeouts(hCom,&TimeOuts);
DCB dcb;
GetCommState(hCom,&dcb);
dcb.BaudRate=19200;//波特率为9600
dcb.ByteSize=8;//每个字节有8 位
dcb.Parity=NOPARITY;//无奇偶校验位
dcb.StopBits=TWOSTOPBITS;//两个停止位
if(!SetCommState(hCom,&dcb))
{
MessageBox("设置COM口失败");
}
PurgeComm(hCom,PURGE_TXCLEAR|PURGE_RXCLEAR);
void CCtrlDlg::OnReadCOM() //写入数据
{
char lpOutBuffer[100];
memset(lpOutBuffer,'\0',100);
DWORD dwBytesWrite=100;
lpOutBuffer[0]='z';
lpOutBuffer[1]='h';
lpOutBuffer[2]='a';
lpOutBuffer[3]='o';
lpOutBuffer[4]='5';
lpOutBuffer[5]='w';
lpOutBuffer[6]='e';
lpOutBuffer[7]='n';
lpOutBuffer[8]='5';
lpOutBuffer[9]='t';
lpOutBuffer[10]='a';
lpOutBuffer[11]='o';
COMSTAT ComStat;
DWORD dwErrorFlags;
BOOL bWriteStat;
OVERLAPPED m_osRead;
ClearCommError(hCom,&dwErrorFlags,&ComStat);
bWriteStat=WriteFile(hCom,lpOutBuffer,dwBytesWrite,&dwBytesWrite,NULL);
if(!bWriteStat)
{
MessageBox("写串口失败!");
}
PurgeComm(hCom, PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);
}
void CCtrlDlg::OnWriteCOM() //读数据.这里既不报错但buffer一直为空.
{
char str[100];
memset(str,'\0',100);
DWORD wCount;
BOOL bReadStat;
OVERLAPPED m_osRead;
bReadStat=ReadFile(hCom,&str,10,&wCount,0);
if(!bReadStat)
{
MessageBox("读串口失败!");
}
PurgeComm(hCom,PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);
MessageBox(str);
// CloseHandle(hCom);
};