待办
- 补充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);
}
}