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;
}
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++ 串口通信编程 设置串口属性
- 串口通信编程--多线程异步方式
- C++ 串口通信编程 设置串口属性
- 串口通信编程--多线程异步方式
- C++同步串口通信
- 串口通信编程--多线程异步方式
- C/C++ 多线程(MultiThread)编程及几种同步方式
- 【java面试系列之网络编程】TCP和UDP的区别、TCP协议的三次握手和四次挥手、TCP协议的通信状态、网络编程时的同步、异步、阻塞、非阻塞、进程间的通信方式、TCP的流量控制和拥塞控制
- 【备用】串口通信编程--多线程异步方式
- 串口通信编程--多线程异步方式
- (转)GPS导航芯片中串口通信同步I/O方式的程序设计
- VS2013 Windows API 串口通信编程--多线程异步方式
- 【Android应用开发】-(19)Android 串口编程原理和实现方式(附源码)
- 基于VC6.0 MFC的简单串口通信软件编程
- [转]Windows CE下的串口通信编程(by fllsoft)
- Linux 下串口USB等设备通信编程入门1
- 使用Visual C++进行串口通信编程[一]