环境: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 摘要: 数据发送(16进制) 数据解析(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传感器数据采集
免责声明:文章内容来自互联网,本站不对其真实性负责,也不承担任何法律责任,如有侵权等情况,请与本站联系删除。
转载请注明出处:【海思HI3520之QT开发】-串口通讯实战(五):485传感器数据采集 https://www.yhzz.com.cn/a/17265.html