2 u013502502 u013502502 于 2015.07.07 17:38 提问

使用CreateFile 打开串口失败 求教

这是我的代码。err一直是2
int _tmain(int argc, _TCHAR* argv[])
{

HANDLE HandlePort = CreateFile(L"COM5", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
if (HandlePort == INVALID_HANDLE_VALUE)
{
    printf("串口打开失败\n");
    int   err = GetLastError();
    printf("%d", err);
}

while (true);

return 0;

}

9个回答

bdmh
bdmh   Ds   Rxr 2015.07.07 17:42

错误2是‘系统找不到指定的文件’,你有com5 吗,确认名字是否正确

u013502502
u013502502 COM1-COM9都试过了,都不行
2 年多之前 回复
u013502502
u013502502   2015.07.07 17:59

COM1-COM9都试过了,都不行

oyljerry
oyljerry   Ds   Rxr 2015.07.07 18:01
 CreateFile( 
            "////.//COM5",               //   address   of   name   of   the   communications   device 
            fdwAccess,                     //   access   (read-write)   mode 
            0,                                    //   share   mode 
            NULL,                              //   address   of   security   descriptor 
            OPEN_EXISTING,            //   how   to   create 
            0,                                    //   file   attributes 
            NULL                               //   handle   of   file   with   attributes   to   copy 
      );


u013502502
u013502502 打开?不是用CreateFile就可以了吗?
2 年多之前 回复
oyljerry
oyljerry 回复jjjkkk1213: 你的串口设备是否打开
2 年多之前 回复
u013502502
u013502502 错误变成161了
2 年多之前 回复
u013502502
u013502502 错误变成161了
2 年多之前 回复
atlaser
atlaser   2015.07.07 18:13

把OPEN_EXISTING后边的0,改成FILE_FLAG_OVERLAPPED试试。

u013502502
u013502502 不行的
2 年多之前 回复
u013502502
u013502502 不行的
2 年多之前 回复
atlaser
atlaser   2015.07.07 18:14

// get a handle to the port
m_hComm = CreateFile(szPort, // communication port string (COMX)
GENERIC_READ | GENERIC_WRITE, // read/write types
0, // comm devices must be opened with exclusive access
NULL, // no security attributes
OPEN_EXISTING, // comm devices must use OPEN_EXISTING
FILE_FLAG_OVERLAPPED, // Async I/O
0); // template must be 0 for comm devices

if (m_hComm == INVALID_HANDLE_VALUE)
{
    DWORD dwrst=GetLastError();

    // port not found
    delete [] szPort;
    delete [] szBaud;

    return FALSE;
}
zzbinfo
zzbinfo   2015.07.07 18:26
// get a handle to the port
m_hComm = CreateFile("\\\\.\\COM1",                     // communication port string (COMX)
                     GENERIC_READ | GENERIC_WRITE,  // read/write types
                     0,                             // comm devices must be opened with exclusive access
                     NULL,                          // no security attributes
                     OPEN_EXISTING,                 // comm devices must use OPEN_EXISTING
                     FILE_FLAG_OVERLAPPED,          // Async I/O
                     0);

                        改成这样应该可以吧。这个是我用的一个代码片段,你测试看看。
91program
91program   Ds   Rxr 2015.07.07 18:38

建议你先用标准的串口调试工具试一下有哪几个串口可用吧,可能真不是程序的问题。

zuishikonghuan
zuishikonghuan   2015.07.07 19:04

额,没有弄过串口,但我弄过物理磁盘读写,打开磁盘设备就需要管理员权限,所以我想有没有可能是因为操作串口也需要管理员权限呢,使用管理员权限运行你的程序再试一下。你的代码应该没问题,祝你好运

a931500274
a931500274   2017.03.09 11:50

L"COM3", //串口编号 L什么意思?

Csdn user default icon
上传中...
上传图片
插入图片