Windows 中与串口通信相关的 API381
简介
串口接口(也称为串行端口或 COM 端口)是一种古老而常见的硬件接口,用于与各种设备(如调制解调器、打印机和微控制器)进行通信。Windows 操作系统提供了一系列 API,使开发人员能够与串口通信,从而实现数据传输、设备控制和诊断。
CreateFile 函数
CreateFile 函数用于打开串口设备。它需要指定串口设备的名称(例如 "COM1")和所需的访问权限(例如读写)。如果成功,该函数将返回一个句柄,用于后续与串口的交互。HANDLE CreateFile(
LPCSTR lpFileName, // 串口设备名称
DWORD dwDesiredAccess, // 访问权限
DWORD dwShareMode, // 共享模式
LPSECURITY_ATTRIBUTES lpSecurityAttributes, // 安全属性
DWORD dwCreationDisposition, // 创建方式
DWORD dwFlagsAndAttributes, // 标志和属性
HANDLE hTemplateFile // 模板文件句柄
);
ReadFile 函数和 WriteFile 函数
ReadFile 函数和 WriteFile 函数分别用于从串口读取数据和向串口写入数据。这些函数需要指定串口句柄和要读取或写入的缓冲区。如果成功,它们将返回已读取或写入的字节数。BOOL ReadFile(
HANDLE hFile, // 串口句柄
LPVOID lpBuffer, // 输入缓冲区
DWORD nNumberOfBytesToRead, // 要读取的字节数
LPDWORD lpNumberOfBytesRead, // 已读取的字节数
LPOVERLAPPED lpOverlapped // 重叠 I/O
);
BOOL WriteFile(
HANDLE hFile, // 串口句柄
LPCVOID lpBuffer, // 输出缓冲区
DWORD nNumberOfBytesToWrite, // 要写入的字节数
LPDWORD lpNumberOfBytesWritten, // 已写入的字节数
LPOVERLAPPED lpOverlapped // 重叠 I/O
);
SetCommState 函数
SetCommState 函数用于设置串口的通信参数,例如波特率、数据位、奇偶校验和停止位。这些参数决定了串口如何与其他设备通信。BOOL SetCommState(
HANDLE hFile, // 串口句柄
LPDCB lpDCB // 通信参数结构
);
ClearCommError 函数
ClearCommError 函数用于获取和清除与串口相关的错误。它报告错误类型(例如帧错误、溢出和缓冲区空)并允许应用程序恢复通信。BOOL ClearCommError(
HANDLE hFile, // 串口句柄
LPDWORD lpErrors, // 错误类型
LPUARTCT1 lpStat // 通信状态
);
GetCommState 函数
GetCommState 函数用于检索串口的当前通信参数。这对于验证所做的更改或诊断通信问题很有用。BOOL GetCommState(
HANDLE hFile, // 串口句柄
LPDCB lpDCB // 通信参数结构
);
DCB 结构
DCB 结构包含串口通信参数。它指定了波特率、数据位、奇偶校验、停止位、超时等设置。可以使用 SetCommState 函数设置和使用 GetCommState 函数检索 DCB 结构。typedef struct _DCB {
DWORD DCBlength; // 结构大小
DWORD BaudRate; // 波特率
BYTE ByteSize; // 数据位
BYTE Parity; // 奇偶校验
BYTE StopBits; // 停止位
BYTE fBinary; // 二进制模式
BYTE fParity; // 使用奇偶校验
BYTE fOutxCtsFlow; // 输出 CTS 流控制
BYTE fOutxDsrFlow; // 输出 DSR 流控制
BYTE fDtrControl; // DTR 控制
BYTE fRtsControl; // RTS 控制
BYTE fAbortOnError; // 发生错误时中止
BYTE fDummy2; // 保留
DWORD fDummy4; // 保留
WORD wReserved; // 保留
CHAR XonChar; // XON 字符
CHAR XoffChar; // XOFF 字符
CHAR ErrorChar; // 错误字符
CHAR EofChar; // EOF 字符
CHAR EvtChar; // 事件字符
WORD wReserved1; // 保留
} DCB, *LPDCBB96;
其他 API
除了上述 API 之外,Windows 还提供了其他与串口通信相关的 API,例如 EscapeCommFunction 函数(用于控制调制解调器和其他设备)、BuildCommDCB 函数(用于创建 DCB 结构)和 GetCommProperties 函数(用于获取串口设备的属性)。
示例代码
下面是一个使用 CreateFile、ReadFile 和 WriteFile 函数与串口进行通信的简单示例代码:#include
#include
int main()
{
HANDLE hSerial;
char buffer[1024];
DWORD bytesRead, bytesWritten;
// 以读写方式打开串口
hSerial = CreateFile("COM1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
if (hSerial == INVALID_HANDLE_VALUE)
{
printf("无法打开串口 COM1");
return 1;
}
// 设置通信参数
DCB dcb;
GetCommState(hSerial, &dcb);
= 9600;
= 8;
= NOPARITY;
= ONESTOPBIT;
SetCommState(hSerial, &dcb);
// 读取串口数据
ReadFile(hSerial, buffer, sizeof(buffer), &bytesRead, NULL);
printf("已读取 %d 字节数据:%s", bytesRead, buffer);
// 向串口写入数据
strcpy(buffer, "Hello World!");
WriteFile(hSerial, buffer, strlen(buffer), &bytesWritten, NULL);
printf("已写入 %d 字节数据:%s", bytesWritten, buffer);
// 关闭串口
CloseHandle(hSerial);
return 0;
}
2025-02-15
新文章

macOS与Windows深度解析:从系统架构、生态到应用场景的专家级比较与选择

鸿蒙OS:构建全场景智慧生态的分布式操作系统深度解析

深度解析苹果iOS操作系统:从核心架构到软件生态的极致体验

正版与盗版之战:深度解析Windows盗版系统的技术风险、检测机制与合规之路

Android操作系统在智能化报修系统中的核心作用与技术实现深度解析

深入解析Windows临时目录:从原理到管理与优化

华为Mate 30与鸿蒙系统:深度解析分布式OS的崛起与全场景智慧生态

鸿蒙系统小组件深度解析:从隐藏管理到智能桌面体验优化

深入解析Windows常用文件系统:NTFS, FAT32, exFAT及更多

OPPO手机Android系统更新深度解析:从用户操作到幕后技术与最佳实践
热门文章

iOS 系统的局限性

Linux USB 设备文件系统

Mac OS 9:革命性操作系统的深度剖析

华为鸿蒙操作系统:业界领先的分布式操作系统

**三星 One UI 与华为 HarmonyOS 操作系统:详尽对比**

macOS 直接安装新系统,保留原有数据

Windows系统精简指南:优化性能和提高效率
![macOS 系统语言更改指南 [专家详解]](https://cdn.shapao.cn/1/1/f6cabc75abf1ff05.png)
macOS 系统语言更改指南 [专家详解]

iOS 操作系统:移动领域的先驱
