本人用QextSerialPort类进行串口发送与接收,程序如下:
serialPort = new QextSerialPort(); //初始化
serialPort->setQueryMode(QextSerialPort::EventDriven); //设MODE
serialPort->setPortName("COM1"); //设PORT
serialPort->setBaudRate(BAUD); //设BAUD
serialPort->setFlowControl(FLOW_OFF);
serialPort->setParity(PAR_NONE);
serialPort->setDataBits(DATA_8);
serialPort->setStopBits(STOP_1);
if (serialPort->open(QIODevice::ReadWrite) == false) // 打开串口
...........
else
...............
serialPort->write((char*),int); ///////数据发送
程序这样写是没有问题的,但不知道为什么当我电脑关机一段时间(例如一个晚上)后再开机,运行此程序,打开串口成功,但就发不出数据(是打开方式不对吗),关闭程序,然后用串口调试助手打开串口发送一次数据,再打开本程序,这次打开串口和发送数据都非常正确(=.=!)
当发送数据正确时关闭串口,串口换个设备后再往串口发送数据,此时又不能发送,又要再打开串口调试助手又发一次(= =!),然后回到本程序又发送正确
不知道是不是串口的哪里设不好,希望不吝赐教,谢谢.
解决方法:此类写得不完美的,当我们调用了open()函数后,setBaudRate(), setFlowControl() , setParity();setDataBits(),setStopBits()并没有实际做动作,只是设好了值并没有将其值用到串口的初始化中(给它忽悠了),所以我们要做的修改就是要将这些值设到初始化中,具体用到的函数:SetCommTimeouts();SetCommMask();GetCommState();BuildCommDCBA();SetCommState()。祝大家好运![ 此帖被sikylori在2010-04-07 17:44重新编辑 ]