创建文件句柄方式对串口设备进行操作
因工作要求我链接的是虚拟串口做转接数据的功能,我只能指明我当时链接设备读写的时候遇到的一些问题
**主要函数//打开串口的模式
CreateFile 创建(串口名称,打开串口的模式,不公开,默认,打开,默认,默认)
ReadFile 读 (文件句柄,接收缓存,接收多少,存放缓存里面具体字节)
WriteFile 写(文件句柄,要写入的东西,要写入的字节数,用于存放实际写入的字节数)**
对于传参不做过多解释 自行百度都有 注意创建时候的方式和确定是同步还是异步的读写
- 设置串口参数
DCB Config;
Config.ByteSize = 8; //8个比特数据为单位
Config.BaudRate = CBR_9600; //波特率默认9600
Config.StopBits = ONESTOPBIT; //停止位为1位
Config.Parity = NOPARITY; //无奇偶校验位
- 初始化串口句柄
HANDLE Handle; //串口句柄
Handle = CreateFileA(portName,GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
//防止超时,设置最大时间间隔
COMMTIMEOUTS comTimeOut;
comTimeOut.ReadIntervalTimeout = 3;
comTimeOut.ReadTotalTimeoutMultiplier = 3;
comTimeOut.ReadTotalTimeoutConstant = 2;
comTimeOut.WriteTotalTimeoutMultiplier = 3;
comTimeOut.WriteTotalTimeoutConstant = 2;
SetCommTimeouts(this->Handle, &comTimeOut);
- 读写
读声明
Read(char* InputData, unsigned int DataSize, unsigned long & DataLength)
{
ReadFile(this->Handle,InputData,DataSize,&DataLength,NULL)
}
调用方式
char buffer[100];
unsigned int datasize = 101;
unsigned long datalength;
Read(buffer, datasize, datalength);
写声明
Write(char *outputData, unsigned int size, unsigned long & length)
{
WriteFile(Handle,outputData,size,&length,NULL)
}
调用方式
char msg[100]={31};
unsigned long length;
Write(msg, sizeof(msg), length);
//还有一些简单的判断是否链接成功错误码判断就不一一声明了 大致的简单链接方式就是这样 亲测可用