首页专栏详情
打赏
【海思HI3520之QT开发】-串口通讯实战(二):串口通讯之TTL通讯
易百纳技术社区 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串口通信接收数据不完整的两种方法
打赏
共1人已赏
曾梦想仗剑天涯,后来项目太多没去。。。 关注我,用最小的篇幅分享实用的项目实战
评论
4个
内容存在敏感词
  • 易百纳技术社区

    666666666666666666666666666666

  • 易百纳技术社区
    贫穷,流下没钱的泪水。。。

    66666

  • 易百纳技术社区

    顶顶顶顶

  • 易百纳技术社区

    66666666666666666666666666666666666666666666666666666

相关专栏
打赏作者
易百纳技术社区
MacianYuan
您的支持将鼓励我继续创作!
打赏金额:
¥1 易百纳技术社区
¥5 易百纳技术社区
¥10 易百纳技术社区
¥50 易百纳技术社区
¥100 易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区 微信支付
易百纳技术社区
打赏成功!

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

审核成功

发布时间设置
发布时间:

审核失败

失败原因
备注
Loading...
易百纳技术社区
确定要删除此文章、专栏、评论吗?
确定
取消
易百纳技术社区
易百纳技术社区
在专栏模块发布专栏,可获得其他E友的打赏
易百纳技术社区
回答悬赏问答,被题主采纳后即可获得悬赏金
易百纳技术社区
在上传资料时,有价值的资料可设置为付费资源
易百纳技术社区
达到一定金额,收益即可提现~
收益也可用来充值ebc,下载资料、兑换礼品更容易
易百纳技术社区
活动规则
  • 1.周任务为周期性任务,每周周一00:00刷新,上周完成的任务不会累计到本周,本周需要从头开始任务,当前任务完成后才可以完成下一个任务
  • 2.发布的专栏与资料需要与平台的板块有相关性,禁止注水,专栏/资料任务以审核通过的篇数为准
  • 3.任务完成后,现金奖励直接打款到微信账户;EBC/收益将自动发放到个人账户,可前往“我的钱包”查看;其他奖励请联系客服兑换
  • 4.每周最后三个任务将会有以下奖品掉落:社区热卖开发板、小米音响、视频年度会员、京东卡、华为手机等等
易百纳技术社区
升级提醒
易百纳技术社区

恭喜您由入门

社区送出礼品一份

请填写您的收件地址,礼品将在3个工作日寄出

易百纳技术社区