导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→C++串口通信问题[wxg20020788]

 *第46889篇: C++串口通信问题

  
楼 主:wxg20020788 2007年3月11日21:23
 C++串口通信问题

点击浏览该文件


由于类容较多,所以详见附件:help!.doc,急用,谢谢!!

  
2楼:wxg20020788 2007年3月12日09:33
 补充,help!.doc的具体类容
本人有一个用MFC实现的串口程序,初始化如下:
 ResetData();
    fp=fopen("output.txt","w+");     
    if(m_MSComm.GetPortOpen()) //如果串口是打开的,则行关闭串口
        m_MSComm.SetPortOpen(FALSE);
     m_MSComm.SetCommPort(1); //选择COM1
     m_MSComm.SetInBufferSize(1024); //接收缓冲区的大小
     m_MSComm.SetOutBufferSize(512);//发送缓冲区的大小
     m_MSComm.SetInputLen(0);//设置当前接收区数据长度为0,表示全部读取
     m_MSComm.SetInputMode(1);//以二进制方式读写数据
     m_MSComm.SetRThreshold(21);//接收缓冲区有1个及1个以上字符时,将引发接收数据的OnComm事件
     m_MSComm.SetSettings("19200,n,8,1");//波特率19200无检验位,8个数据位,1个停止位
     if(!m_MSComm.GetPortOpen())//如果串口没有打开则打开
         m_MSComm.SetPortOpen(TRUE);//打开串口
     else
        AfxMessageBox("Open Serial Port Failure!");
     int a;
  a=m_MSComm.GetInBufferCount();// 将输入缓冲区内等待读取的字节数赋给a
  m_MSComm.GetInput(); //先预读缓冲区以清除残留数据
 
向接受机发送了字符串“01qS”的程序如下:
int i;
 int mm,nn;
 CByteArray array;
 array.RemoveAll();
    array.SetSize(4);
 for(i=0;i<4;i++)
 {
  array.SetAt(i,tdata[1][i]);// unsigned char tdata[3][4]={{'H'},{'0','1','q','S'},
{'0','1','r','S'}};
 }
 if(!m_MSComm.GetPortOpen())
  m_MSComm.SetPortOpen(TRUE);
    //发送数据
  m_MSComm.SetOutput(COleVariant(array));
    //删除数据,释放内存
    array.RemoveAll();
    array.FreeExtra();

接收机有两种板子,分别采用射频技术和蓝牙技术。当采用射频板子时,发现板子能正确接受数据,PC随后接受到板子发来
的一系列数据(说明上面的程序是对的)。但当替换为蓝牙板子时,板子不能接受到正确的数据,而且二者的数据格式和波
特率完全相同。
本人用串口调试软件sscom32对蓝牙板子进行测试,如图1设置后能板子正确接受到PC发来的命令,由于板子接受到“01qS”
的命令后会向PC机发送数据,但sscom32并没有接受到数据。但当我选中RTS后,sscom32接受到了蓝牙板子的数据并在上面的
数据框中显示(如图2),这表明蓝牙板子已和sscom32正常通信了。
请问是否是因为我上面的程序没有添加流控制协议才导致和蓝牙板子通信的失败,还是别的原因? 请问如何解决,对上面的
程序如何修改?

急用,不胜感激!


help!.doc为我求助类容的word版,并包含图片,谢谢!!


>>>>>>对该主题发表你的看法

本主题贴数2,分页: [第1页]


[上一篇主题]:思瑞科技鼎力推出可运行VxWorks和Linux的MPC8270处理器平台

[下一篇主题]:思瑞科技让更多工程师能用上PowerPC处理器和VxWorks和Linux