【海思HI3520之QT开发】-串口通讯实战(二):串口通讯之TTL通讯

MacianYuan 2020-08-11 18:51:18 4230
  • 环境: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第三方库

https://github.com/qextserialport/qextserialport

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

  1. 泰斗参数配置
  2. 解决Qt串口通信接收数据不完整的两种方法
声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
红包 4 5 评论 打赏
评论
4个
内容存在敏感词
手气红包
  • Abner 2020-08-22 22:45:40
    回复

    66666666666666666666666666666666666666666666666666666

  • 哗啦啦~ 2020-08-14 20:16:15
    回复

    顶顶顶顶

  • 来自远方 2020-08-14 19:56:30
    回复

    66666

  • 像风一样 2020-08-12 14:33:45
    回复

    666666666666666666666666666666

相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
MacianYuan
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区