首页新闻找找看学习计划

com串口通信的问题,急........

0
悬赏园豆:10 [已解决问题] 解决于 2008-06-26 15:55
在提问区里放了老半天没有人答复,只有置于此地,望高人指点......<br> 主要目标:在本机通过com1串口对数据进行读写,不连接任何外接设备,可是怎么也接收不到数据,<br> 发送按钮的代码如下:<br> &nbsp;&nbsp; m_strPort = "COM1";<br> &nbsp;&nbsp; hCom=CreateFile(m_strPort,GENERIC_READ|GENERIC_WRITE,<br> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0,NULL,OPEN_EXISTING,<br> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; FILE_ATTRIBUTE_NORMAL,//|FILE_FLAG_OVERLAPPED,<br> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; NULL);<br> <br> &nbsp;&nbsp; if(hCom==INVALID_HANDLE_VALUE)&nbsp; <br> &nbsp;&nbsp; {&nbsp; <br> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; AfxMessageBox(_T("打开通信端口错误!"), MB_OK, 0);<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false;&nbsp; <br> &nbsp;&nbsp; }<br> &nbsp;&nbsp; UpdateData(true); <br> <br> &nbsp;&nbsp;&nbsp; <br> &nbsp;&nbsp;&nbsp; // 对已经打开的串口进行设置<br> &nbsp;&nbsp;&nbsp; SetupComm(hCom,1024,1024);<br> &nbsp;&nbsp;&nbsp; // 全部清空发送缓冲区和接收缓冲区<br> &nbsp;&nbsp;&nbsp; PurgeComm(hCom, PURGE_TXCLEAR|PURGE_RXCLEAR);<br> &nbsp;&nbsp;&nbsp; COMMTIMEOUTS Timeouts;<br> &nbsp;&nbsp;&nbsp; //DCB dcb;<br> &nbsp;&nbsp;&nbsp; Timeouts.ReadIntervalTimeout=50;<br> &nbsp;&nbsp;&nbsp; Timeouts.ReadTotalTimeoutConstant=2000;<br> &nbsp;&nbsp;&nbsp; Timeouts.ReadTotalTimeoutMultiplier=0;<br> &nbsp;&nbsp;&nbsp; Timeouts.WriteTotalTimeoutConstant=2000;<br> &nbsp;&nbsp;&nbsp; Timeouts.WriteTotalTimeoutMultiplier=0;<br> &nbsp;&nbsp;&nbsp; SetCommTimeouts(hCom,&amp;Timeouts);<br> &nbsp;&nbsp;&nbsp; m_nSetupbt = 9600;<br> &nbsp;&nbsp;&nbsp; GetCommState(hCom,&amp;dcb);<br> &nbsp;&nbsp;&nbsp; dcb.BaudRate=m_nSetupbt;<br> &nbsp;&nbsp;&nbsp; dcb.ByteSize=8;<br> &nbsp;&nbsp;&nbsp; dcb.StopBits=ONESTOPBIT;<br> &nbsp;&nbsp;&nbsp; dcb.Parity=NOPARITY;<br> &nbsp;&nbsp;&nbsp; dcb.fBinary = TRUE;<br> &nbsp;&nbsp;&nbsp; dcb.fParity = FALSE;<br> &nbsp;&nbsp;&nbsp; if(!SetCommState(hCom,&amp;dcb))&nbsp; <br> &nbsp;&nbsp;&nbsp;&nbsp; {&nbsp; <br> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;AfxMessageBox(_T("通信端口设置错误!"), MB_OK, 0);<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CloseHandle(hCom);&nbsp; <br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false;&nbsp; <br> &nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br> &nbsp;&nbsp;&nbsp; UpdateData(false);<br> <br> &nbsp;&nbsp;&nbsp; // 开始传送数据<br> &nbsp;&nbsp;&nbsp; DWORD length;<br> &nbsp;&nbsp;&nbsp; //unsigned send[10];<br> &nbsp;&nbsp;&nbsp; BOOL bWriteStat;<br> &nbsp;&nbsp;&nbsp; //send[0]=m_sSend;<br> &nbsp;&nbsp;&nbsp; char send[6]={"china"};<br> &nbsp;&nbsp;&nbsp; <br> <br> <br> &nbsp;&nbsp;&nbsp; for&nbsp;&nbsp; (int&nbsp;&nbsp; i=0;&nbsp;&nbsp; i&lt;sizeof(send);&nbsp;&nbsp; i++)<br> &nbsp;&nbsp;&nbsp; {<br> &nbsp;&nbsp;&nbsp; bWriteStat = WriteFile(hCom,(LPSTR)&amp;send[i],1,&amp;length,m_LpOverlappedWrite);<br> &nbsp;&nbsp;&nbsp; /*unsigned accept[10] = {0};<br> &nbsp;&nbsp;&nbsp; bReadStatus = ReadFile(hCom, accept,5,&amp;length,m_OverlappedRead);*/<br> &nbsp;&nbsp;&nbsp; if( !bWriteStat &amp;&amp; ( GetLastError() == ERROR_IO_PENDING ) ){<br> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if( WaitForSingleObject( m_OverlappedWrite.hEvent, 1000 ) ) length = 0;<br> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; else{<br> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; GetOverlappedResult( hCom, &amp;m_OverlappedWrite, &amp;length, FALSE );<br> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; m_OverlappedWrite.Offset += length;<br> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br> &nbsp;&nbsp;&nbsp; }<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; length++;<br> &nbsp;&nbsp;&nbsp; }<br> <br> &nbsp;&nbsp;&nbsp; return( TRUE );<br> 然后接收是按钮的代码如下:<br> UpdateData(true);<br> <br> &nbsp;&nbsp;&nbsp; DWORD length;<br> &nbsp;&nbsp;&nbsp; //unsigned accept[10] = {0};<br> &nbsp;&nbsp;&nbsp; char accept[6];<br> &nbsp;&nbsp;&nbsp; //char accept[20];<br> &nbsp;&nbsp;&nbsp; UpdateData(false);<br> &nbsp;&nbsp;&nbsp; // 接收已经写入串口的数据<br> &nbsp;&nbsp;&nbsp; <br> &nbsp;&nbsp;&nbsp; bReadStatus = ReadFile(hCom, &amp;accept,5,&amp;length,m_LpOverlappedRead);<br> &nbsp;&nbsp;&nbsp; <br> &nbsp;&nbsp;&nbsp; if (!bReadStatus)<br> &nbsp;&nbsp;&nbsp; {<br> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(GetLastError()==ERROR_IO_PENDING)<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WaitForSingleObject(m_OverlappedRead.hEvent,1000);<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return ((int)length);<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return(0);<br> &nbsp;&nbsp;&nbsp; }
云淡风清的主页 云淡风清 | 初学一级 | 园豆:155
提问于:2008-06-25 12:19
< >
分享
最佳答案
0
说实话,不太明白你的意思. 不知道你是不是要实现自发自收的意思. 如果是的话,拿根串口线把com1与com2连接起来,那样才能接发数据. 给你点建议: 1.先网上下载一个串口调试工具,来排除硬件上的问题. 2.如果串口调试工具能接收正常,就是代码问题了.
hackenliu | 小虾三级 |园豆:600 | 2008-06-26 15:49
其他回答(1)
0
你是否已经将串口的收、发针短接在一起了?
杨连国 | 园豆:295 (菜鸟二级) | 2008-06-26 13:01
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册