首页 > 解决方案 > 如何打开用户指定的 COM 端口?

问题描述

我正在尝试打开用户输入给出的 COM 端口。我尝试了以下代码并打印了错误消息“打开串行端口时出错”。

int main()
{
    BOOL Status;
    HANDLE ComPort;
    char* ptr;
    char str[] = {'\\','\\','\\','\\','.','\\','\\','C','O','M','\0','\0','\0','\0'};
    printf("Enter COM Port: ");
    ptr = str + 10;
    fgets(ptr,4,stdin);
    size_t len = strlen(str);
if (len > 0 && str[len-1] == '\n') {
  str[--len] = '\0';
}
    ComPort = CreateFile((const char*)str,                //port name
                      GENERIC_READ | GENERIC_WRITE, //Read/Write
                      0,                            // No Sharing
                      NULL,                         // No Security
                      OPEN_EXISTING,// Open existing port only
                      0,            // Non Overlapped I/O
                      NULL);        // Null for Comm Devices

  if (ComPort == INVALID_HANDLE_VALUE){
      printf("Error in opening serial port");
      exit(EXIT_FAILURE);}
  else{
      printf("opening serial port successful");
  }
 .....
 ...

那么我做错了什么?

标签: cwindowsserial-port

解决方案


前缀'\\','\\','\\','\\','.','\\','\\'是错误的。请参阅“\\.\COM10”

原始代码无法处理读取'\n'.

读取一行,然后形成 com 端口名称。

//char* ptr;
//char str[] = {'\\','\\','\\','\\','.','\\','\\','C','O','M','\0','\0','\0','\0'};
//ptr = str + 10;
//fgets(ptr,4,stdin);
//ComPort = CreateFile((const char*)str,  

char buffer[80]; // be generous
fgets(buffer, sizeof buffer, stdin);
buffer[strcspn(buffer, "\n")] = '\0'; // lop off potential \n

char str[sizeof buffer + 7] =  "\\\\.\\COM";  // Use correct prefix
strcpy(str, buffer);
...

推荐阅读