如题,在用MSComm进行串口通信时,初始化设置如下:
/////////////////////////
m_ctrlComm.SetCommPort(1); //选择com1
if( !m_ctrlComm.GetPortOpen())
   m_ctrlComm.SetPortOpen(TRUE);//打开串口
else
   AfxMessageBox("cannot open serial port"); m_ctrlComm.SetSettings("19200,m,8,1"); //波特率19200,无校验,8个数据位,1个停止位  m_ctrlComm.SetInputMode(1); //1:表示以二进制方式检取数据
m_ctrlComm.SetRThreshold(1); 
//参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件
m_ctrlComm.SetInputLen(1024); //设置当前接收区数据长度为0
m_ctrlComm.GetInput();//先预读缓冲区以清除残留数据
/////////////////////////////输入输出数据皆为16进制(下同)。
发送数据为:1
接收到的数据为:3f 3f 3f而我用串口大师进行通信,设置如下:
串口:com1
波特率:19200
数据位:8
校验位:MASK
停止位:1
/////////////////发送数据:1
接收到的数据位:21 00 21
此接收的数据为正确数据。请问:1.(主要问题)大家以前碰到过这样的问题没,怎样解决的?是不是MSComm初始设置有问题,或者缺少了哪些设置?
      2.大家知道串口大师是用什么编的吗?

解决方案 »

  1.   

    m_ctrlComm.SetSettings("19200,m,8,1"); m_ctrlComm.SetSettings("19200,n,8,1");
      

  2.   

    写错了注释:
    m_ctrlComm.SetSettings("19200,m,8,1"); //波特率19200,奇偶校验为MASK,8个数据位,1个停止位 
      

  3.   

    是不是MSCOMM的问题?
    用API(CreateFile, ReadFile, WriteFile),看看是否还有这样的现象?
      

  4.   

    问题解决,还是对MSCOMM了解不够透彻,在设置奇偶校验时要注意 SetParityReplace(LPCTSTR lpszNewValue) 函数,由于没有将其参数设置为空字符串:SetParityReplace(""),所以才会出现返回3f 3f 3f的问题,3f就是"?"