为什么我的程序可以打开COM1但不能打开COM11?

Lim*_*olt 4 c serial-port

我尝试从传感器读取数据。传感器控制器使用 db9 标头 (com1),因为我将使用 com1,所以我使用 db9 到 USB 转换器并获取 com 11。

我有程序读取和写入串口,当我使用com1时它可以工作,但是当我更改为com 11时,程序无法打开com,因为它到达了ERROR_FILE_NOT_FOUND

这是我的串口编程程序:

Serial::Serial(char *portName)

{

this->connected = false;

wchar_t wcPort[64];
 size_t convertedChars = 0;
 mbstowcs_s(&convertedChars, wcPort, strlen(portName), portName, _TRUNCATE);

 this->hSerial = CreateFile(wcPort,
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);

//Check if the connection was successfull
if(this->hSerial==INVALID_HANDLE_VALUE)
{
    //If not success full display an Error
    if(GetLastError()==ERROR_FILE_NOT_FOUND){

        //Print Error if neccessary
        printf("ERROR: Handle was not attached. Reason: %s not available.\n", portName);

    }
    else
    {
        printf("ERROR!!!");
    }
}
else
{

    DCB dcbSerialParams = {0};


    if (!GetCommState(this->hSerial, &dcbSerialParams))
    {

        printf("failed to get current serial parameters!");
    }
    else
    {


    dcbSerialParams.BaudRate=CBR_38400;
        dcbSerialParams.ByteSize=8;
        dcbSerialParams.StopBits=ONESTOPBIT;
        dcbSerialParams.Parity=NOPARITY;
        dcbSerialParams.fOutX=TRUE;
        dcbSerialParams.fInX=TRUE;



         if(!SetCommState(hSerial, &dcbSerialParams))
         {
            printf("ALERT: Could not set Serial Port parameters");
         }
         else
         {

             this->connected = true;


         }
    }
}
Run Code Online (Sandbox Code Playgroud)

}

是因为软件/程序还是硬件问题?

当我尝试使用超级终端时,它可以读取和写入 com 11。

pad*_*ddy 6

要打开编号为 10 及更高的 COM 端口,您需要在名称前添加前缀\\.\.

现在,在 C 中,您必须转义所有这些反斜杠。所以你需要打开的端口是"\\\\.\\COM11".