【海思HI3520之QT开发】-串口通讯实战(五):485传感器数据采集

MacianYuan 2020-08-15 17:29:07 4209
  • 环境:Ubuntu 12.04-64bit
  • 硬件平台:Hi3520D_V100
  • 内核版本:linux-3.0.y
  • Qt版本:qt4.8.6
  • 编译器:arm-hisiv100nptl-linux-gcc
  • 作者:MacianYuan
  • 原文链接:https://www.ebaina.com/articles/140000004248
  • 摘要:
    1. 数据发送(16进制)
    2. 数据解析(16进制)
第一节 数据发送(16进制)

在嵌入式Qt中,经常会在通讯中直接发送和接收16进制的数据,Qt中发送16进制的方法有很多种形式去实现,下面是比较简单的一种实现形式,提供参考:

int SensorAnalysis::get_device_number()
{
     //把需要发送的16进制保存在字节数组中
    QByteArray senddata ;
    senddata[0]=0xff;
    senddata[1]=0xff;
    senddata[2]=0xff;
    senddata[3]=0x55;
    senddata[4]=0x01;
    senddata[5]=0x36;
    senddata[6]=0x00;
    senddata[7]=0xff;
    senddata[8]=0xff;
    senddata[9]=0xff;
    //设置485芯片为发送模式
    HI_MPI_SYS_SetReg(0x200F004C,0);
    HI_MPI_SYS_SetReg(0x201A0400,1);
    HI_MPI_SYS_SetReg(0x201A0004,1);
    //把数据通过串口发送函数 发送出去
    WriteCom(Device_public::sensor_port,senddata);
    //短暂的延时处理
    QElapsedTimer t;
    t.start();
    while(t.elapsed()<20);
    //把485芯片设置为接收模式
    HI_MPI_SYS_SetReg(0x200F004C,0);
    HI_MPI_SYS_SetReg(0x201A0400,1);
    HI_MPI_SYS_SetReg(0x201A0004,0);

    return 0;
}
//串口发送函数
int SensorAnalysis::WriteCom(QextSerialPort *write_com, QByteArray data)
{
    if(write_com == 0  || !write_com->isOpen()){
        qDebug() << "The write_com Open Failed!";
        return -1;
    }
    if(write_com->write(data) <= 0){
        //QMessageBox::information(0,tr("错误"),tr("通讯中断"),QMessageBox::Ok);
        write_com->close();
        return -1;
    }
    return 0;
}
第二节 接收数据(16进制)

与普通串口相同的读函数,在完成定时接收整个数据包之后接收的数据通过toHex(),可直接将接收的字符数组转换为16进制的字节数组,通过at()定位到相应数据进行解析。

//读数据 对数据进行解析,定时100ms的数据
void SensorAnalysis::ReadCom()
{
    //开始接受下面100ms的数据
    timer->start();
    baRcvData.append(Device_public::sensor_port->readAll());
}

//读数据 对数据进行解析
void SensorAnalysis::on_timeout()
{
    QByteArray array;
    qDebug()<<"baRcvData timer->stop";
    timer->stop();
    qDebug()<<"baRcvData.length()"<<baRcvData.length();
    if(baRcvData.length()!=0)
    {
        qDebug()<<baRcvData.toHex().at(0);
        qDebug()<<baRcvData.toHex().at(2);
        qDebug()<<baRcvData.toHex().at(4);
    }
    baRcvData.clear();
}
串口通信遇到问题解决方法:

在初学嵌入式Qt的使用中,多会遇到一些比较简单但是因为在windows环境下不会出现的问题,可以通过下面链接找到方法。

1、在文件系统/dev/中查找不到串口设备文件

【海思HI3520之QT开发】-串口通讯实战(一):UART加载到内核

2、QT5中,串口通信是借助一个QSerialPort的对象来实现的,在Qt4中我们通常借助qextserialport第三方库实现

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

3、串口通信数据接收不完整的解决方法

【海思HI3520之QT开发】-串口通讯实战(三):泰斗N303-3数据采集

4、Qt中访问内存地址或寄存器地址,操作GPIO的方法

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

5、Qt关于16进制数据收发方法

【海思HI3520之QT开发】-串口通讯实战(五):485传感器数据采集

声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
红包 3 4 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
MacianYuan
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

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

举报反馈

举报类型

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

详细说明

审核成功

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

审核失败

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

小包子的红包

恭喜发财,大吉大利

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

    易百纳技术社区