待办

  • 补充uart口的驱动配置

    准备

    简介

    QT的串口应用记录(基于android8.1固件的nano3288平台)

    硬件连接

    串口接口主要是用到Debug、Uart和USB三种:
    Debug
    Uart1、Uart3、Uart4
    USB1、USB2、USB4、USB5

image.png
image.png
image.png

底层驱动

使用android8.1固件,默认只有ttyS3(Uart3)可以用,所以想用其他Uart口,就需要修改底层驱动配置

QT应用

QT官方参考: Qt Serial Port 5.15.10

1.查看串口号对应的驱动号

运行cmd,输入adb shell进入rk3288终端控制台,再输入ls dev查看所有以及挂载的驱动
image.png
Uart0-Uart4对应的驱动就是ttyS0-ttyS4
USB对应的驱动就是ttyUSB*

2.串口初始化驱动

在.pro项目文件里添加串口模块:

  1. QT += serialport

在用到的文件里添加include

  1. #include <QSerialPort>
  2. #include <QSerialPortInfo>

设置相应的驱动号和设置波特率

  1. m_serialPort = new QSerialPort();
  2. if(m_serialPort->isOpen())//如果串口已经打开了 先给他关闭了
  3. {
  4. m_serialPort->clear();
  5. m_serialPort->close();
  6. }
  7. m_serialPort->setPortName("ttyS3");//选择串口名字
  8. if(!m_serialPort->open(QIODevice::ReadWrite))//用ReadWrite 的模式尝试打开串口
  9. {
  10. qDebug()<<"打开失败!";
  11. return;
  12. }
  13. qDebug()<<"串口打开成功!";
  14. m_serialPort->setBaudRate(QSerialPort::Baud19200,QSerialPort::AllDirections);//设置波特率和读写方向
  15. m_serialPort->setDataBits(QSerialPort::Data8);//数据位为8位
  16. m_serialPort->setFlowControl(QSerialPort::NoFlowControl);//无流控制
  17. m_serialPort->setParity(QSerialPort::NoParity); //无校验位
  18. m_serialPort->setStopBits(QSerialPort::OneStop); //一位停止位

3.串口数据收发处理

RX接收信号初始化

  1. timer = new QTimer();
  2. connect(timer, SIGNAL(timeout()), this, SLOT(timerStop()));
  3. connect(m_serialPort,SIGNAL(readyRead()),this,SLOT(receiveInfo()));

RX接收处理函数(加了帧超时处理)

  1. void modbus_master::timerStop(void)
  2. {
  3. timer->stop();
  4. QByteArray info;
  5. info.clear();
  6. info = m_serialPort->readAll();
  7. qDebug()<<info;
  8. }
  9. //超时为1帧
  10. void modbus_master::receiveInfo()
  11. {
  12. timer->start(30);
  13. qDebug()<<"info";
  14. }

TX发送

  1. void modbus_master::write(QByteArray data)
  2. {
  3. if(m_serialPort->isOpen())
  4. {
  5. m_serialPort->write(data);
  6. }
  7. }