• 串口编程需要注意的地方


            做过一系列的串口设备通信,一直都 CreateFile() 然后 WriteFile() ,完了就 CloseHandle();没出什么问题,这次做唯拓的一款LED顾客显示屏,依然这么做,因为事先使用过他们提供的 demo 程序测试过设备,因此写的 dll 也能正常被调用,交给其他同事使用,接好设备后显示正常的 0.00 ,调用我的程序后设备全暗,什么都不显示。
            用厂方的demo测试,设备又能显示,再调用我的程序,发现可以正常工作,厂方提供的文档也没做其他说明,只说设备通电后波特率被设置为 2400,不需要再设置。经过一番思索,应该还是在串口初始化上面有问题,于是找到一款串口数据检测工具 CommMonitor。

            调用我的程序串口数据传输情况如下图:

    串口编程需要注意的地方 - mForestLaw - mForestLaws Blog

            打开厂方工具时所得串口数据传输如下图:

    串口编程需要注意的地方 - mForestLaw - mForestLaws Blog

            我想问题应该就在此了,于是根据如上截图的信息,在程序中加了一段设置串口参数的代码

    void InitializeComm(HANDLE& handle) {
        SetupComm(handle, 1024, 512);
        DCB dcb = {0};
        dcb.DCBlength = sizeof(DCB);
        dcb.BaudRate = CBR_2400;
        dcb.fBinary = 1;
        dcb.fParity = 1;
        dcb.fDtrControl = DTR_CONTROL_ENABLE;
        dcb.fRtsControl = RTS_CONTROL_DISABLE;
        dcb.XonLim = 256;
        dcb.XoffLim = 256;
        dcb.ByteSize = 8;
        dcb.Parity = NOPARITY;
        dcb.StopBits = ONESTOPBIT;
        dcb.XonChar = 17;
        dcb.XoffChar = 19;
        dcb.EofChar = 26;
        SetCommState(handle, &dcb);
    }

    OK,加入此段代码后再看串口数据传送情况如下图:

    串口编程需要注意的地方 - mForestLaw - mForestLaws Blog

            程序也能正常控制设备了,所以串口通信时,如果出现莫名其妙的问题,应该查看一下是否为串口参数设置不正确。

  • 相关阅读:
    linux 软件各文件安装位置
    c dup 函数
    c sigaction信号处理
    vtun 信号处理
    vtun 虚拟网卡的读写非阻塞研究
    vtun 守护进程详解
    vtun fork函数
    vtun 中的__io_canceled变量和相关函数
    android 之 AIDL
    android 显示电池电量
  • 原文地址:https://www.cnblogs.com/mforestlaw/p/3289519.html
Copyright © 2020-2023  润新知