• 8841阅读
  • 9回复

串口问题, 急~~~~(已解决) [复制链接]

上一主题 下一主题
离线sikylori
 

只看楼主 倒序阅读 楼主  发表于: 2009-07-07
本人用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重新编辑 ]
离线sikylori

只看该作者 1楼 发表于: 2009-07-07
是啊,我在网上下了几个串口程序都发现有这个问题,汗
离线kid0220
只看该作者 2楼 发表于: 2009-07-14
楼主,我的问题跟你非常相似,对串口进行了如下设置:
        serialPort1.PortName = "COM1";
                serialPort1.BaudRate = 115200;
                serialPort1.DataBits = 8;
                serialPort1.StopBits = StopBits.Two;
                serialPort1.ReadBufferSize = 1024;
                serialPort1.WriteBufferSize = 1024;
然后在使用Write函数的时候,串口调试程序方接收不到数据。使用串口调试程序向我的应用程序发送一次数据后,我再向其发送数据就正常了。不知道是哪里不对,楼主你这个问题解决了的话说一声啊,非常感谢!
离线fcymk2

只看该作者 3楼 发表于: 2009-07-20
怀疑是新版的 qextserialport 1.2有问题 我编译自带的demo也有这个问题(收不到数据) 用SecureCRT 正确收发一次 再换回来就可以了.

用旧版的 1.1 就正常了
离线coyote
只看该作者 4楼 发表于: 2009-07-21
linux下?
linux下的话是ttySAC0或ttyS0吧
离线y383564500
只看该作者 5楼 发表于: 2009-08-03
我也遇到这个问题,开机后需用串口调试软件开下,不然就一直就收错误
离线b_2008
只看该作者 6楼 发表于: 2009-08-18
问题在于现在要求先打开串口,然后设置才行,在打开串口前所有设置都市不允许的
离线jpchen609
只看该作者 7楼 发表于: 2009-10-05
能加我为好友吗 QQ512038218 qt for s60 急啊
我喜欢,我个性
离线kofpk
只看该作者 8楼 发表于: 2009-10-21
我也有同样的问题
离线davis45
只看该作者 9楼 发表于: 2010-12-21
这个问题目前也困扰我了,以前怎么从来没遇到过这问题。。。
我看源文件中写的SetCommConfig(); 不是已经使用WINAPI配置过了串口的配置数据了吗?
在每个构造函数里都设置Win_Handle=INVALID_HANDLE_VALUE;
在open函数中判断if (Win_Handle!=INVALID_HANDLE_VALUE)就显得好像跟多余一样
谢谢大家的指教
快速回复
限100 字节
 
上一个 下一个