待办
- 补充uart口的驱动配置
准备
简介
QT的串口应用记录(基于android8.1固件的nano3288平台)硬件连接
串口接口主要是用到Debug、Uart和USB三种:
Debug
Uart1、Uart3、Uart4
USB1、USB2、USB4、USB5
底层驱动
使用android8.1固件,默认只有ttyS3(Uart3)可以用,所以想用其他Uart口,就需要修改底层驱动配置
QT应用
QT官方参考: Qt Serial Port 5.15.10
1.查看串口号对应的驱动号
运行cmd,输入adb shell进入rk3288终端控制台,再输入ls dev查看所有以及挂载的驱动
Uart0-Uart4对应的驱动就是ttyS0-ttyS4
USB对应的驱动就是ttyUSB*
2.串口初始化驱动
在.pro项目文件里添加串口模块:
QT += serialport
在用到的文件里添加include
#include <QSerialPort>#include <QSerialPortInfo>
设置相应的驱动号和设置波特率
m_serialPort = new QSerialPort();if(m_serialPort->isOpen())//如果串口已经打开了 先给他关闭了{m_serialPort->clear();m_serialPort->close();}m_serialPort->setPortName("ttyS3");//选择串口名字if(!m_serialPort->open(QIODevice::ReadWrite))//用ReadWrite 的模式尝试打开串口{qDebug()<<"打开失败!";return;}qDebug()<<"串口打开成功!";m_serialPort->setBaudRate(QSerialPort::Baud19200,QSerialPort::AllDirections);//设置波特率和读写方向m_serialPort->setDataBits(QSerialPort::Data8);//数据位为8位m_serialPort->setFlowControl(QSerialPort::NoFlowControl);//无流控制m_serialPort->setParity(QSerialPort::NoParity); //无校验位m_serialPort->setStopBits(QSerialPort::OneStop); //一位停止位
3.串口数据收发处理
RX接收信号初始化
timer = new QTimer();connect(timer, SIGNAL(timeout()), this, SLOT(timerStop()));connect(m_serialPort,SIGNAL(readyRead()),this,SLOT(receiveInfo()));
RX接收处理函数(加了帧超时处理)
void modbus_master::timerStop(void){timer->stop();QByteArray info;info.clear();info = m_serialPort->readAll();qDebug()<<info;}//超时为1帧void modbus_master::receiveInfo(){timer->start(30);qDebug()<<"info";}
TX发送
void modbus_master::write(QByteArray data){if(m_serialPort->isOpen()){m_serialPort->write(data);}}


