[其他ST产品] STM32F4使用FSMC驱动4.3寸触摸屏(HAL库+CubeMX)

[复制链接]
4584|79
 楼主| o88ne 发表于 2023-6-27 14:49 | 显示全部楼层
然后将“f407zgt6\GUI\lvgl\src”下的所有.c文件加入GUI/lvgl中(注意是所有!过程有点繁琐,可以用Ctrl+A全选加入),就是一个一个文件夹点开,看到.c就add就可以了:

48698649a86716c520.png
 楼主| o88ne 发表于 2023-6-27 14:49 | 显示全部楼层
最终结果: 54793649a868647289.png
 楼主| o88ne 发表于 2023-6-27 14:49 | 显示全部楼层
然后再给GUI/lvgl_port加入“f407zgt6\GUI\lvgl_port”的3个.c文件: 47951649a8693a5cf9.png
 楼主| o88ne 发表于 2023-6-27 14:50 | 显示全部楼层
最后再将“f407zgt6\GUI\lv_conf.h”加入到User组,方便找到: 52706649a86a26e1a6.png
 楼主| o88ne 发表于 2023-6-27 14:51 | 显示全部楼层
然后进入魔术棒,修改头文件包含路径,主要是添加这3个: 77991649a86d3a21ce.png
 楼主| o88ne 发表于 2023-6-27 14:51 | 显示全部楼层
接下来开始修改代码。

首先打开lv_conf.h,将#if 0 改为#if 1,使能编译: 74445649a86e9ecf77.png
 楼主| o88ne 发表于 2023-6-27 14:51 | 显示全部楼层
然后这行的16表示RGB565(5bit作为R,6bit作为G,5bit作为B)格式,正好符合我用的屏幕,所以不需要修改:

19598649a86f95d000.png
 楼主| o88ne 发表于 2023-6-27 14:51 | 显示全部楼层
还有第52行,可以视情况设置内存,这里给的是48K:

3489649a870db76bf.png
 楼主| o88ne 发表于 2023-6-27 14:52 | 显示全部楼层
还有这几行,如果设置为1的话,到时候就会显示CPU运行以及显示帧率,这里没有打开: 54364649a871c8cbce.png
 楼主| o88ne 发表于 2023-6-27 14:52 | 显示全部楼层
接下来打开lv_port_disp.c(这个就是显示接口文件),首先将#if 0改为1,使能编译;再将#include "lv_port_disp_template.h"改为#include "lv_port_disp.h"(因为之前给文件改过名了);接着再定义分辨率如下:

13591649a872980603.png
 楼主| o88ne 发表于 2023-6-27 14:52 | 显示全部楼层
这里我准备选择横屏,所以水平设置为800,垂直设置为480,如果想竖屏的话就换过来;接着打开lv_port_disp.h,将#if 0改为1: 22617649a873c1cda7.png
 楼主| 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":
57724649a874a72989.png
 楼主| o88ne 发表于 2023-6-27 14:53 | 显示全部楼层
接着打开lv_port_indev.h,将#if 0改为1: 45796649a8759bbe39.png
 楼主| o88ne 发表于 2023-6-27 14:53 | 显示全部楼层
下面开始配置显示屏接口函数 :

回到lv_port_disp.c文件,往下找到lv_port_disp_init函数: 59130649a876859150.png
 楼主| o88ne 发表于 2023-6-27 14:53 | 显示全部楼层
然后将后面两个Example注释掉,用单缓冲(Example1)来画,节省一点ram,当然也可以用另外的两个,不过会占用更多的内存: 94463649a877dae108.png
 楼主| o88ne 发表于 2023-6-27 14:54 | 显示全部楼层
然后找到disp_flush函数: 93322649a878c54e4f.png
 楼主| o88ne 发表于 2023-6-27 14:54 | 显示全部楼层
首先去前面#include我们的lcd.h文件,因为待会要用里面的函数;接着在color_p++;上面加入一个快速画点函数: 834649a879b221c8.png
 楼主| o88ne 发表于 2023-6-27 14:54 | 显示全部楼层
这里简单说说怎么写出来的:这个形参color_p是一个指向某一色块的起始点的指针,拿到之后就强制转换为u32型的指针,接着把它的内容读出来(就是色块的颜色了),最后利用快速画点函数来绘制;color_p++就是移动这个色块指针,直到绘制完整个色块。
 楼主| o88ne 发表于 2023-6-27 14:54 | 显示全部楼层
下面开始配置触摸接口函数:

来到lv_port_indev.c文件,找到lv_port_indev_init函数,将Touchpad以外的部分都删掉(输入设备可以是触摸屏、鼠标、键盘、编码器、按键,因为这里我只使用触摸屏,所以其余的删掉),剩下如下部分: 79285649a87b02e2dd.png
 楼主| o88ne 发表于 2023-6-27 14:55 | 显示全部楼层
然后找到touchpad_is_pressed和touchpad_get_xy两个函数: 44344649a87bd4fdb4.png
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部