用VC编了一串口通信的程序,用CreateFile打开COM3返回无效句柄,但虚拟串口软件显示COM3已经打开,不知到什么原因??
我用的虚拟串口软件是VSPD XP 5,
BOOL CDevice::OpenDevice()
{
if (!m_bDevOpened)
{ m_hDevice = CreateFile( "COM3",
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED, //把此参数改为0结果一样
NULL); if (m_hDevice = INVALID_HANDLE_VALUE)
{
m_bDevOpened=false;
}
if (GetCommState(m_hDevice,&config_) == 0)
{
AfxMessageBox("Get configuration port has problem.");
m_bDevOpened=false;
return m_bDevOpened;
}
config_.ByteSize = 8;
config_.StopBits = ONESTOPBIT;
config_.Parity = NOPARITY;
config_.BaudRate = CBR_9600;
if (SetCommState(m_hDevice,&config_) == 0)
{
AfxMessageBox("Set configuration port has problem.");
m_bDevOpened=false;
return m_bDevOpened;
}
我用的虚拟串口软件是VSPD XP 5,
BOOL CDevice::OpenDevice()
{
if (!m_bDevOpened)
{ m_hDevice = CreateFile( "COM3",
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED, //把此参数改为0结果一样
NULL); if (m_hDevice = INVALID_HANDLE_VALUE)
{
m_bDevOpened=false;
}
if (GetCommState(m_hDevice,&config_) == 0)
{
AfxMessageBox("Get configuration port has problem.");
m_bDevOpened=false;
return m_bDevOpened;
}
config_.ByteSize = 8;
config_.StopBits = ONESTOPBIT;
config_.Parity = NOPARITY;
config_.BaudRate = CBR_9600;
if (SetCommState(m_hDevice,&config_) == 0)
{
AfxMessageBox("Set configuration port has problem.");
m_bDevOpened=false;
return m_bDevOpened;
}
其他串口也一样,都试了。多次打开了同一个串口,这个可能可以排除。我又写了一简单的只有串口操作的程
序,串口可以打开但无法配置串口,VSPM和VSPD XP 5都是这样,
if(!handlePort)
{handlePort = CreateFile("COM2",
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,
NULL);
if (GetCommState(handlePort,&config) == 0)
{
AfxMessageBox("Get configuration port has problem.");
return FALSE;
}
config.BaudRate = CBR_9600;
config.StopBits = 1;
config.Parity = 1;
config.ByteSize = 8;
if (SetCommState(handlePort,&config) == 0)
{
AfxMessageBox("Set configuration port has problem.");
return FALSE;
}
SetCommState返回0值,是不是我的虚拟串口配置有问题啊?
我现在写的串口程序是读取单片机发送的数据,是不是我用的虚拟串口软件不对啊?
其实只要在"COM2"后面增加一个“COM2:”,追加一个冒号就可以了