Windows 串口通信开发实战

基本概念

串口通信是嵌入式、物联网、工业控制领域的基石技术,其本质是通过操作系统 API 直接操作 UART 硬件接口完成二进制/文本协议传输。Windows 系统通过 文件化抽象 实现串口控制。

核心流程:打开串口–>配置串口参数–>数据收发–>关闭串口

使用示例

1)端口初始化

HANDLE hSerial = CreateFile(
    L"COM3",                      // 串口号 (Unicode 宽字符 L)
    GENERIC_READ | GENERIC_WRITE, // 访问权限(位运算组合)
    0,                            // 独占模式(禁止其他进程访问)
    NULL,                         // 默认安全属性
    OPEN_EXISTING,                // 创建方式:打开已存在的设备
    FILE_ATTRIBUTE_NORMAL,        // 文件属性:普通文件(无特殊属性)
    NULL                          // 无模板文件
);
  • 返回的 HANDLE 需全局管理 :避免重复打开。
  • 校验返回值 :检查 hSerial 是否等于 INVALID_HANDLE_VALUE,以确定串口打开是否失败。

2)协议配置:DCB 结构体与流控制

DCB dcb = { 0 };        // 必须初始化归零
dcb.DCBlength = sizeof(dcb);        // 结构体大小(API 依赖此字段)
GetCommState(hSerial, &dcb);

// 优先使用字符串配置(结构化语法)
std::wostringstream  oss; // 宽字符流 W
// 波特率、校验位、数据位、停止位、timeout、DTR、RTS
oss << L"baud=9600 parity=N data=8 stop=1 to=off dtr=off rts=on";
BuildCommDCBW(oss.str().c_str(), &dcb) // 使用宽字符版本 W

// 手动覆盖流控制策略
dcb.fDtrControl = DTR_CONTROL_ENABLE;
dcb.fRtsControl = RTS_CONTROL_ENABLE;

SetCommState(hSerial, &dcb)   // 应用配置
  • 严格遵循 BuildCommDCBW 的字符串语法 :确保格式为 key=value
  • 校验关键函数返回值 :检查 BuildCommDCBWSetCommState 是否成功。

3)数据收发

发送数据

char data[] = "AT\r\n";        //\r\n 回车+换行
DWORD bytesWritten;        // 发送的字节数
WriteFile(hSerial, data, strlen(data), &bytesWritten, NULL);

接收数据

char buffer[256];
DWORD bytesRead;        // 接收的字节数
ReadFile(hSerial, buffer, sizeof(buffer) - 1, &bytesRead, NULL); // sizeof(buffer) - 1 保留终止符空间
if(bytesRead > 0) {
    buffer[bytesRead] = '\0';        // 添加终止符(文本协议)
    //...
}
  • ReadFile/WriteFile 可以校验返回值 + 实际读写字节数
  • 超时策略需根据场景选择

4)关闭端口

CloseHandle(hSerial);

总结

  • 打开串口 :CreateFile
  • 获取配置 :GetCommState
  • 设置参数 :SetCommState
  • 数据发送 :WriteFile
  • 数据接收 :ReadFile
  • 关闭端口 :CloseHandle
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值