使用Win32创建串口通讯程序
2010-06-29 20:42:40 来源:WEB开发网ReadIntervalTimeout
指定通讯线上两个字符到达的最大时延,以毫秒为单位。在ReadFile操作期间,时间周期从第一个字符接收到算起。如果收到的两个字符之间的间隔超过该值,ReadFile操作完毕并返回所有缓冲数据。如果ReadIntervalTimeout为0,则该值不起作用。
如果值为MAXDWORD, 并且ReadTotalTimeoutConstant和ReadTotalTimeoutMultiplier两个值都为0, 则指定读操作携带已经收到的字符立即返回,即使没有收到任何字符。
ReadTotalTimeoutMultiplier
指定以毫秒为单位的累积值。用于计算读操作时的超时总数。对于每次读操作,该值与所要读的字节数相乘。
ReadTotalTimeoutConstant
指定以毫秒为单位的常数。用于计算读操作时的超时总数。对于每次读操作,ReadTotalTimeoutMultiplier与所要读的字节数相乘后与该值相加。
如果ReadTotalTimeoutMultiplier和ReadTotalTimeoutConstant都为0,则在读操作时忽略总超时数。
WriteTotalTimeoutMultiplier
指定以毫秒为单位的累积值。用于计算写操作时的超时总数。对于每次写操作,该值与所要写的字节数相乘。
WriteTotalTimeoutConstant
指定以毫秒为单位的常数。用于计算写操作时的超时总数。对于每次写操作, WriteTotalTimeoutMultiplier与所要写的字节数相乘后与该值相加。
如果 WriteTotalTimeoutMultiplier 和 WriteTotalTimeoutConstant都为0,则在写操作时忽略总超时数。
提示:用户设置通讯超时后,如没有出错,串口已经被打开。
发送数据
串口数据发送多作为写文件处理的,程序员可以应用文件操作函数发送数据到串口。采用WriteFile函数发送数据到串口。
if (WriteFile(handlePort_, // 文件句柄
outputData, // 数据缓冲区指针
sizeBuffer, // 字节数
&length,NULL) == 0) // 接收成功发送数据长度的指针
{
AfxMessageBox("Reading of serial communication has problem.");
return FALSE;
}
提示:如果函数成功,返回非0值
接收数据
串口数据接收多作为读文件处理。程序员可以应用文件操作函数从串口接收数据。用ReadFile函数接收串口的数据。
if (ReadFile(handlePort_, // 句柄
inputData, // 数据缓冲区指针
sizeBuffer, // 字节数
&length, // 指向已经读入的字节数
NULL) == 0) // 重叠I/O结构体
{
AfxMessageBox("Reading of serial communication has problem.");
return FALSE;
}
提示:如果函数成功,返回非0值
关闭串口
可以调用CloseHandle API函数关闭串口
if(CloseHandle(handlePort_) == 0) // 调用该函数关闭串口
{
AfxMessageBox("Port Closeing isn''t successed.");
return FALSE;
}
提示:如果函数成功,返回非0值
本文配套源码
更多精彩
赞助商链接