打开端口失败!VC++串口通信程序有关问题
打开端口失败!VC++串口通信程序问题
程序问题代码如下:
//添加的对串口的初始化语句
if(m_cComm.GetPortOpen()) //如果发现串口本来是打开的,则关闭串口
m_cComm.SetPortOpen(FALSE);
m_cComm.SetCommPort(4); //选择COM4端口
m_cComm.SetInputMode(1); //输入方式为二进制方式
m_cComm.SetInBufferSize(512); //设置输入缓冲区
m_cComm.SetOutBufferSize(512); //设置输出缓冲区
m_cComm.SetSettings("9600,n,8,1");//波特率9600,无校验,8个数据位,1个停止位
if(!m_cComm.GetPortOpen())
{
m_cComm.SetPortOpen(TRUE); //打开串口
m_cComm.SetRThreshold(1); //每当接收缓冲区有1个字符则接收串口数据
m_cComm.SetInputLen(0); //设置当前缓冲区长度为0
m_cComm.GetInput(); //预读缓冲区以清除残留数据
}
else
AfxMessageBox("打开端口失败!",MB_ICONSTOP,0);
语法上来说,上面这段代码是没有错误的。但是debug的时候每次都直接跳过if{}里的代码,直接else了。思考了很久都没有结果,希望有达人帮忙,不胜感激。
------解决方案--------------------
没看明白你的代码想干什么。。。。。。。。
贴一个我写的代码吧
程序问题代码如下:
//添加的对串口的初始化语句
if(m_cComm.GetPortOpen()) //如果发现串口本来是打开的,则关闭串口
m_cComm.SetPortOpen(FALSE);
m_cComm.SetCommPort(4); //选择COM4端口
m_cComm.SetInputMode(1); //输入方式为二进制方式
m_cComm.SetInBufferSize(512); //设置输入缓冲区
m_cComm.SetOutBufferSize(512); //设置输出缓冲区
m_cComm.SetSettings("9600,n,8,1");//波特率9600,无校验,8个数据位,1个停止位
if(!m_cComm.GetPortOpen())
{
m_cComm.SetPortOpen(TRUE); //打开串口
m_cComm.SetRThreshold(1); //每当接收缓冲区有1个字符则接收串口数据
m_cComm.SetInputLen(0); //设置当前缓冲区长度为0
m_cComm.GetInput(); //预读缓冲区以清除残留数据
}
else
AfxMessageBox("打开端口失败!",MB_ICONSTOP,0);
语法上来说,上面这段代码是没有错误的。但是debug的时候每次都直接跳过if{}里的代码,直接else了。思考了很久都没有结果,希望有达人帮忙,不胜感激。
------解决方案--------------------
没看明白你的代码想干什么。。。。。。。。
贴一个我写的代码吧
- C/C++ code
if( m_cComm.get_PortOpen()){ m_cComm.put_PortOpen(FALSE); } else if( !m_cComm.get_PortOpen()){ m_cComm.put_CommPort(1); //设置串口号 m_cComm.put_InputMode(1); //1:表示以二进制方式检取数据 m_cComm.put_Settings("115200,n,8,1"); //设置波特率,数据格式 m_cComm.put_InBufferSize(1024); //设置输入缓冲区大小 m_cComm.put_PortOpen(TRUE); //打开串口 m_cComm.put_RThreshold(1); //参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件 m_cComm.put_SThreshold(1); m_cComm.put_InputLen(0); //设置当前接收区数据长度为0 m_cComm.get_Input();//先预读缓冲区以清除残留数据 } else AfxMessageBox("cannot open serial port!!!");