网站首页
IC库存
IC展台
电子资讯
技术资料
PDF文档
我的博客
IC72论坛
登录
注册会员
发布信息
资料首页
最新产品
技术参数
电路图
设计应用
解决方案
代理商查询
IC替换
IC厂商
电子辞典
关键字:
技术文章
PDF资料
IC价格
电路图
代理商查询
IC替换
IC厂商
电子辞典
按技术分类
嵌入式系统/ARM技术
单片机
DSP
EDA/PLD
存储/缓存技术
系统管理器件
数据转换/信号处理
模拟技术
专用芯片技术
RF/高频技术
电源技术
传感技术
显示/光电技术
开关技术
滤波器
通信与网络
电测仪表
工控技术
PCB技术
接口/总线/驱动
分立元器件
智能卡技术
集成电路
基础知识
其它
最新新闻
安森美将主办一系列电源在线直
从存在检测到生命感应:英飞凌
同方科创与清华大学团委签订学
3A,4.5V-30V输入,
ameya360:国内电子元
PW4203 降压型1-3节
信息化工程合同执行中的造价调
Alphasense光离子检
防水连接器的主要性能优势有哪
5G电路板有什么特点,如何测
ANSVC无功补偿装置在江苏
存储芯片制造商面临量价齐跌
纳芯微40V车规级多通道半桥
涨姿势!常用的USB Typ
CEVA 推出业界首个用于5
康瑞连接器-浅谈新能源连接器
存储芯片持续降价:有SSD存
诺明光电高能效智慧模组化灯具
是德科技亮相 ECOC 20
英飞凌推出800V和950V
重磅!欧盟拟5650亿欧数字
最新新能源汽车规划!推荐具备
什么是电源开关,它们在哪里使
汽车连接器有哪些要求
达普首页
>
技术资料
>
电路图
itop4412开发板Qt串口编程-实现串口功能
1.编辑工程文件(后缀为 .pro 的文件)在 QT += core gui 后添加 serialport。
2.自动获取串口
使用 QSerialPortInfo:::availablePorts()获取当前串口,该函数返回容器类 Qlist
,用 Qt 定义的关键字 foreach 遍历容器 Qlist 里的串口信息,并将串口信息放到 QStringList 的类对象 serialNamePort,显示到 ui 的串口组件。
{
{
ui->setupUi(this);
QStringList serialNamePort;
//遍历:availablePorts()返回的串口信息
foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()){
serialNamePort << info.portName();
}
ui->serialCb->addItems(serialNamePort);
}
编译后点击串口选择框,会出现已经连接的串口。
3.打开串口功能和属性设置
步骤一:实例化串口类 QSerialPort 对象 serialPort,对串口的操作就是对 serialPort 对象的操作,调用QSerialPort 封装的成员变量(属性)和成员函数(功能)就能控制串口。
class Example : public QMainWindow
{
public:
.......... QSerialPort * serialPort;
.......... };
ui(new Ui::Example)
{
ui->setupUi(this);
......
serialPort = new QSerialPort;
...... }
步骤二:填充波特率,数据位,停止位,校验位等属性。获取 ui 组件传递过来的串口信息,将串口属性填充到 serialPort 对象。
步骤三:打开串口,判断是否打开成功。
/*打开按钮*/
void Example:
n_openCb_clicked()
{
QSerialPort::BaudRate bauRate; //波特率
QSerialPort:
ataBits dataBits; //数据位
QSerialPort::StopBits stopBits; //停止位
QSerialPort:
arity checkBits; //校验位
//设置波特率
if (ui->baudCb->currentText() == "4800" ) { bauRate = QSerialPort::Baud4800; }
else if(ui->baudCb->currentText() == "9600" ) { bauRate = QSerialPort::Baud9600; }
else if(ui->baudCb->currentText() == "115200") { bauRate = QSerialPort::Baud115200;}
//设置数据位
if (ui->dataCb->currentText() == "5") { dataBits = QSerialPort:
ata5;}
else if(ui->dataCb->currentText() == "6") { dataBits = QSerialPort:
ata6;}
else if(ui->dataCb->currentText() == "7") { dataBits = QSerialPort:
ata7;}
else if(ui->dataCb->currentText() == "8") { dataBits = QSerialPort:
ata8;}
//设置停止位
if (ui->stopCb->currentText() == "1" ) { stopBits = QSerialPort::OneStop; }
else if(ui->stopCb->currentText() == "1.5" ) { stopBits = QSerialPort::OneAndHalfStop; }
else if(ui->stopCb->currentText() == "2" ) { stopBits = QSerialPort::TwoStop; }
//设置校验位
if(ui->checkCb->currentText() == "none" ) { checkBits = QSerialPort::NoParity; }
//填充串口对象的属性值
serialPort->setPortName(ui->serialCb->currentText());
serialPort->setBaudRate(bauRate);
serialPort->setDataBits(dataBits);
serialPort->setStopBits(stopBits);
serialPort->setParity(checkBits);
//设置好属性后打开串口
if(serialPort->open(QIODevice::ReadWrite) == true){
QMessageBox::information(this,"提示","成功");
}else{
QMessageBox::critical(this,"提示","失败");
}
}
4.收发串口数据功能
读数据:每当数据流从串口到达系统一次,就会传到 Qt 应用程序一次,readyRead 信号就会触 发 一次,所以可以用前面章节讲的信号和槽机制将 readyRead 信号和槽函数绑定,然后就可以在槽函数中读取串口数据。槽函数中使用 readAll()读取数据,使用带换行功能的 appendPlainText()显示到 ui 的接收窗口。
//类中声明槽函数
private slots:
void serialPortReadyRead_Solt(void);
//readyRead 信号和槽函数绑定
connect(serialPort,SIGNAL(readyRead()),this,SLOT(serialPortReadyRead_Solt()));
//读串口
void Example::serialPortReadyRead_Solt(void)
{
QString buf;
buf = QString(serilaPort->readAll());
ui->recvEdit->appendPlainText(buf);
}
写数据:获取 ui 界面填写的信息,ui->sendEdit->text(),使用 QSerialPort 的成员函数 write 将数据写到
串口。
void Widget:
n_sendBt_clicked()
{
serilaPort->write(ui->sendEdit->text().toLocal8Bit().data());
}
5.关闭串口功能
使用 QSerialPort 的成员函数 close()关闭串口。
void Widget:
n_closeBt_clicked()
{
serilaPort->close();
}
6.清空发送栏数据
调用 ui 组件 lineEdit 的成员函数 clear 即可清空数据。
void Widget:
n_clearBt_clicked()
{
ui->recvEdit->clear();
}
编译测试,结果如图:
热门搜索:
1553DBPCB
TLP825
PDU12IEC
TLP604TEL
02M1001JF
PS240810
PS361220
02T1001JF
RBC11A
RS1215-20
SS361220
8300SB1
B30-7100-PCB
N060-004
2804623
UL24CB-15
SBB400
UL603CB-6
02M5000JF
ADC128S102CIMTX
TR-6FM
SBBSM2120-1
SS3612
N060-002
PS480806