C++串口通讯相关函数(Windows)

目录

1.CreateFileA

2.SetupComm

3.COMMTIMEOUTS

 4.SetCommTimeouts

5.DCB

6.SetCommState

7.GetCommState

8.SetCommMask

9.ClearCommError

10.ReadFile

11.WaitForSingleObject

12.GetOverlappedResult

13.PurgeComm

14.WaitCommEvent

15.WriteFile

16.CloseHandle


1.CreateFileA

通过该函数打开串口。

函数原型:

HANDLE CreateFileA(
  LPCSTR                lpFileName,
  DWORD                 dwDesiredAccess,
  DWORD                 dwShareMode,
  LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  DWORD                 dwCreationDisposition,
  DWORD                 dwFlagsAndAttributes,
  HANDLE                hTemplateFile
);

参数说明:

  • lpFileName:要打开的文件或设备的路径。对于串口,通常是"COMx",其中x是串口号(如"COM1")。
  • dwDesiredAccess:请求的访问权限,例如GENERIC_READ(读取)、GENERIC_WRITE(写入)、GENERIC_EXECUTE(执行)、GENERIC_ALL(所有权限)等。
  • dwShareMode:共享模式,指定如何共享该串口。共享模式决定了其他进程是否可以访问该串口,以及它们可以以何种方式访问。例如FILE_SHARE_READ(读取)、FILE_SHARE_WRITE(写入)、FILE_SHARE_DELETE(删除)、0(不启用共享模式)等。
  • lpSecurityAttributes:指向SECURITY_ATTRIBUTES结构的指针,用于设置安全属性。通常将参数设置为NULL,系统将为文件或设备分配默认的安全属性。
  • dwCreationDisposition:指定如何创建或打开文件。例如CREATE_NEW(创建新文件)、OPEN_EXISTING(打开现有文件)等。
  • dwFlagsAndAttributes:文件或设备的属性,例如FILE_ATTRIBUTE_NORMAL(普通文件)、FILE_FLAG_OVERLAPPED(异步属性)等。
  • hTemplateFile:一个可选的模板文件句柄,用于创建新文件。如果不需要使用模板文件,可以设置为NULL。

返回值 :

  • 如果函数成功,返回一个非零的句柄(HANDLE)。
  • 如果函数失败,返回INVALID_HANDLE_VALUE。可以调用GetLastError函数。获取错误信息。

2.SetupComm

该函数用于初始化指定通讯设备的通讯参数,可用于设置串口通讯的输入和输出缓冲区。

函数原型:

BOOL SetupComm(
    HANDLE hFile,
    DWORD dwInQueue,
    DWORD dwOutQueue
);

参数说明:

  • hFile:这是一个句柄,代表要配置的通讯设备。该句柄为CreateFileA函数的返回值。
  • dwInQueue:输入缓冲区的大小,单位是字节。
  • dwOutQueue:输出缓冲区的大小,单位是字节。

返回值:

  • 成功返回true,失败返回false。
  • 如果函数返回失败,可以调用GetLastError函数获取错误信息。

3.COMMTIMEOUTS

结构体原型:

typedef struct _COMMTIMEOUTS {
    DWORD ReadIntervalTimeout;            //两个字符之间的最大时间间隔,单位毫秒。
    DWORD ReadTotalTimeoutMultiplier;    //指定一个读操作的完成时间的乘数部分,基于字节数的计算方式。
    DWORD ReadTotalTimeoutConstant;      //指定一个读操作的完成时间的常数部分,单位毫秒。
    DWORD WriteTotalTimeoutMultiplier;   //指定一个写操作的完成时间的乘数部分,基于字节数的计算方式。
    DWORD WriteTotalTimeoutConstant;     //指定一个写操作的完成时间的常数部分,单位毫秒。
} COMMTIMEOUTS, *LPCOMMTIMEOUTS;

 4.SetCommTimeouts

该函数用于设置串口超时时间。

函数原型:

BOOL SetCommTimeouts(
  HANDLE hFile,
  LPCOMMTIMEOUTS lpCommTimeouts
);

参数说明:

  • hFile:这是一个句柄,代表要配置的通讯设备。该句柄为CreateFileA函数的返回值。
  • lpCommTimeouts:是一个指向包含超时数据的COMMTIMEOUTS结构体的指针。

