打印
[其他ST产品]

STM32F4使用FSMC驱动4.3寸触摸屏(HAL库+CubeMX)

[复制链接]
楼主: o88ne
手机看帖
扫描二维码
随时随地手机跟帖
41
o88ne|  楼主 | 2023-6-27 14:49 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
然后将“f407zgt6\GUI\lvgl\src”下的所有.c文件加入GUI/lvgl中(注意是所有!过程有点繁琐,可以用Ctrl+A全选加入),就是一个一个文件夹点开,看到.c就add就可以了:

使用特权

评论回复
42
o88ne|  楼主 | 2023-6-27 14:49 | 只看该作者
最终结果:

使用特权

评论回复
43
o88ne|  楼主 | 2023-6-27 14:49 | 只看该作者
然后再给GUI/lvgl_port加入“f407zgt6\GUI\lvgl_port”的3个.c文件:

使用特权

评论回复
44
o88ne|  楼主 | 2023-6-27 14:50 | 只看该作者
最后再将“f407zgt6\GUI\lv_conf.h”加入到User组,方便找到:

使用特权

评论回复
45
o88ne|  楼主 | 2023-6-27 14:51 | 只看该作者
然后进入魔术棒,修改头文件包含路径,主要是添加这3个:

使用特权

评论回复
46
o88ne|  楼主 | 2023-6-27 14:51 | 只看该作者
接下来开始修改代码。

首先打开lv_conf.h,将#if 0 改为#if 1,使能编译:

使用特权

评论回复
47
o88ne|  楼主 | 2023-6-27 14:51 | 只看该作者
然后这行的16表示RGB565(5bit作为R,6bit作为G,5bit作为B)格式,正好符合我用的屏幕,所以不需要修改:

使用特权

评论回复
48
o88ne|  楼主 | 2023-6-27 14:51 | 只看该作者
还有第52行,可以视情况设置内存,这里给的是48K:

使用特权

评论回复
49
o88ne|  楼主 | 2023-6-27 14:52 | 只看该作者
还有这几行,如果设置为1的话,到时候就会显示CPU运行以及显示帧率,这里没有打开:

使用特权

评论回复
50
o88ne|  楼主 | 2023-6-27 14:52 | 只看该作者
接下来打开lv_port_disp.c(这个就是显示接口文件),首先将#if 0改为1,使能编译;再将#include "lv_port_disp_template.h"改为#include "lv_port_disp.h"(因为之前给文件改过名了);接着再定义分辨率如下:

使用特权

评论回复
51
o88ne|  楼主 | 2023-6-27 14:52 | 只看该作者
这里我准备选择横屏,所以水平设置为800,垂直设置为480,如果想竖屏的话就换过来;接着打开lv_port_disp.h,将#if 0改为1:

使用特权

评论回复
52
o88ne|  楼主 | 2023-6-27 14:53 | 只看该作者
然后打开lv_port_indev.c(这个就是触摸接口文件),首先将#if 0改为1,使能编译;再将#include "lv_port_indev_template.h"改为#include "lv_port_indev.h"(因为之前给文件改过名了),最后再将#include "../../lvgl.h"改为#include "lvgl.h":

使用特权

评论回复
53
o88ne|  楼主 | 2023-6-27 14:53 | 只看该作者
接着打开lv_port_indev.h,将#if 0改为1:

使用特权

评论回复
54
o88ne|  楼主 | 2023-6-27 14:53 | 只看该作者
下面开始配置显示屏接口函数 :

回到lv_port_disp.c文件,往下找到lv_port_disp_init函数:

使用特权

评论回复
55
o88ne|  楼主 | 2023-6-27 14:53 | 只看该作者
然后将后面两个Example注释掉,用单缓冲(Example1)来画,节省一点ram,当然也可以用另外的两个,不过会占用更多的内存:

使用特权

评论回复
56
o88ne|  楼主 | 2023-6-27 14:54 | 只看该作者
然后找到disp_flush函数:

使用特权

评论回复
57
o88ne|  楼主 | 2023-6-27 14:54 | 只看该作者
首先去前面#include我们的lcd.h文件,因为待会要用里面的函数;接着在color_p++;上面加入一个快速画点函数:

使用特权

评论回复
58
o88ne|  楼主 | 2023-6-27 14:54 | 只看该作者
这里简单说说怎么写出来的:这个形参color_p是一个指向某一色块的起始点的指针,拿到之后就强制转换为u32型的指针,接着把它的内容读出来(就是色块的颜色了),最后利用快速画点函数来绘制;color_p++就是移动这个色块指针,直到绘制完整个色块。

使用特权

评论回复
59
o88ne|  楼主 | 2023-6-27 14:54 | 只看该作者
下面开始配置触摸接口函数:

来到lv_port_indev.c文件,找到lv_port_indev_init函数,将Touchpad以外的部分都删掉(输入设备可以是触摸屏、鼠标、键盘、编码器、按键,因为这里我只使用触摸屏,所以其余的删掉),剩下如下部分:

使用特权

评论回复
60
o88ne|  楼主 | 2023-6-27 14:55 | 只看该作者
然后找到touchpad_is_pressed和touchpad_get_xy两个函数:

使用特权

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

本版积分规则