搜索
bottom↓
回复: 6

i.max283基于Qt5实现串口收发

[复制链接]

出0入0汤圆

发表于 2016-4-27 16:08:06 | 显示全部楼层 |阅读模式
最近将板子上的Qt版本升级到了Qt5,基于原生库实现了串口收发

1、对串口进行参数配置
2、打开了一个定时器,每3S发送一条命令
3、使用信号与槽机制,将收到的数据打印

//---------------mainwindow.cpp
  1. #define DefaultPortName "/dev/ttySP0"
  2. #define DefaultBaud     BAUD115200

  3. MainWindow::MainWindow(QObject *parent) : QObject(parent)
  4. {

  5. }

  6. MainWindow::~MainWindow()
  7. {
  8.     pMSerialPort->deleteLater();
  9.     delete(readMeterTimer);
  10. }

  11. void MainWindow::show(void)
  12. {
  13.     ////////////串口初始化
  14.     if(SerialPortInit())
  15.     {
  16.         qDebug() << "Open SerialPort OK";
  17.     }
  18.     else
  19.     {
  20.         qDebug() << "Open SerialPort Error";
  21.     }
  22.     ////////////定时器初始化
  23.     PollTimerInit();
  24. }

  25. bool MainWindow::SerialPortInit(void)
  26. {
  27.     pMSerialPort = new MSerialPort(DefaultPortName);

  28.     pMSerialPort->MSerialsetBaudRate(QSerialPort::Baud115200);
  29.     pMSerialPort->MSerialsetDataBits(QSerialPort::Data8);
  30.     pMSerialPort-> MSerialsetParity(QSerialPort::NoParity);
  31.     pMSerialPort->MSerialsetStopBits(QSerialPort::OneStop);

  32.     if(!pMSerialPort->MSerialPortOpen())
  33.     {
  34.         pMSerialPort->deleteLater();
  35.         pMSerialPort= NULL;
  36.         return false;
  37.     }
  38.     else
  39.     {
  40.         connect(pMSerialPort,SIGNAL(SignalRxTimeout()),this,SLOT(SlotSerialPortRx()));
  41.         return true;
  42.     }
  43. }

  44. void MainWindow::SerialPortClose()
  45. {
  46.     pMSerialPort->MSerialPortClose();
  47. }

  48. void MainWindow::SlotSerialPortRx(void)
  49. {
  50.     char rxBuf[256];
  51.     int rxBufLen = 0;

  52.     rxBufLen = pMSerialPort->MSerialPortRead(rxBuf,256);
  53.     qDebug() << "Receive Data " << rxBufLen;
  54.     SerialPortConsoleBufLen(rxBuf,rxBufLen);

  55. }

  56. quint64 MainWindow::SerialPortWrite(char *str)
  57. {
  58.     return pMSerialPort->MSerialPortWrite(str,strlen(str));
  59. }

  60. void MainWindow::SerialPortRead()
  61. {   

  62. }

  63. void MainWindow::SerialPortConsoleBufLen(char *buf,int buflen)
  64. {
  65.     QString strText="";
  66.     int i;

  67.     for(i=0;i<buflen;i++)
  68.     {
  69.         strText += QString("%1 ").arg(buf[i],2,16,QChar('0'));
  70.     }
  71.     strText = strText.toUpper();
  72.     qDebug() << strText;
  73. }

  74. void MainWindow::PollTimerInit(void)
  75. {
  76.     readMeterTimer = new QTimer();
  77.     readMeterTimer->start(3000);
  78.     connect(readMeterTimer,SIGNAL(timeout()),this,SLOT(SlotReadMeter()));
  79. }

  80. void MainWindow::SlotReadMeter(void)
  81. {
  82.     qDebug() << "Hello PC";
  83.     qDebug() << SerialPortWrite((char*)"Hello Pc");
  84. }
复制代码


//---------------mainwindow.h
  1. #include <QObject>
  2. #include <QDebug>
  3. #include <QTimer>
  4. #include "mserialport.h"

  5. class MainWindow : public QObject
  6. {
  7.     Q_OBJECT
  8. public:
  9.     explicit MainWindow(QObject *parent = 0);
  10.     ~MainWindow();
  11.     void show(void);

  12.     bool SerialPortInit(void);
  13.     void SerialPortOpen();
  14.     void SerialPortClose();
  15.     quint64 SerialPortWrite(char *str);
  16.     void SerialPortRead();
  17.     void SerialPortConsoleBufLen(char *buf,int buflen);

  18.     void PollTimerInit(void);
  19. private:
  20.     QTimer* readMeterTimer;
  21.     QTimer *pollTimer,*waitForAckTimer,*intervalTimer;
  22.     MSerialPort *pMSerialPort;
  23. signals:

  24. public slots:
  25.     void SlotSerialPortRx(void);
  26.     void SlotReadMeter(void);
  27. };
复制代码


工程文件见附件

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2016-5-14 14:29:23 | 显示全部楼层
用Qserialport或者QextSerialport写,会比较好移植

出0入0汤圆

 楼主| 发表于 2016-5-16 11:19:47 | 显示全部楼层
donglaile 发表于 2016-5-14 14:29
用Qserialport或者QextSerialport写,会比较好移植

底层就是用QSerialPort写的啊

出0入0汤圆

发表于 2016-5-17 16:35:38 | 显示全部楼层
我也写了一个简单的串口助手。

出0入0汤圆

发表于 2016-5-22 21:55:01 | 显示全部楼层
不错,正好我最近也买了IMX287,可以跟着一起学习

出0入0汤圆

发表于 2016-5-23 10:37:30 | 显示全部楼层
mark一下

出0入0汤圆

发表于 2016-9-3 09:35:24 | 显示全部楼层
新建qmake的时候提示如下,请问一下楼主知道如何解决吗?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-24 21:11

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表