返回值:

  • 函数成功返回true,失败返回false。
  • 如果函数返回失败,可以调用GetLastError函数获取错误信息。

5.DCB

结构体原型:

typedef struct _DCB {
    DWORD DCBlength;              // 结构体大小
    DWORD BaudRate;               // 当前波特率
    DWORD fBinary:1;              // 是否允许二进制模式,WIN95中必须为TRUE
    DWORD fParity:1;              // 是否允许奇偶校验
    DWORD fOutxCtsFlow:1;         // CTS流程控制
    DWORD fOutxDsrFlow:1;         // DSR流程控制
    DWORD fDtrControl:2;          // DTR信号控制
    DWORD fDsrSensitivity:1;      // DSR信号敏感度
    DWORD fTXContinueOnXoff:1;    // 在XOFF字符时是否继续发送
    DWORD fOutX:1;                // 是否启用软件流控XON/XOFF
    DWORD wReserved;              // 保留,必须为0
    DWORD XonLim;                 // XON缓冲区限制
    DWORD XoffLim;                // XOFF缓冲区限制
    BYTE ByteSize;                //每个字节的位数,取值范围4-8
    BYTE Parity;                  //奇偶检验方式,取值范围0-4
    BYTE StopBits;                //停止位数量,取值0、1、2
    DWORD XonChar;                // XON字符值
    DWORD XoffChar;               // XOFF字符值
    DWORD fErrorChar:1;           // 是否启用错误字符检测
    DWORD fNull:1;                // 是否忽略NULL字符
    DWORD fAbortOnError:1;        // 发生错误时是否终止操作
    DWORD fRtsControl:2;          // RTS信号控制
    DWORD fInX:1;                 // 是否启用软件流控XON/XOFF(输入)
} DCB, *LPDCB;

6.SetCommState

该函数用于设置串口通讯的参数,包括波特率、数据位、停止位和奇偶校验等。

函数原型:

BOOL SetCommState(
  HANDLE hFile,
  LPDCB lpDCB
);

参数说明:

  • hFile:这是一个句柄,代表要配置的通讯设备。该句柄为CreateFileA函数的返回值。
  • lpDCB:是一个指向包含串口参数的DCB结构体的指针。

返回值:

  • 函数成功返回true,失败返回false。
  • 如果函数返回失败,可以调用GetLastError函数获取错误信息。

7.GetCommState

该函数用于获取指定串口通讯设备的当前设置。

函数原型:

BOOL GetCommState(
  HANDLE hFile,
  LPDCB lpDCB
);

参数说明:

  • hFile:这是一个句柄,代表要配置的通讯设备。该句柄为CreateFileA函数的返回值。
  • lpDCB:指向一个DCB结构,该结构接收串口设备的当前设置。

8.SetCommMask

该函数用于设置串口通讯的事件掩码,以便应用程序能够监视特定的串口事件。

函数原型:

BOOL SetCommMask(
  HANDLE hFile,
  DWORD  dwEvtMask
);

参数说明:

  • hFile:这是一个句柄,代表要配置的通讯设备。该句柄为CreateFileA函数的返回值。
  • dwEvtMask:事件掩码,指定了要监视的串口事件。例如EV_RXCHAR(缓冲区有可读数据)、EV_BGREAK(检测到BREAK信号)等。

9.ClearCommError

该函数用于清除串行端口的错误并获取当前状态。

函数原型:

BOOL ClearCommError(
  HANDLE hFile, 
  LPDWORD lpErrors, 
  LPCOMMSTAT lpStat
);

参数说明:

  • hFile:这是一个句柄,代表要配置的通讯设备。该句柄为CreateFileA函数的返回值。
  • lpErrors:这是指向DWORD变量的指针,用于返回错误数值。
  • lpStat:这是指向COMMSTAT结构的指针,用于接收通讯设备的状态信息。

10.ReadFile

该函数用于从文件或输入/输出设备读取数据。

函数原型:

