1525|8

6993

帖子

11

TA的资源

版主

楼主
 

STM32U5A5 移植LVGL [复制链接]

1、本次驱动的LCD为ILI9488使用板载的spi驱动,触摸屏为ADS7843使用spi3来驱动,选取的IO分别为如下:

开发板            LCD

SPI1-MOSI(PA7)    SDI

SPI1-SCK(PA5)     SCK

TFT_CS(PD14)        CS

TFT_RST(PD15)       RST

TFT_DC(PF12)        DC

VDD                BL(目前不使用调光,直接接高电平)

SPI3-SCK(PC10)       TCLK

PC8                TCS

SPI3-MISO(PC11)     TDO

SPI3-MOSIP(C12)     TDI

PC9                TPEN(中断)

VDD               VCC

GND               GND

2、移植ILI9488驱动

这在我的这篇帖子里已经移植好,不再详述:https://bbs.eeworld.com.cn/thread-1231258-1-1.html

3、移植ADS7843驱动。

驱动的原理图如下:

 

 

其代码详见源码。

【LVGL移植】

  1. 下载lvgl源码,官方下载,
    链接已隐藏,如需查看请登录或者注册
  2. 下载好后,我们把lvgl文件,直接粘帖到工程的Middlewares止录下:

 

 

  1. 把文件夹的目录添加到工程里面:

< class="p" style="">

 

 

< class="p" style="">4、复制lv_port_disp_template.h/c、lv_port_indev_template.h/c到src目录下面,并且重命名为lv_port_disp.h/c、lv_port_indev.h/c。

 

 

5、打开lv_port_disp.h,把if 0修改为if 1,同时把文件的引用路径修改为#include “lvgl.h”

 

  1. 打开lv_port_disp.c,修改if 0,为if 1。添加lcd屏、的头文件引用,添加hspi1、touch、lcd等的变量的扩展声明。

 

  1. 在函数lv_port_disp_init中定义宽的参数,以及刷新缓存的方式

 

  1. 修改disp_flush函数为内容如下:

 

  1. 在disp_init函数中,加入LCD屏初始化,设置屏有横竖类型,同时修改电阻屏的横竖:

 

  1. 重命名lvgl目录下的lvgl_conf_template.h为lvgl_conf.h。
  2. 打开lvgl_conf.h,修改if 0为if 1,打开代码。

 

  1. 为lvgl添加freertos的tick心跳包,在第88行左右,找到#define LV_TICK_CUSTOM,把他修改为1,同时修改内容如下,使得lvgl的心跳包为freertos来提供:

< class="p" style="">#define LV_TICK_CUSTOM 1

 

< class="p" style="">#if LV_TICK_CUSTOM

 

< class="p" style="">#define LV_TICK_CUSTOM_INCLUDE "FreeRTOS.h" /*Header for the system time function*/

 

< class="p" style="">#define LV_TICK_CUSTOM_SYS_TIME_EXPR (xTaskGetTickCount()) /*Expression evaluating to current system time in ms*/

 

< class="p" style="">/*If using lvgl as ESP32 component*/

 

< class="p" style="">// #define LV_TICK_CUSTOM_INCLUDE "esp_timer.h"

 

< class="p" style="">// #define LV_TICK_CUSTOM_SYS_TIME_EXPR ((esp_timer_get_time() / 1000LL))

 

< class="p" style="">#endif /*LV_TICK_CUSTOM*/

 

 

  1. 打开lv_port_indev.h 修改if 0为 if 1打开代码。

 

  1. 打开lv_port_indev.c,修改if 0 为if 1, 打开代码,同时添加touch.h的头文件引用:

 

  1. 修改touchpad_read函数内容如下:
/*Will be called by the library to read the touchpad*/
static void touchpad_read(lv_indev_drv_t * indev_drv, lv_indev_data_t * data)
{
    static lv_coord_t last_x = 0;
    static lv_coord_t last_y = 0;

    TP_Scan(0);
    if(tp_dev.sta&TP_PRES_DOWN)
    {
    	last_x = tp_dev.x;
		last_y = tp_dev.y;

		data->point.x = last_x;
		data->point.y = last_y;
		data->state = LV_INDEV_STATE_PR;

    }
    else
    {
    	data->point.x = last_x;
		data->point.y = last_y;
		data->state = LV_INDEV_STATE_REL;
    }
}

到此代码的移植全部完成,编译后有些错误提示,可以根据提示来添加头文件的引用等。

 

【测试代码】

  1. 在main.c中,我们需要先添加lcd的初始化与电阻屏的初化与较准。

 

  1. 在app_freertos.c文件中,我们在任务中添加一个LED的控制程序,添加一个LED及一个开关部件来实现对板载LED红灯的控制。添加一个label标签,用于展示当前的时间,开启一个定时器,在定时器回调函数中刷定时间显示。

 

【总结】

