技术专栏
【海思HI3520之QT开发】-串口通讯实战(二):串口通讯之TTL通讯
- 环境:Ubuntu 12.04-64bit
- 硬件平台:Hi3520D_V100
- 内核版本:linux-3.0.y
- Qt版本:qt4.8.6
- 编译器:arm-hisiv100nptl-linux-gcc
- 作者:MacianYuan
- 原文链接:https://www.ebaina.com/articles/140000004192
摘要:
1、借用qextserialport第三方库实现串口通讯
2、串口通讯两种初始化方式
3、读写函数
第一节:借用qextserialport第三方库实现串口通讯
一、Qextserialport相关资料链接
1、了解 qextserialport第三方库
- qextserialport 项目网址:
http://qextserialport.sourceforge.net/ - qextserialport 源码下载网址(1.1以下):
https://sourceforge.net/projects/qextserialport/files/ - qextserialport 项目源码新下载网址:
http://code.google.com/p/qextserialport/ (需要翻墙)
https://github.com/qextserialport/qextserialport
- qextserialport 项目源码论坛下载地址
https://www.ebaina.com/resources/240000028465
2、下载并学习源码
- 工程目录下 examples里有一些例程,可以参考学习,例如下图是一个可以应用于多平台的串口工具,有兴趣可以打开编译学习。
- 工程目录下 src里面是所有的源码,应用不同的平台下选择使用不同的cpp和头文件:
在Hi3520 平台才应选择下面几个文件即可
qextserialport.h
qextserialport_global.h
qextserialport_p.h
qextserialport.cpp
qextserialport_unix.cpp
第二节 串口通讯两种初始化方式
二、串口通讯类构造函数中初始化串口
在一个项目中
串口1与单片机通讯获取一些按键和其他外设的状态信息
串口2与GPS通讯获取GPS信息
下面把两种初始化方式贴出来供参考:
1、第一种方式
SerialCommunication::SerialCommunication(QObject *parent):
QObject(parent)
{
//串口初始化
Device_public::key_port = new QextSerialPort("/dev/ttyAMA2",QextSerialPort::EventDriven);
//注意:得要先打开串口,然后再设置串口的参数,不然设置无效!!!
int m_fd = Device_public::key_port->open(QIODevice::ReadWrite);
//定义串口对象,并传递参数,在构造函数里对其进行初始化
if(m_fd){
//Device_public::key_port->setDtr(true);
//Device_public::key_port->setRts(false);
//设置波特率
Device_public::key_port->setBaudRate(BAUD115200);
//设置数据位
Device_public::key_port->setDataBits(DATA_8);
//设置奇偶校验
Device_public::key_port->setParity(PAR_NONE);
//设置停止位
Device_public::key_port->setStopBits(STOP_1);
//设置数据流控制,我们使用无数据流的默认设置
Device_public::key_port->setFlowControl(FLOW_OFF);
//设置延时 --Modify 改小点
Device_public::key_port->setTimeout(10);
qDebug() <<"Device_public::myCom_open /dev/ttyAMA2 success!";
}else{
qDebug () << tr("open serial failed");
}
//有数据读取到,进入数据分析槽函数,分析出数据
connect(Device_public::key_port, SIGNAL(readyRead()), this, SLOT(ReadCom()));
}
2、第二种方式
GpsAnalysis::GpsAnalysis(QObject *parent) :
QObject(parent)
{
PortSettings settings = {BAUD9600, DATA_8, PAR_NONE, STOP_1, FLOW_OFF, 10};
Device_public::gps_port = new QextSerialPort("/dev/ttyAMA1", settings, QextSerialPort::EventDriven);
Device_public::gps_port->open(QIODevice::ReadWrite);
//有数据读取到,进入数据分析槽函数,分析出数据
connect(Device_public::gps_port, SIGNAL(readyRead()), this,SLOT(ReadCom()));
}
第三节 读写函数
三、读取函数
void SerialCommunication::ReadCom()
{
if (Device_pubilc::key_port->bytesAvailable() <= 0){
qDebug() << "read com = 0";
return ;
}
BufferData = Device_pubilc::key_port->readAll();
}
四、写发送函数
int SerialCommunication::WriteCom(QextSerialPort *write_com,QString str)
{
if (write_com == 0 || !write_com->isOpen()){
qDebug() << "The write_com Open Failed!";
return -1;
}
int type_num;
QByteArray array= str.toUtf8();
type_num = write_com->write(array);
if(type_num <= 0){
//QMessageBox::information(0,tr("错误"),tr("通讯中断"),QMessageBox::Ok);
write_com->close();
}
return 0;
}
在项目中会遇到串口通讯接收数据不完整,乱码等情况,下一篇会介绍两种方法解决此类问题:
【海思HI3520之QT开发】-串口通讯实战(三):泰斗N303-3数据采集
链接:https://www.ebaina.com/articles/140000004228
- 泰斗参数配置
- 解决Qt串口通信接收数据不完整的两种方法
声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
红包
4
5
评论
打赏
- 分享
- 举报
评论
4个
手气红包
相关专栏
-
浏览量:6528次2020-08-15 17:22:26
-
浏览量:2528次2020-08-14 15:09:41
-
浏览量:4950次2020-08-11 17:39:02
-
浏览量:4779次2020-08-15 17:29:07
-
浏览量:3814次2020-08-14 17:18:54
-
浏览量:10260次2021-01-12 20:00:35
-
浏览量:2373次2020-08-23 21:47:22
-
浏览量:10507次2020-08-30 00:41:53
-
浏览量:1426次2020-08-30 00:47:29
-
浏览量:2121次2020-08-17 19:49:28
-
浏览量:1459次2020-08-30 00:47:44
-
浏览量:4467次2020-07-31 13:45:09
-
浏览量:8655次2020-11-24 23:02:41
-
浏览量:7297次2020-08-14 23:09:45
-
浏览量:4947次2020-09-20 22:00:55
-
浏览量:1376次2023-11-04 15:07:11
-
浏览量:4220次2020-08-13 11:41:54
-
浏览量:3659次2020-07-28 10:49:06
-
浏览量:4446次2020-07-27 16:34:42
置顶时间设置
结束时间
删除原因
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
打赏作者
MacianYuan
您的支持将鼓励我继续创作!
打赏金额:
¥1
¥5
¥10
¥50
¥100
支付方式:
微信支付
打赏成功!
感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~
举报反馈
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明
审核成功
发布时间设置
发布时间:
请选择发布时间设置
是否关联周任务-专栏模块
审核失败
失败原因
请选择失败原因
备注
请输入备注
66666666666666666666666666666666666666666666666666666
顶顶顶顶
66666
666666666666666666666666666666