zoukankan      html  css  js  c++  java
  • MFC使用MsComm做串口通信

    一、注册MSCOMM

    1、下载控件MSCOMM32.OCX(32位),mswnisck.ocx(64位)

    2、把这个ocx文件放在c盘WIndows的system32里,打开cmd执行:regsvr32 MSCOMM32.OCX(32位)

       把这个ocx文件放在c盘WIndows的syswow64里,打开cmd执行:regsvr32 c:windossyswowmswnisck.OCX(64位)

    3、在图形界面右键-》插入ActiveX控件,找到MS Communication控件,放在界面里(是一个黄色电话)

    二、打开串口

    m_mscomm.put__CommPort(1);//选择串口一
    m_mscomm.put_InputMode(1);//二进制方式读写数据
    m_mscomm.put_InBufferSize(1024);//接收缓冲区大小,字节
    m_mscomm.put_OutBufferSize(1024);//发送缓冲区大小,字节
    m_mscomm.put_Settings(_T("9600,n,8,1"));//9600波特率,8个数据位,1个停止位
    m_mscomm.put_InputLen(0);//设置当前接收区数据长度为0,表示全部读取
    m_mscomm.put_RThreshold(1);//接收缓冲区有1个及1个以上字符时,将引发接收数据的OnComm
    m_mscomm.put_PortOpen(TRUE);//打开串口,如果打开失败,此函数会调用AfxMessageBox来显示错误信息,并返回

    三、发送数据

    m_mscomm.put_Output((COleVariant)m_sendstr);//如果发送失败,此函数会调用AfxMessageBox提示错误信息并返回

    四、接收数据(基于事件驱动型,和中断类似)

    在图形界面,右键MSComm控件,添加事件处理程序onComm,在函数里:

    VARIANT variant;
    variant=m_mscomm.get_Input();//把接收缓冲区里的数据放在variant结构体中,这个结构体里有很多联合体,数据应该放在其中一个中
    COleSafeArray colesafearray;//定义一个安全数组,是为了下面处理数据
    colesafearray = variant;//把返回值存放在这个安全数组里
    byte buf[512];//定义一个字节数据
    long len, k;
    len = colesafearray.GetOneDimSize();//数据一共有多少字节
    for (k = 0; k < len; k++)
      colesafearray.GetElement(&k, buf + k);//把安全数组里的数据转移到字节数组buf中,方便打印
    buf[len] = 0;//防止乱码
    AfxMessageBox((CString)buf);

    四、关闭串口

    m_mscomm.put_PortOpen(FALSE);

    ps:如果注册失败,有可能是对c盘的权限不够,把ocx放在其他路径如D盘注册一样使用

  • 相关阅读:
    SceneBuilder 打不开 .fxml文件,只在任务栏显示
    JDK1.6 1.7 1.8 多版本windows安装 执行命令java -version 版本不变的问题
    新手根据菜鸟教程安装docker,从No package docker-io available开始遇到的坑...
    Linux安装mysql
    用Eclipse搭建ssh框架
    前端面试之vue相关的面试题
    前端面试之闭包理解
    HTML5新规范和CSS3新特性
    vue2.0项目创建之环境变量配置
    windows下SVN服务器搭建--VisualSVN与TortoiseSVN的配置安装
  • 原文地址:https://www.cnblogs.com/judes/p/5866494.html
Copyright © 2011-2022 走看看