TFT适配LVGL实践分享

2024-09-05

1

前言说明

本章通过FRDM-MCXN947开发板与正点原子的TFTLCD进行实践

1.2模块介绍

硬件:

FRDM-MCXN947开发板:

该开发板具有丰富的接口详细可参考

NXP官方网站

,从下图板载资源中可看出TFTLCD可以通过flexIO进行驱动。

TFT适配LVGL实践分享 (https://ic.work/) 技术资料 第1张
TFT适配LVGL实践分享 (https://ic.work/) 技术资料 第2张

FTLCD为正点原子并口屏:

TFT适配LVGL实践分享 (https://ic.work/) 技术资料 第3张

软件:

下拉RT-Thread代码

TFT适配LVGL实践分享 (https://ic.work/) 技术资料 第4张

1.3 软件开发

编译配置工具:env 从 RT-Thread 官网下载

Env工具



https://www.rt-thread.org/download.html

代码编辑器:vscode

下载器:使用LinkServer.exe命令下载,来自于下载Linkserver 1.4.85 installer for Windows (nxp官网)

本人在vscode中编辑代码,通过env工具来配置和编译,在windows的PowerShell中使用LinkServer.exe命令来进行烧录。命令如下:

TFT适配LVGL实践分享 (https://ic.work/) 技术资料 第5张
TFT适配LVGL实践分享 (https://ic.work/) 技术资料 第6张

有简单方式可以在vscode中配置tasks.json,在vscode中实现编辑、编译和烧录一站式操作,参见大佬文章:

使用VSCode 搭建 RT-Thread 关于 NXP mcxn947 开发环境(二)

,(

https://club.rt-thread.org/ask/article/e46d421071211221.html

)本人比较懒,从里面搬了烧录命令来使用了。


为啥不使用keil进行开发?

主要原因是开发板一到手,下载的最新版并安装了MCXN947_DFP的keil就链接不上板子,CMSIS-DAP链接过程中会报错如下:

TFT适配LVGL实践分享 (https://ic.work/) 技术资料 第7张

我首先思考的是电脑驱动不对,去官网下载了MCU-LINK_installer_3.133,在安装过程会自动安装电脑的驱动(当然事后发现,这个电脑驱动过程其实不需要,会自动装),仍然不起作用!在MCU-LINK_installer_3.133目录下两个脚本,可更新板载下载器固件为JLINK方式,需要配合板子上J21跳线帽来操作。

TFT适配LVGL实践分享 (https://ic.work/) 技术资料 第8张

操作步骤:1.安装跳线帽;2.断电重启;3.运行program_JLINK.c

TFT适配LVGL实践分享 (https://ic.work/) 技术资料 第9张

md程序进行固件更新;4更新完成后,需要取掉跳线帽,然后进行断电重启,(板子上复位按钮不行,必须断电操作)。可以看到keil识别到JLINK:

烧录过程中任然会有报错:

TFT适配LVGL实践分享 (https://ic.work/) 技术资料 第10张

经过一番折腾之后,我将板载下载器固件更新回了CMSIS-DAP方式,采用了上述开发方法。

2

步骤说明

2.1 添加LCD驱动与代码修改

在ports目录下添加了LCD驱动和SConscript文件

TFT适配LVGL实践分享 (https://ic.work/) 技术资料 第11张

添加完文件后,发现LCD驱动任然没有被编译,主要原因是ports上一级目录中的SConscript文件,没有采用遍历所有目录下的SConscript文件的写法

方法一:添加遍历SConscript的写法

TFT适配LVGL实践分享 (https://ic.work/) 技术资料 第12张

方法二:参考其他BSP有在根SConscript文件中,单独读取board/ports/SConscript文件

TFT适配LVGL实践分享 (https://ic.work/) 技术资料 第13张

在pin_mux.c中缺少对flexIO并口的配置,添加并口,CS,RS,RD,WR,ReSet引脚的配置,代码如下:

TFT适配LVGL实践分享 (https://ic.work/) 技术资料 第14张
TFT适配LVGL实践分享 (https://ic.work/) 技术资料 第15张
TFT适配LVGL实践分享 (https://ic.work/) 技术资料 第16张
TFT适配LVGL实践分享 (https://ic.work/) 技术资料 第17张

2.2 编译运行程序

LCDTFT程序运行.mp4



https://club.rt-thread.org/file_download/15c229bf648c2991


TFT适配LVGL实践分享 (https://ic.work/) 技术资料 第18张

2.3 lvgl使用

在menuconfig中启用lvgl

TFT适配LVGL实践分享 (https://ic.work/) 技术资料 第19张

在applicaions中添加了lvgl相关的配置和接口文件

TFT适配LVGL实践分享 (https://ic.work/) 技术资料 第20张

在lv_conf.h中定义了一下几个宏定义

TFT适配LVGL实践分享 (https://ic.work/) 技术资料 第21张

在lv_port_disp.c中定义了显示分辨率、显示buffer、显示更新的回调函数,并在lv_port_disp_init函数里进行注册

TFT适配LVGL实践分享 (https://ic.work/) 技术资料 第22张

在回调函数里调用lcd驱动里的区域填充函数

TFT适配LVGL实践分享 (https://ic.work/) 技术资料 第23张

2.4 lvgl验证

跑一个benchmark看一看效果


sdf.mp4





https://club.rt-thread.org/file_download/86b25c6fb1cde3d9



lvgl跑出来的帧率为18

TFT适配LVGL实践分享 (https://ic.work/) 技术资料 第24张

采用编译优化等级O1,导致LCD功能有问题,屏幕不显示。于是LCD驱动部分代码采用O0,其他代码采用O1,修改编译脚本rtconfig.py,脚本默认走的是debug分支,将其修改到release分支

TFT适配LVGL实践分享 (https://ic.work/) 技术资料 第25张

当然这个修改会对整个工程产生影响,需要在LCD驱动部分编译脚本中添加局部编译参数

TFT适配LVGL实践分享 (https://ic.work/) 技术资料 第26张

lvgl帧率提升至26

TFT适配LVGL实践分享 (https://ic.work/) 技术资料 第27张

当然尝试了双buf和优化等级O3,帧率没有再提高

文章推荐

相关推荐