您的位置:首页 > 编程语言 > C语言/C++

C++ 串口编程 写串口 同步通信方式

2011-05-20 20:42 363 查看
char buf[] = "Native String";
int len = strlen(buf);
BYTE * wchar=(BYTE *)buf;//将char[]转换成byte[]

WriteChar(wchar,len);//写串口,串口一打开,将串口一的信息wchar写到串口二中。

bool WriteChar(BYTE* m_szWriteBuffer,DWORD m_nToSend)//向串口写数据
{
BOOL bWrite = TRUE;
BOOL bResult = TRUE;
DWORD BytesSent = 0;
HANDLE m_hWriteEvent;
OVERLAPPED m_ov;

ResetEvent(m_hWriteEvent);
if (bWrite)//正确写入
{
m_ov.Offset = 0;
m_ov.OffsetHigh = 0;
// 清理缓冲区
bResult = WriteFile(hComm, // 向串口写数据,hComm串口句柄
m_szWriteBuffer, // 待写入数据的首地址
m_nToSend, // 待写入数据的字节数长度
&BytesSent, // 函数返回的实际写入串口的数据个数的地址
NULL ); // 重叠I/O结构的指针
if (!bResult)
{
DWORD dwError = GetLastError();//获取错误
switch (dwError)
{
case ERROR_IO_PENDING:
{
BytesSent = 0;
bWrite = FALSE;
break;
}
default:
{
break;
}
}
}
}
if (!bWrite)//写入错误
{
bWrite = TRUE;
bResult = GetOverlappedResult(hComm, // GetOverlappedResult返回一个OVERLAPPED结构来报告包括实际传输字节在内的重叠操作结果
&m_ov, // 重叠结构
&BytesSent, // 要发送数据长度
TRUE); // 如果为TRUE,就一直等到异步操作结束才返回。FALSE表示立即返回
if (!bResult)
{
::MessageBox(NULL,_T("报告错误!"),_T( "Information"), MB_OK);
}
}
if (BytesSent != m_nToSend)//验证发送的数据等于试图发送的数据
{
::MessageBox(NULL,_T("写入串口错误!"),_T( "Information"), MB_OK);
}
return true;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ 编程 byte null io