BOOL ReadFile(
  HANDLE       hFile,
  LPVOID       lpBuffer,
  DWORD        nNumberOfBytesToRead,
  LPDWORD      lpNumberOfBytesRead,
  LPOVERLAPPED lpOverlapped
);

 参数说明:

  • hFile:这是一个句柄,代表要配置的通讯设备。该句柄为CreateFileA函数的返回值。
  • lpBuffer:指向接收数据的缓冲区的指针。
  • nNumberOfBytesToRead:要读取的字节数。
  • lpNumberOfBytesRead:指向一个变量的指针,该变量接收实际读取的字节数。
  • lpOverlapped:指向一个OVERLAPPED结构的指针,该结构包含有关重叠曹做的信息。如果不需要使用重叠I/O,则将此参数设置为NULL。

11.WaitForSingleObject

该函数用于等待一个对象变为有信号状态。

函数原型:

DWORD WaitForSingleObject(
  HANDLE hHandle,
  DWORD  dwMilliseconds
);

参数说明:

  • hHandle:要等待对象的句柄。
  • dwMilliseconds:等待时间,单位为毫秒。如果此参数为INFINITE,则一直等待知道对象标为有信号状态。

返回值:

  • 函数成功返回值为WAIT_OBJECT_0。
  • 函数失败返回值为WAIT_FAILED。

12.GetOverlappedResult

该函数用于获取异步I/O操作的结果。

函数原型:

BOOL GetOverlappedResult(
  HANDLE       hFile,
  LPOVERLAPPED lpOverlapped,
  LPDWORD      lpNumberOfBytesTransferred,
  BOOL         bWait
);

参数说明:

  • hFile:要查询的文件或设备的句柄。
  • lpOverlapped:指向一个OVERLAPPED结构的指针,该结构包括有关重叠操作的信息。
  • lpNumberOfBytesTransferred:指向一个变量的指针,该变量接收实际传输的字节数。
  • bWait:指定是否等待操作完成。

13.PurgeComm

该函数用于清除串口缓冲区中的数据。

函数原型:

BOOL PurgeComm(
  HANDLE hFile,
  DWORD  dwFlags
);

参数说明:

  • hFile:要清除的串口句柄。
  • dwFlags:指定要清除的数据类型。PURGE_RXCLEAR(清除接收缓冲区中的数据),PURGE_TXCLEAR(清除发送缓冲区中的数据)。

14.WaitCommEvent

该函数用于等待串口事件发生。

函数原型:

BOOL WaitCommEvent(
  HANDLE         hFile,
  LPDWORD        lpEvtMask,
  LPOVERLAPPED   lpOverlapped
);

参数说明:

  • hFile:要等待的串口句柄。
  • lpEvtMask:指向一个变量的指针,该变量接收发生的事件类型。
EV_BREAK:检测到BREAK信号。
EV_CTS:检测到CTS信号状态变化。
EV_DSR:检测到DSR信号状态变化。
EV_ERR:检测到错误。
EV_RING:检测到RING信号。
EV_RLSD:检测到RLSD信号状态变化。
EV_RXCHAR:接收缓冲区中有数据可读。
EV_RXFLAG:接收缓冲区中的数据已准备好。
EV_TXEMPTY:发送缓冲区为空。
  • lpOverlapped:指向一个OVERLAPPED结构的指针,该结构包含有关重叠操作的信息。如果不需要使用重叠I/O,则将此参数设置为NULL。

15.WriteFile

该函数用于将数据写入文件或通讯设备。

函数原型:

int WriteFile(
  HANDLE       hFile,
  LPCVOID      lpBuffer,
  DWORD        nNumberOfBytesToWrite,
  LPDWORD      lpNumberOfBytesWritten,
  LPOVERLAPPED lpOverlapped
);

参数说明:

  • hFile:要写入的句柄。
  • lpBuffer:指向要写入的数据缓冲区的指针。
  • nNumberOfBytesToWrite:要写入的字节数。
  • lpNumberOfBytesWritten:指向一个变量的指针,该变量接收实际写入的字节数。
  • lpOverlapped:指向一个OVERLAPPED结构的指针,该结构包含有关重叠操作的信息。如果不需要使用重叠I/O,则将此参数设置为NULL。

16.CloseHandle

该函数用于关闭一个已打开的对象句柄。

函数原型:

BOOL CloseHandle(
  HANDLE hObject
);

参数说明:

  • hObject:要关闭的对象句柄。
  • 29
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yjf~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值