做过一系列的串口设备通信,一直都 CreateFile() 然后 WriteFile() ,完了就 CloseHandle();没出什么问题,这次做唯拓的一款LED顾客显示屏,依然这么做,因为事先使用过他们提供的 demo 程序测试过设备,因此写的 dll 也能正常被调用,交给其他同事使用,接好设备后显示正常的 0.00 ,调用我的程序后设备全暗,什么都不显示。
用厂方的demo测试,设备又能显示,再调用我的程序,发现可以正常工作,厂方提供的文档也没做其他说明,只说设备通电后波特率被设置为 2400,不需要再设置。经过一番思索,应该还是在串口初始化上面有问题,于是找到一款串口数据检测工具 CommMonitor。
调用我的程序串口数据传输情况如下图:
打开厂方工具时所得串口数据传输如下图:
我想问题应该就在此了,于是根据如上截图的信息,在程序中加了一段设置串口参数的代码
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,加入此段代码后再看串口数据传送情况如下图:
程序也能正常控制设备了,所以串口通信时,如果出现莫名其妙的问题,应该查看一下是否为串口参数设置不正确。