![]()
1)打开工程目录下的"Exe\GUISimulationDebugexe"即可看到效果。(2)看完教程000~005就基本会用emWin做项目,其他章节可以需要时再参考。
(1)使用GUIBuilder V530创建如下页面并保存为C文件FramewinDLGc,然后添加到脱机模拟仿真平台CodeBlocks的emwin工程:
(2)用BmpCvtexe(可在”软件/资料下载”栏目下载)将48×48的图标PNG文件转成C文件并添加到CodeBlocks工程:
(3)在生成的FramewinDLGc文件中需要更改图标的大小为64×64:
(4)在WM_INIT_DIALOG消息中(窗口初始化时程序跑到这里)添加ICONVIEW控件的初始化代码:
hItem = WM_GetDialogItem(pMsg->hWin, ID_ICONVIEW_0);
ICONVIEW_SetIconAlign(hItem, ICONVIEW_IA_TOP);
ICONVIEW_SetTextColor(hItem, ICONVIEW_CI_UNSEL, GUI_BLUE);
ICONVIEW_SetTextColor(hItem, ICONVIEW_CI_SEL, GUI_GREEN);
ICONVIEW_SetFrame(hItem, GUI_COORD_X, 0);//设置图标到IconView边框的间距
ICONVIEW_SetFrame(hItem, GUI_COORD_Y, 0);
ICONVIEW_SetSpace(hItem, GUI_COORD_X, (280-644)/3);//设置图标和图标之间的间距
ICONVIEW_SetSpace(hItem, GUI_COORD_Y, (140-642)/1);
ICONVIEW_SetFont(hItem, GUI_FONT_16_1);
ICONVIEW_AddBitmapItem(hItem, &bm01, "neqee");//添加图标项
ICONVIEW_AddBitmapItem(hItem, &bm02, "SOS");
ICONVIEW_AddBitmapItem(hItem, &bm03, "Phone");
ICONVIEW_AddBitmapItem(hItem, &bm04, "Camera");
ICONVIEW_AddBitmapItem(hItem, &bm05, "Email");
ICONVIEW_AddBitmapItem(hItem, &bm06, "NoteBook");
ICONVIEW_AddBitmapItem(hItem, &bm07, "JTV");
ICONVIEW_AddBitmapItem(hItem, &bm08, "Dollar");
(5) WM_NOTIFY_PARENT消息中( *** 作屏幕时程序跑到这里)添加点击提示程序:
switch(ICONVIEW_GetSel(WM_GetDialogItem(pMsg->hWin, ID_ICONVIEW_0)))
{
case 0: TEXT_SetText(WM_GetDialogItem(pMsg->hWin, ID_TEXT_0), "neqee"); break;
case 1: TEXT_SetText(WM_GetDialogItem(pMsg->hWin, ID_TEXT_0), "SOS"); break;
case 2: TEXT_SetText(WM_GetDialogItem(pMsg->hWin, ID_TEXT_0), "Phone"); break;
case 3: TEXT_SetText(WM_GetDialogItem(pMsg->hWin, ID_TEXT_0), "Camera"); break;
case 4: TEXT_SetText(WM_GetDialogItem(pMsg->hWin, ID_TEXT_0), "Email"); break;
case 5: TEXT_SetText(WM_GetDialogItem(pMsg->hWin, ID_TEXT_0), "NoteBook"); break;
case 6: TEXT_SetText(WM_GetDialogItem(pMsg->hWin, ID_TEXT_0), "JTV"); break;
case 7: TEXT_SetText(WM_GetDialogItem(pMsg->hWin, ID_TEXT_0), "Dollar"); break;
//case 8: TEXT_SetText(WM_GetDialogItem(pMsg->hWin, ID_TEXT_0), "Jobbet"); break;
}
(6)编译运行:
题主是否想询问“正点原子亮红灯执行不了程序的原因有哪些”?程序烧录错误,硬件连接问题。
1、程序烧录错误:烧录程序时出现错误或者程序存在问题,导致单片机无法正常执行程序,从而亮起红灯。
2、硬件连接问题:是硬件连接有问题,例如电源供电不足、单片机与外设连接不良等,会导致单片机无法正常执行程序,亮起红灯。
ui
门牙会稍息
原创
关注
3点赞·53人阅读
前言:
最近在学习嵌入式qt开发,然后跟着教程编写了一个简单的串口上位机程序,在编写的时候还算比较顺利,但在调试的时候花了点功夫,折腾了一下午。最后还是理清了思路,解决了问题,特写此博客进行记录和总结。
串口上位机界面设计:
整个软件的界面我都是用ui来设计的,其实也可以用代码,但是想了想有好多布局相互嵌套比较麻烦。最后就使用了ui界面来设计。
ui界面设计
串口上位机程序功能设计:
然后像串口对象初始化,槽函数,一些逻辑关系都用代码来实现,头文件就只有一些变量、槽的定义。
头文件
#include "widgeth"
#include "ui_widgeth"
#include <QMessageBox>
Widget::Widget(QWidget parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//lcd屏的分辨率是1024X600
this->setFixedSize(QSize(1024, 600));
//new 一个QSerialPort对象
serialPort = new QSerialPort(this);
//通过foreach语句将windows或imx6ull可用串口识别出来,并添加至对应的下拉选择框
QStringList serialList;
foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts()){
serialList += infoportName();
}
ui->comboBox->addItems(serialList);
//设置串口的信号与槽
connect(serialPort, SIGNAL(readyRead()), this, SLOT(readData()));
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_radioButton_clicked(bool checked)
{
//点击“打卡串口”button之后的一些串口配置 *** 作,和一些逻辑关系
if(checked){
//设置串口端
serialPort->setPortName(ui->comboBox->currentText());
//设置波特率
serialPort->setBaudRate(ui->comboBox_2->currentText()toInt());
//设置停止位
serialPort->setStopBits(QSerialPort::StopBits(ui->comboBox_4->currentText()toInt()));
//设置数据位
serialPort->setDataBits(QSerialPort::DataBits(ui->comboBox_6->currentText()toInt()));
//设置校验位
switch(ui->comboBox_5->currentIndex()){
case 0:
serialPort->setParity(QSerialPort::Parity::NoParity);
break;
case 1:
serialPort->setParity(QSerialPort::Parity::EvenParity);
break;
case 2:
serialPort->setParity(QSerialPort::Parity::OddParity);
break;
case 3:
serialPort->setParity(QSerialPort::Parity::SpaceParity);
break;
case 4:
serialPort->setParity(QSerialPort::Parity::MarkParity);
break;
default:
break;
}
serialPort->setFlowControl(QSerialPort::NoFlowControl);
if(!serialPort->open(QSerialPort::ReadWrite)){
QMessageBox::about(this, "串口打开错误提示", "可能被占用了");
return;
}
//打开串口之后其他的选择按钮设置成不可用
ui->comboBox->setEnabled(false);
ui->comboBox_2->setEnabled(false);
ui->comboBox_4->setEnabled(false);
ui->comboBox_5->setEnabled(false);
ui->comboBox_6->setEnabled(false);
ui->radioButton->setText("关闭串口");
}
else{
serialPort->close();
ui->comboBox->setEnabled(true);
ui->comboBox_2->setEnabled(true);
ui->comboBox_4->setEnabled(true);
ui->comboBox_5->setEnabled(true);
ui->comboBox_6->setEnabled(true);
ui->radioButton->setText("打开串口");
}
}
void Widget::readData()
{
//将串口中的数据打印到textBrowser中
ui->textBrowser->insertPlainText(serialPort->readAll());
}
void Widget::on_pushButton_clicked()
{
//点击“发送”button之后,将textEdit中的内容写入串口
serialPort->write(ui->textEdit->toPlainText()toUtf8());
}
void Widget::on_pushButton_2_clicked()
{
//清屏 *** 作
ui->textEdit->clear();
ui->textBrowser->clear();
}
登录后复制
在windows端编写好程序之后,将工程文件发送到ubuntu进行qmake、make最后通过scp将ARM的可执行文件发送到开发板,接下来就是验证了
我用的是正点原子出厂的系统,所以在验证的时候需要使用到一个串口来连接到开发板执行编写好的上位机程序,所以一个串口就被占用了,正点原子教程视频就用开发板的另一个串口来进行测试
正点原子教程测试方式
因为放假回了家,我也没有带太多的东西,usb转ttl模块放在了学校。所以我在想怎么就用一个串口来完成实验。困扰我的就是唯一的一个串口必须留个上位机,然后要怎么执行开发板上的串口上位机程序?最初我想到了可以使用网络通过Xshell远程连接到开发板就可以执行,唯一的串口就拿来验证。
解决完上位机软件怎么在imx6ull上执行的问题,接下来就是验证了。验证的时候又出现了一些问题,上位机软件不像想象的那样一边发数据,一边就接收对应的数据,而出现了一些imx6ull的信息,好像还可以输入命令,感到非常奇怪。
我以为我的软件有问题,就在windows上换了一个串口软件,结果还是出现了类似的情况
最后也是在不断猜想和测试之后找到了原因,就是应因为我在给开发板上电的时候接入了串口线,然后先打开了windows上的串口,然后就使用到了串口,导致就相当于有一个串口控制imx6ull开发板,像Xshell中通过串口连接开发板一样。然后我尝试在windows的上位机软件输入命令想打开一个qt程序,最后也是成功打开证实了猜想
执行/list命令打开了蛇姐list程序(qt程序的路径是/home/root/qt_project/list)
如果想要实现实验最初windows和imx6ull两个上位机互换数据的效果的话。要先通过windows中的上位机软件输入命令来打开imx6ull的上位机软件,这样相当于windows中的上位机连接的就是imx6ull的上位机了,而不是直接控制imx6ull了,之后就可以正常收发数据了。
总结:
学了qt快半个月了,这个串口上位机算是一个比较综合的练习了,结合了ui和代码设计。加上最后的调试也是收获颇多,如果有usb-ttl模块的话验证步骤就会更简单。
以上就是关于正点原子 stm32 emwin iconview 怎么用全部的内容,包括:正点原子 stm32 emwin iconview 怎么用、正点原子亮红灯执行不了程序、正点原子linux开发板怎么调试等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)