[STM32F7]

STM32例程+STM32F767 Nucleo之RT-GUI实验

[复制链接]
7417|23
手机看帖
扫描二维码
随时随地手机跟帖
lxyppc|  楼主 | 2017-10-10 11:46 | 显示全部楼层 |阅读模式
本帖最后由 lxyppc 于 2017-10-12 17:42 编辑

之前在这里挖了一个坑,《【NUCLEO-F767ZI评测】JPEG Codec及DMA2D功能畅想》,现在终于把这个坑填上了。

  • 硬件平台,之前网站搞活动送的STM32F767ZI Nucleo开发板,开发板官网连接
  • 开发工具,ST CubeMX、rtthread、rtgui、xtoolbox
  • 通过这个例程可以了解到:
  •           如何在ST的HAL框架下添加一个新的USB设备类
  •           如何将RT-Thread与CubeMX生成的代码整合起来
  •           如何使用和扩展RT-GUI的功能
  •           如何在Qt中调试RT-GUI程序
  •           如何去填各种坑
PC机和开发板上的可执行程序在下面下载,源代码在这里下载
bin.zip (5.74 MB)
lxyppc|  楼主 | 2017-10-10 11:51 | 显示全部楼层
占楼

使用特权

评论回复
lxyppc|  楼主 | 2017-10-10 11:51 | 显示全部楼层
占楼

使用特权

评论回复
g169321| | 2017-10-10 12:02 | 显示全部楼层
本帖最后由 g169321 于 2017-10-10 12:21 编辑

写了这么多, 楼主都没把事情说清楚。
是我太肤浅,还是太浮澡

楼主用   ST 官方  F7开发板   演示一个  USB HID 通信的   USB 摄像头 和 HID 控制设备 。

PC端 没有源代码 和开发环境的介绍。 是用 VC++的吧。

使用特权

评论回复
caijie001| | 2017-10-10 12:12 | 显示全部楼层
到时候我也申请个回来玩玩

使用特权

评论回复
aozima| | 2017-10-10 14:23 | 显示全部楼层
楼主真会玩

使用特权

评论回复
lxyppc|  楼主 | 2017-10-10 15:46 | 显示全部楼层
本帖最后由 lxyppc 于 2017-10-10 20:49 编辑
g169321 发表于 2017-10-10 12:02
写了这么多, 楼主都没把事情说清楚。
是我太肤浅,还是太浮澡


PC端用的是Qt开发环境,这个Qt程序很简单,就是读取摄像头的数据和发送鼠标键盘数据。摄像头数据读取用的是OpenCV库
鼠标键盘数据发送用的是QUsbHid库
打开摄像头的代码
void open_camera(void)
{
    QString cam_name = QString("Camera - %1").arg(mCapId);
    mCap = cvCreateCameraCapture(mCapId);
    if(!mCap){
        ...
    }
    setWindowTitle(cam_name);
}
在timer事件中读取摄像头数据并通过QLabel显示出来
void timerEvent(QTimerEvent* evt)
{
    if(mCap){
        IplImage* frame = cvQueryFrame(mCap);
        if(frame){
            QImage img((const uchar *)frame->imageData, frame->width, frame->height, QImage::Format_RGB888);
            if(myLabel){
                myLabel->setPixmap(QPixmap::fromImage(img.rgbSwapped()));
            }
        }
    }
}

打开自定义HID设备的代码
QList<QUsbHidInfo> list = QUsbHid::enumDevices(0x0483, 0x5740);
if(list.size()>0){
    mHid.setPath(list.at(0).path);
    mHid.open(QUsbHid::ReadWrite);
}else{
    info("Hid device not found!\r\nInput simulation not work!");
}
向HID设备发送数据的代码
void mouse_action(int x, int y, int btn, int is_down)
{
    control_t t;
    t.type = CT_MOUSE;
    t.data.mouse.x = x;
    t.data.mouse.y = y;
    t.data.mouse.button = btn;
    t.data.mouse.is_press = is_down;
    if(mHid.isOpen())
    mHid.writeData(0,QByteArray((char*)&t, sizeof(t)));
}
完整PC端程序代码在Github上



使用特权

评论回复
dsyq| | 2017-10-10 16:48 | 显示全部楼层
学习。

使用特权

评论回复
mmuuss586| | 2017-10-10 18:12 | 显示全部楼层

厉害

使用特权

评论回复
lanjackg2003| | 2017-10-10 18:31 | 显示全部楼层
mark

使用特权

评论回复
lzbf| | 2017-10-10 22:42 | 显示全部楼层
ucGUI一样吗?

使用特权

评论回复
lzbf| | 2017-10-10 22:45 | 显示全部楼层
执行的效率怎么样?能够显示汉字吗?

使用特权

评论回复
lxyppc|  楼主 | 2017-10-11 10:17 | 显示全部楼层
lzbf 发表于 2017-10-10 22:45
执行的效率怎么样?能够显示汉字吗?

可以显示汉字
在rtgui的代码目录中带有12x12和16x16的汉字字体
rtgui也可以添加新的字体文件
各种gui用起来都比较类似
针对自己屏幕提供基础的画图函数
再根据自己的硬件提供输入接口
gui系统就能工作起来了

使用特权

评论回复
gujiamao12345| | 2017-10-12 17:52 | 显示全部楼层
F7,羡慕...

使用特权

评论回复
Prry| | 2017-10-12 18:05 | 显示全部楼层
楼主双击陆陆陆

使用特权

评论回复
一路向北lm| | 2017-10-13 09:19 | 显示全部楼层
厉害,gui做的不错,学习了哈。

使用特权

评论回复
cailantu| | 2017-10-13 10:01 | 显示全部楼层
厉害!!!

使用特权

评论回复
Cresta| | 2017-10-13 10:08 | 显示全部楼层
LZ,RT-Thread马上推出新的GUI了,到时候可以看看。

另外可以整理下这篇**,投稿给RT-Thread公众号

使用特权

评论回复
liuchangyin| | 2017-10-13 10:09 | 显示全部楼层
效果不错

使用特权

评论回复
lxyppc|  楼主 | 2017-10-13 14:52 | 显示全部楼层
Cresta 发表于 2017-10-13 10:08
LZ,RT-Thread马上推出新的GUI了,到时候可以看看。

另外可以整理下这篇**,投稿给RT-Thread公众号 ...

目前在rt-thread的主线上没有看到widget相关的内容,猜测是rtgui部分在进行调整,所以主线上没有
这个例程上的widget我是从realboard上合并到主线上的为了便于在Qt下调试UI效果,我增加了一个生成Qt工程文件的scons工具
要投稿的话我还是等新UI出来之后在整合,目前的widget还是非官方的版本

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:代码发BBS不好看?你需要它 代码着色https://bbs.21ic.com/icview-135254-1-1.html

27

主题

2249

帖子

19

粉丝