windows串口通讯异步与同步API如何设置?

csdn一绝 2017-08-09 05:32:35

m_hCom = CreateFile(com, GENERIC_READ | GENERIC_WRITE, /*FILE_SHARE_WRITE|FILE_SHARE_READ*/0, NULL, OPEN_EXISTING, /*FILE_FLAG_OVERLAPPED*/0, NULL); //FILE_SHARE_WRITE|FILE_SHARE_READ
if (m_hCom == INVALID_HANDLE_VALUE)
{
int a = GetLastError();
CString errStr;
errStr.Format("open failed! error code is:%d\n",a);
AfxMessageBox(errStr);
return FALSE;
}
//设置读超时
COMMTIMEOUTS timeouts;
GetCommTimeouts(m_hCom, &timeouts);
timeouts.ReadIntervalTimeout = MAXDWORD; //2017/8/8 added
timeouts.ReadTotalTimeoutMultiplier = 5000; //2017/8/8 added
timeouts.ReadTotalTimeoutConstant = 60000;
timeouts.WriteTotalTimeoutMultiplier = 0;
timeouts.WriteTotalTimeoutConstant = 0;
SetCommTimeouts(m_hCom, &timeouts);

//设置读写缓冲区大小
static const int nZhenMax = 32768;
if (!SetupComm(m_hCom, nZhenMax, nZhenMax))
{
AfxMessageBox("SetupComm() failed!");
CloseHandle(m_hCom);
return FALSE;
}

//设置串口配置信息
DCB dcb;
if (!GetCommState(m_hCom, &dcb))
{
AfxMessageBox("GetCommState() failed!");
CloseHandle(m_hCom);
return FALSE;
}

dcb.DCBlength = sizeof(DCB);
dcb.BaudRate = baud; //波特率为115200
dcb.Parity = parity; //校验方式为无校验0
dcb.ByteSize = databit; //数据位为8位
dcb.StopBits = stopbit; //停止位为1位
if (!SetCommState(m_hCom, &dcb))
{
AfxMessageBox("SetCommState() failed!");
CloseHandle(m_hCom);
return FALSE;
}

//清空缓冲
PurgeComm(m_hCom, PURGE_RXCLEAR|PURGE_TXCLEAR);

//清除错误
DWORD dwError;
COMSTAT cs;
if (!ClearCommError(m_hCom, &dwError, &cs))
{
AfxMessageBox("ClearCommError() failed!");
CloseHandle(m_hCom);
return FALSE;
}

//设置串口监听事件
SetCommMask(m_hCom, EV_RXCHAR);

return TRUE;
...全文
613 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zgl7903 2017-08-10
  • 打赏
  • 举报
回复
CreateFile 中的dwFlagsAndAttributes参数, 如果指定 FILE_FLAG_OVERLAPPED ,就是异步, 不加就是同步
赵4老师 2017-08-09
  • 打赏
  • 举报
回复
向MSDN98中自带的串口通信例子程序学习。 MSDN98_1.ISO http://pan.baidu.com/s/1dDF41ix, MSDN98_2.ISO http://pan.baidu.com/s/1bnGo0Vl MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\*.*

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