• 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盘注册一样使用

  • 相关阅读:
    Problem about objc_exception_throw
    Change mime Types for mac's default apache
    重启Mac上的Apache服务
    通过无线网安装自己打包的ipa文件
    How to cancel selection for TreePanel(GXT)
    使用Jsoup获取网页内容超时设置
    HTML Meta, http-equiv, Refresh
    线上redis服务内存异常分析。
    C++/CLI 本地字符串和托管字符串之间的转换
    DWF Toolkit on Microsoft Windows
  • 原文地址:https://www.cnblogs.com/judes/p/5866494.html
Copyright © 2020-2023  润新知