串口通信原理包括打开串口、配置串口、读写数据和关闭串口。Windows API通过CreateFile函数打开串口,设置超时参数,使用ReadFile和WriteFile进行数据传输,最后调用CloseHandle关闭串口。
串口通信是计算机与外部设备(如智能仪表、调制解调器等)之间进行数据交换的重要手段,Windows API提供了一套完整的函数接口,使得开发者能够方便地实现串口通信,以下是使用WinAPI进行串口通信的详细步骤和原理:
一、串口通信原理

1、数据传输方式
单工:数据只能在一个方向上传输,例如电视信号的传输。
半双工:数据可以双向传输,但不能同时进行,例如对讲机。
全双工:数据可以同时在两个方向上传输,例如电话通信。
2、同步技术
异步传输:以字符为单位进行传输,每个字符前后加起始位和停止位,适用于低速设备。
同步传输:以数据块为单位进行传输,数据块前后加特殊字节表示起止,适用于高速设备。
二、串口通信步骤
1、打开串口
使用CreateFile()函数打开串口,获取串口句柄,该函数需要指定串口名称(如"COM1")、访问权限、共享模式等参数。

2、配置串口
通过GetCommState()函数获取当前串口配置,然后修改DCB(设备控制块)结构体中的参数,如波特率、数据位、奇偶校验和停止位等。
使用SetCommState()函数设置新的串口配置。
3、设置超时
调用GetCommTimeouts()获取当前超时设置,修改COMMTIMEOUTS结构体中的参数,再使用SetCommTimeouts()设置新的超时。
4、读写串口
使用ReadFile()和WriteFile()函数分别进行串口数据的读取和写入操作。
5、关闭串口
使用CloseHandle()函数关闭串口句柄,释放资源。
三、示例代码

“`c++
#include
#include
int main() {
HANDLE hSerial;
DCB dcbSerialParams = {0};
COMMTIMEOUTS timeouts = {0};
// 打开串口
hSerial = CreateFile("COM1",
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if (hSerial == INVALID_HANDLE_VALUE) {
std::cerr