基于LVGL的移植历经一个星期才完成任务。下面谈谈这项目工程的一些经验与心得。

  1. STM32U5A5拥有大的flash与大内存,编写lvgl时不需要考虑内存是否足够的情况。
  2. Stm32CubeIDE提供了强大的编程工具,基础的组件基于图形化的工具配置,减少了开发者的复杂的寄存器的配置。生成基础工程非常之方便。国家厂家比如雅特力、TI等也有图形化的配置工程,但是相比stm32cubeIDE还是没有这么全面与方便。
  3. Stm32cubeIDE的FreeRTOS的移植也是有软件包,虽然在stm32U5下面没有默认的包,但是可以经过手工安装来实现对freeRTOS的简单配置,使得移植工作也是非常的快捷方便。
  4. 在LVGL的移植工作中,相比keil的移植,也是有相当大的优势,keil中,需要手工添加非常多的.c文件,与头文件的引用,在stm32cubeIDE中只需要把外部的文件夹拷贝进目录就行了,简单的添加编译的路径与工程里就行了。

 

附工程源代码:

U5A5ZQ_tft.zip (12.48 MB, 下载次数: 3)

 

U5A5ZQ_tft.zip

12.48 MB, 下载次数: 2

此帖出自stm32/stm8论坛

最新回复

深度产品应该不会用这种不可控的东西。很多寄存器完全不知道啥意思。   详情 回复 发表于 2024-1-29 16:40
点赞(1) 关注
 

回复
举报

243

帖子

0

TA的资源

纯净的硅(初级)

沙发
 

STM32U5A5拥有大的flash与大内存,编写lvgl时不需要考虑内存是否足够的情况。

 确实对于资源不足的单片机可能还需要剪裁lvgl。

接下来和版主一起学习lvgl

此帖出自stm32/stm8论坛

点评

我最近要主攻TouchGFX,还没有掌握好呀。  详情 回复 发表于 2024-1-20 21:29
 
 

回复

6993

帖子

11

TA的资源

版主

板凳
 
qiao--- 发表于 2024-1-20 19:42 STM32U5A5拥有大的flash与大内存,编写lvgl时不需要考虑内存是否足够的情况。  确实对于资源不足的 ...

我最近要主攻TouchGFX,还没有掌握好呀。

此帖出自stm32/stm8论坛
 
 

回复

7628

帖子

2

TA的资源

五彩晶圆(高级)

4
 

这个屏的器件很让人恶心

此帖出自stm32/stm8论坛

点评

能具体说吗?最近我在考察4寸屏幕的性能,我看到ILI9488的SPI接口屏很多,不会知道有什么坑  详情 回复 发表于 2024-1-25 11:21
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复

2935

帖子

4

TA的资源

五彩晶圆(中级)

5
 
freebsder 发表于 2024-1-23 16:34 这个屏的器件很让人恶心

能具体说吗?最近我在考察4寸屏幕的性能,我看到ILI9488的SPI接口屏很多,不会知道有什么坑

此帖出自stm32/stm8论坛

点评

各种寄存器设置的根本不知道啥意思,只能抄。  详情 回复 发表于 2024-1-25 22:36
 
 
 

回复

7628

帖子

2

TA的资源

五彩晶圆(高级)

6
 
bigbat 发表于 2024-1-25 11:21 能具体说吗?最近我在考察4寸屏幕的性能,我看到ILI9488的SPI接口屏很多,不会知道有什么坑

各种寄存器设置的根本不知道啥意思,只能抄。

此帖出自stm32/stm8论坛

点评

ssd1306的资料在早期的时候也是这样,后来才出来一些资料。搞明白了一些寄存器,例如:翻转90°之类的。也是不到这些厂家怎么想的  详情 回复 发表于 2024-1-26 09:21
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复

2935

帖子

4

TA的资源

五彩晶圆(中级)

7
 
freebsder 发表于 2024-1-25 22:36 各种寄存器设置的根本不知道啥意思,只能抄。

ssd1306的资料在早期的时候也是这样,后来才出来一些资料。搞明白了一些寄存器,例如:翻转90°之类的。也是不到这些厂家怎么想的

此帖出自stm32/stm8论坛

点评

深度产品应该不会用这种不可控的东西。很多寄存器完全不知道啥意思。  详情 回复 发表于 2024-1-29 16:40
 
 
 

回复

286

帖子

0

TA的资源

一粒金砂(高级)

8
 

大佬,这么快就出测评文章了,牛牛

此帖出自stm32/stm8论坛
 
个人签名

阅读改变人生

 
 

回复

7628

帖子

2

TA的资源

五彩晶圆(高级)

9
 
bigbat 发表于 2024-1-26 09:21 ssd1306的资料在早期的时候也是这样,后来才出来一些资料。搞明白了一些寄存器,例如:翻转90°之类的 ...

深度产品应该不会用这种不可控的东西。很多寄存器完全不知道啥意思。

此帖出自stm32/stm8论坛
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表