【海思HI3520之QT开发】-串口通讯实战(二):串口通讯之TTL通讯
3929
MacianYuan 2020-08-11 18:51:18
  • 环境: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 评论 打赏
评论
3个
时间排序
内容存在敏感词
手气红包
    0 条记录 第 0 /
    相关专栏
    置顶时间设置
    结束时间
    删除原因
    • 广告/SPAM
    • 恶意灌水
    • 违规内容
    • 文不对题
    • 重复发帖
    打赏作者
    易百纳技术社区
    MacianYuan
    您的支持将鼓励我继续创作!
    打赏金额:
    ¥1 易百纳技术社区
    ¥5 易百纳技术社区
    ¥10 易百纳技术社区
    ¥50 易百纳技术社区
    ¥100 易百纳技术社区
    支付方式:
    微信支付
    支付宝支付
    易百纳技术社区 微信支付
    易百纳技术社区
    打赏成功!

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

    举报反馈

    举报类型

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

    详细说明

    审核成功

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

    审核失败

    失败原因
    备注
    Loading...
    易百纳技术社区
    确定要删除此文章、专栏、评论吗?
    确定
    取消
    易百纳技术社区
    每周任务
      去完成
      活动规则
      易百纳技术社区
      升级提醒
      升级

      恭喜您的社区称号由 升级为 “社区游民”

      同时为了感谢您对社区的支持,我们将送出xxx礼品一份, 记得领取哦~

      升级提醒
      易百纳技术社区

      惊喜礼包

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

      小包子的红包

      恭喜发财,大吉大利

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

        avatar