1.界面布局
界面的简单设置,用到了
1.输入显示栏
2.数据发送栏
3.选择栏
4.16进制显示栏
和若干pushbottom label,布局就是横竖横竖这样布局下去
对界面进行基础的对齐美化
1.右侧布局的对齐
添加设置代码
右上选项已对齐
有个校验位一开始忘记添加了,添加在数据位下面就行
(教程中通过设置水平布局的拉伸比再拉长来达到对齐的效果)
2.设置显示框和发送框的拉伸比例为2比1
3.调整发送按键大小和位置
设置
宽度略比右上选项稍微短一点,拉伸时高度最大和宽度一样
左右两个宽度固定的弹簧
4.设置widget的大小和名称
为了显示更多串口消息再调整下串口选择一栏
右键布局,改为垂直布局
设置label垂直策略为fixed或者max
想适配任意波特率可以将combo box的editable打开
最后设置一下名称
最终效果
1.初始
2.拉伸
2.程序编写
1.pro添加支持
2.添加头文件
添加串口类QSerialPort和读取串口信息的类QSerialPortInfo
3.设置下拉栏选项
帮助搜索QSerialPort,下拉
可以看到几个枚举,几个重要的
波特率baudrate
数据位databits
停止位stopbits
校验位parity
双击这几个combo box添加选项,注意串口选择是不能用这个的
4.设置串口选择按钮
查看serialportinfo的说明
看返回值可以猜到这个就是读取串口列表的函数
(有时候无从下手时可以看下ui文件里是怎么写的)
在初始化下面添加初始化读取串口的代码
添加一个刷新按钮用于刷新串口列表
刷新按钮的click槽函数,清除然后重新读取(本来想设计成点击按钮就会刷新的,比较麻烦就用刷新按钮了)
5.添加串口对象和打开串口按钮
.h文件添加对象指针
初始化函数中添加
查看帮助的细节描述
也可以看到info相关的内容
使用重载过的open打开,close关闭,各种set设置参数
加载串口使用这两个中的一个
转到连接串口的按键槽函数
值得一提的是可以直接使用我们info获取的串口名称,就算输入了错误的名称那么将在open()那一步报错
下面给出按钮的clicked代码
void Widget::on_pushButton_clicked(bool checked)
{
if(checked)
{
serialPort->setPortName(ui->comboBox->currentText());
if(serialPort->open(QIODevice::ReadWrite))//以读写打开,打开错误则打印
{
serialPort->setBaudRate(ui->comboBox_2->currentText().toUInt());
serialPort->setDataBits(QSerialPort::DataBits(ui->comboBox_4->currentText().toUInt()));
serialPort->setStopBits(QSerialPort::StopBits(ui->comboBox_3->currentText().toUInt()));
switch(ui->comboBox_5->currentIndex())//校验位为文字,所以只能使用switch对应
{
case 0:
serialPort->setParity(QSerialPort::NoParity);
break;
case 1:
serialPort->setParity(QSerialPort::EvenParity);
break;
case 2:
serialPort->setParity(QSerialPort::OddParity);
break;
default:
break;
}
//设置为无流控(硬件相关)
serialPort->setFlowControl(QSerialPort::NoFlowControl);
ui->pushButton->setText("关闭串口");
}
else
{
ui->textBrowser->append("串口连接错误\n");
return;
}
}
else
{
serialPort->close();
ui->pushButton->setText("打开串口");
}
}
记得勾选打开串口的可选项这样checked才有效果
6.添加接收数据函数
跟TCP UDP一样,串口也有个readyRead()信号
那么就可以同TCP UDP一样设计
添加槽函数
连接信号和槽
7.编写发送按钮槽函数
其他的一些简单功能不再编写了
3.交叉编译和运行
添加交叉编译器
查看编译器环境
进入项目文件夹并执行交叉编译
移动到u盘
插入usb执行
其实可以直接使用连接命令行的ttymxc0,打开串口后只是抢占掉了原来的命令界面,而且继续MobaXterm会导致你输入一个就立刻发送到开发板的接收框,不再在MobaXterm上面显示了,换一个一般的串口工具进行连接就行了
ps:可能出现接收数据不完整或者变成分段的问题,正在查找原因