Qt写串口通讯软件,开始乱码,打开串口调试助手后又能正常接收
2013-05-10 16:05
411 查看
我用的是Win_QextSerialPort串口类,写串口通讯软件。我的串口设置语句:
写完后发现收到的数据时错误的,但是打开别人的串口调试助手后,再打开自己的软件,发现又可以接收了。
之所以会这样是因为串口的波特率,停止位等串口信息没有设置成功。
虽然这三句话表面上已经设置好了波特率等信息,但其实并非如此,
我们可以进入构造函数看是否已经设置好了串口信息,进入如下构造函数:
函数实现:
再进入setBaudRate(settings.BaudRate)设置波特率的函数中,仔细查看函数,不难发现,
波特率的设置都是在一个如下的判定语句中
由此可知如果串口没有打开,所有的串口设置都是无效的,所以串口信息的设置都应该在
myCom ->open(QIODevice::ReadWrite)后面
所以才会有打开别人的串口程序后,自己的程序可以使用,因为那时串口已经设置好了。
所以最后将串口程序设置如下:
最后要谢谢“qt/linux/meego软件开发”qq群中【广州】A~zrael 与 【青岛】大象 两位的指点
struct PortSettings myComSetting = {BAUD9600,DATA_8,PAR_NONE,STOP_1,FLOW_OFF,500}; //定义一个结构体,用来存放串口各个参数 myCom = new Win_QextSerialPort("com1",myComSetting,QextSerialBase::EventDriven); //定义串口对象,并传递参数,在构造函数里对其进行初始化 myCom ->open(QIODevice::ReadWrite); //以可读写方式打开串口 connect(myCom,SIGNAL(readyRead()),this,SLOT(readMyCom()));//串口有数据时,进入readMyCom()函数
写完后发现收到的数据时错误的,但是打开别人的串口调试助手后,再打开自己的软件,发现又可以接收了。
之所以会这样是因为串口的波特率,停止位等串口信息没有设置成功。
虽然这三句话表面上已经设置好了波特率等信息,但其实并非如此,
我们可以进入构造函数看是否已经设置好了串口信息,进入如下构造函数:
Win_QextSerialPort(const QString & name, const PortSettings& settings, QextSerialBase::QueryMode mode = QextSerialBase::Polling);
函数实现:
Win_QextSerialPort(const QString & name, const PortSettings& settings, QextSerialBase::QueryMode mode){ Win_Handle=INVALID_HANDLE_VALUE; setPortName(name); setBaudRate(settings.BaudRate); setDataBits(settings.DataBits); setStopBits(settings.StopBits); setParity(settings.Parity); setFlowControl(settings.FlowControl); setTimeout(settings.Timeout_Millisec); setQueryMode(mode); init(); }
再进入setBaudRate(settings.BaudRate)设置波特率的函数中,仔细查看函数,不难发现,
波特率的设置都是在一个如下的判定语句中
if (isOpen()) { switch() { } }
由此可知如果串口没有打开,所有的串口设置都是无效的,所以串口信息的设置都应该在
myCom ->open(QIODevice::ReadWrite)后面
所以才会有打开别人的串口程序后,自己的程序可以使用,因为那时串口已经设置好了。
所以最后将串口程序设置如下:
myCom = new Win_QextSerialPort("com1",QextSerialBase::EventDriven); if(myCom->open(QIODevice::ReadWrite)) //打开串口 { myCom->setBaudRate(BAUD9600); //设置波特率 myCom->setDataBits(DATA_8); //设置数据位 myCom->setStopBits(STOP_1); //设置停止位 myCom->setParity(PAR_NONE); //设置校验位 myCom->setFlowControl(FLOW_OFF);//设置流控制 myCom->setTimeout(500); //设置超时时间 } connect(myCom,SIGNAL(readyRead()),this,SLOT(readMyCom()));
最后要谢谢“qt/linux/meego软件开发”qq群中【广州】A~zrael 与 【青岛】大象 两位的指点
相关文章推荐
- QT 串口通讯软件编写
- 使用虚拟串口软件和串口调试助手来测试串口通讯代码
- Android串口通讯,在线程里一直监听是否有消息发来,接收到消息到runOnUiThread处理跳转页面,页面跳转关闭之后,在发送消息尽然还会执行在打开页面?
- Qt从零开始制作串口调试助手-(第十章、串口接收数据处理)-Creator_Ly
- QT 串口通讯软件编写
- jpeg图片接收显示测试上位机[串口 网络 摄像头上位机软件 开源]
- Delphi:TComPort封装在DLL中,通讯时无法接收串口数据的解决办法
- JAVA之编码---->CSV在文本下是正常的,用EXCEL打开是乱码的问题
- Qt中串口16进制发送和接收数据
- 【工业串口和网络软件通讯平台(SuperIO)教程】一.通讯机制
- QT串口接收十六进制
- 做的一个C#串口发送和接收的小软件
- 先写一个串口通讯的程序作开始吧!
- 重定向top输出到文件后,用Vi打开乱码,用cat输出格式正常
- 串口驱动程序设计详解---串口打开、发送、接收(下)
- ubuntu下的“用vim打开中文乱码,用cat打开正常显示”的解决方法
- 【工业串口和网络软件通讯平台(SuperIO)教程】五.二次开发图形显示界面
- 串口程序接收数据一段时间后出现乱码
- qt串口十六进制发送和接收
- linux下QT的串口通讯小实例