vc2010串口通信(使用mscomm控件)

时间:2022-09-06 10:18:38

1.下载mscomm控件;

(下载地址:http://download.csdn.net/detail/tianhen791/4023983

2.安装注册控件:下载完成后解压->点击setup.bat 即可此控件的安装和注册;

3.
添加->COM组件->Mircrosoft Communications Control, version 6.0
拖mscomm拖至对话框,
添加变量 m_comm
添加事件 OnComm

void CtestDlg::InitMsComm(void)
{
m_comm.put_CommPort(1);     // 选择COM1
m_comm.put_InBufferSize(1024);   // 指定接收缓冲区大小
m_comm.put_OutBufferSize(1024);// 指定发送缓冲区大小
m_comm.put_InputLen(0);     // 设置当前接收区数据长度为0,表示全部读取
m_comm.put_InputMode(1);    // 以二进制方式读写数据 
m_comm.put_Settings(L"9600,N,8,1"); // 波特率9600无检验位,8个数据位,1个停止位
m_comm.put_RThreshold(1);    // 接收缓冲区有1个及1个以上字符时,将引发接收数据的OnComm事件
try 
{ 
   m_comm.put_PortOpen(TRUE);
} 
catch (...) 
{ 
   AfxMessageBox(L"串口1打开失败");
   return;
} 
m_comm.get_Input();      //先预读缓冲区以清除残留数据
}

void CtestDlg::OnCommMscomm1()
{
// ==============串口数据接收过程=================== 
if(m_comm.get_CommEvent() == 2) 
{ 
   COleSafeArray SafeArray = m_comm.get_Input(); //第一步 
   int iLen = SafeArray.GetOneDimSize();    //第二步
   BYTE revBuf[1024]; 
   for(long i = 0;i < iLen; i++) 
   {
    SafeArray.GetElement(&i, revBuf + i);
   }

//对revBuf进行自己的处理

}
}

//================发送=================

void CtestDlg::SendCommBuf(BYTE *pSendBuf, int count)
{
CByteArray m_Array;
m_Array.SetSize(count);
for(int i = 0; i < count; i++)
{
   m_Array.SetAt(i, pSendBuf[i]);
}
m_comm.put_Output(COleVariant(m_Array));
}

void CtestDlg::OnBnClickedButton1()//发送示例
{
BYTE buf[3] = {0x11,0x12,0x13};
SendCommBuf(buf, 3);
}