我用vc写了一个小程序,用来接收串口的数据,是这样做的
1:m_hComm = CreateFile(m_strPort, GENERIC_READ|GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,
0);//创建一个串口文件
2:SetupComm(m_hComm, 4096, 1024))//设置缓冲
3:DCB dcb;
if(1 == nReturnValue)
{//配置DCB结构,初始化端口
if(FALSE == GetCommState(m_hComm, &dcb))
{//获得DCBshibai
AfxMessageBox("获得DCBshibai");
nReturnValue = -4;
}
}
if(1 == nReturnValue)
{
dcb.BaudRate = 9600;//波特率
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;//串口标准设置
if(FALSE == SetCommState(m_hComm, &dcb))
{//设置DCB失败
AfxMessageBox("设置DCB失败");
nReturnValue = -5;
}
}
4://接受
BOOL bRx = FALSE;
OVERLAPPED over;
BYTE buf[4096];
memset(buf,0,4096);
DWORD dwRxlen = 0;
while(dwRxlen!=2048)
bRx = ReadFile(m_hComm,&buf,1,&dwRxlen,&over);
我每一步都有检测,而且提示我串口初始化成功,可第4步接受的时候就是收不到,请大侠救命呀!我都快着急死了
1:m_hComm = CreateFile(m_strPort, GENERIC_READ|GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,
0);//创建一个串口文件
2:SetupComm(m_hComm, 4096, 1024))//设置缓冲
3:DCB dcb;
if(1 == nReturnValue)
{//配置DCB结构,初始化端口
if(FALSE == GetCommState(m_hComm, &dcb))
{//获得DCBshibai
AfxMessageBox("获得DCBshibai");
nReturnValue = -4;
}
}
if(1 == nReturnValue)
{
dcb.BaudRate = 9600;//波特率
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;//串口标准设置
if(FALSE == SetCommState(m_hComm, &dcb))
{//设置DCB失败
AfxMessageBox("设置DCB失败");
nReturnValue = -5;
}
}
4://接受
BOOL bRx = FALSE;
OVERLAPPED over;
BYTE buf[4096];
memset(buf,0,4096);
DWORD dwRxlen = 0;
while(dwRxlen!=2048)
bRx = ReadFile(m_hComm,&buf,1,&dwRxlen,&over);
我每一步都有检测,而且提示我串口初始化成功,可第4步接受的时候就是收不到,请大侠救命呀!我都快着急死了
解决方案 »
- 关于WM_message
- vc的dsw,dsp项目工程的奇怪问题【生成的都是中文版本的文件】,遇到过的进来看下
- 用四边形画DEM, 地形图的时候,有100*100个网格, 每个网格上有个高程, 结果用glBegin(GL_QUADS)画的很慢,
- 越过对象的protected的属性, 实现对protected对象的访问 是怎么样实现的??????
- 可否在程序中获取自身的内存使用状况?
- CPropertySheet 中,一开始直接跳到某个页面,怎么做?
- 如何把序列化的内容保存到数据库啊?比如SQL Server
- 怎样让NTservice 执行不报 ERROR_ACCESS_DENIED 的错误??
- 怎么在一个字符串中查找和替换一个字符?
- 利用mfc向导做的activex控件添加的方法在vb中怎么不同步显示
- 怎样得到视图指针?
- 创建窗口有没有类似于对话框的WM_INITDIALOG消息?
这个结构里有一个事件,你怎么不创建呢?
memset(&over, 0, sizeof(OVERLAPPED));
over.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
然后用一个线程等待over.hEvent有信号,这时ReadFile才真正完成。或者用ReadFileEx,写一个FileIOCompletionRoutine形式的CallBack得到完成通知。