串口通信

串口通信简介:

串口通信和文件读写类似,用usb链接的,需要处理是byte型的数据。

查看串口:右键我的电脑,属性,设备管理器:COM(如果有接串口就会显示这一栏,没有就不会显示)。

串口通信工具:Serial
Port Utility

必备材料:串口通信协议

流程:

1 查看可用串口的名字:

QStringList SerialPortControl::GetPortName(){

    QStringList names;

    foreach (QSerialPortInfo info, QSerialPortInfo::availablePorts()) {

        names.push_back(info.portName());

    }

    return names;

}

2 根据串口名字打开串口,并监听是否有数据过来



bool SerialPortControl::OpenPorts(QString main, QString sub,int32_t mainbaud,int32_t subbaud){

    if(main.size()==0||sub.size()==0){

       
return false;

    }

    if(m_mainport->isOpen()){

       
m_mainport->close();

    }

    if(m_subport->isOpen()){

       
m_subport->close();

    }

 

    m_mainport->setPortName(main);

    if(!m_mainport->open(QIODevice::ReadWrite)){

       
qDebug()<<"cannot open main port";

       
return false;

    }

    qDebug()<<"open main port";

    m_mainport->setBaudRate(mainbaud);

    m_mainport->setDataBits(QSerialPort::Data8);      //数据位为8位

    m_mainport->setStopBits(QSerialPort::OneStop); //一位停止位

    connect(m_mainport,SIGNAL(readyRead()),this,SLOT(slot_main_receiveInfo()));

 

 

    m_subport->setPortName(sub);

    qDebug()<<sub;

    if(!m_subport->open(QIODevice::ReadWrite)){

       
qDebug()<<"cannot open sub port";

       
return false;

    }

    qDebug()<<"open sub port";

    m_subport->setBaudRate(subbaud);

    m_subport->setDataBits(QSerialPort::Data8);      //数据位为8位

    m_subport->setStopBits(QSerialPort::OneStop); //一位停止位

    connect(m_mainport,SIGNAL(readyRead()),this,SLOT(slot_sub_receiveInfo()));

    return true;

}

3 处理传来的数据



void SerialPortControl::slot_main_receiveInfo(){

    QByteArray buf = m_mainport->readAll();

 

    //qDebug()<<buf;

//get correct buf

//deal with buf

}

注:如何处理bytearry,建议使用char ch= buf[0],然后打印等,改变值等,自己玩儿一下,就会比较明白;

4 写数据



QByteArray buf;

    buf.resize(3);

    buf[0] = 0x5A;

    buf[1] = 0x01;

    buf[2] = buf[0]^buf[1];

    if(-1==m_mainport->write(buf)){

       
qDebug()<<"write failed";

}

注:写数据的时候,不要连续写,建议至少间隔100ms(可能更低,自己测试)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值