野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 24167|回复: 4

[其它] 在野火挑战者F429核心板 V2上基本成功移植LVGL记录

[复制链接]

发表于 2021-7-1 16:36:09 | 显示全部楼层 |阅读模式
弄了一周多,终于在F429 V2核心板上移植了LVGL,开贴记录,分享一下过程。移植过程中也有一点小问题还未解决,希望能获得帮助。
首先LVGL是一个开源的GUI库,相比于emWIN和TouchGFX没有版权限制,更方便移植于其他的芯片平台,其次LVGL带了一个类此于操作系统的Task管理系统(初步了解,研究的还不够深入)。
硬件:STM32F429 V2核心板    野火4.3寸 480x272 电容屏。
软件版本:LVGL 7.0版本(百度搜lvgl就可以下载了)
移植工程:野火F429触摸画板例程。

IMG_20210701_152523.jpg IMG_20210701_152120.jpg IMG_20210701_152135.jpg IMG_20210701_123407.jpg


lvgl的移植过程相对还是挺简单的,只要提供一个LCD的刷屏的API接口给LVGL就可以了,因为F429的LTDC外接RGB屏幕是没有显存的,所以必须要使用SDRAM作为显存使用。这里会引出一个问题,后面再说。在触摸画板的例程里面,LCD的驱动文件太过冗余。保留LCD_Init()、LCD_LayerInit()和LCD_SetLayer()这三个关键初始化相关的函数就可以了。显存地址设置为SDRAM的物理地址就可以了。
然后自己再写一个刷屏函。就是屏幕像素填充函数。我写了使用DMA2D填充的和不使用DMA2D填充的两个函数。
野火论坛202107011555211066..png
使用DMA2D:
野火论坛202107011555589173..png
这里用while死循环硬等 DMA2D填充完成实时性不好,以后再来研究。

然后就是触摸板,这个我直接就使用野火的例程。
硬件准备工作完成,就可以移植lvgl了。首先去lvgl官网下载文件:
下载地址:https://github.com/lvgl/lvgl
lvgl/lvgl: Powerful and easy-to-use embedded GUI library with many widgets, advanced visual effects (opacity, antialiasing, animations) and low memory requirements (16K RAM, 64K Flash). (github.com)
在master下打开Tags,就可以选择版本了。

野火论坛202107011602573454..png

移植过程:https://blog.csdn.net/qq_40831286/article/details/107633216  这个博主写的就很好,照着他的过程一步步移植就可以了。
移植注意几点就是:
  • 需要使用一个TIM定时器提供1ms的定时器,在TIM中断里放lv_tick_inc(1)函数,用来给lvgl提供时钟心跳。
  • lv_init()、lv_port_disp_init()、lv_port_indev_init()这三个函数分别用来初始化lvgl,图像显示输出和设备输入的。这三个函数一定要有且放在while(1)之前。
  • 在while(1)循环里放lv_task_handler()函数和一个触摸扫描函数。


前面说到SDRAM做显存遇到的一些问题解决,在这里说一下怎么解决,也是发帖的重点。

  • 在lvgl的lv_port_disp.c文件里,提供了三种缓存,选择一种就行了,我选择的是双缓存。前面说到LTDC没有显存,要使用SDRAM作为显存来使用,且将显存的地址就是设置为SDRAM的物理地址。所以在lvgl的缓存地址一定要偏移两个显存空间,再一个我使用的像素格式为RGB565,一个像素点占两个字节。所以要偏移的空间大小为 480*272*2*2,转化为十六进制就是 0x7F800。如果没有这个偏移的话,液晶显示就会闪烁。 野火论坛202107011623594856..png
  • 在LCD_Init函数里RCC_LTDCCLKDivConfig()函数的参数要设置为RCC_PLLSAIDivR_Div4。不然的话,在使用DMA2D填充屏幕时,液晶显示会有严重的撕裂感。
  • 虽然屏幕的分辨率是480x272,但是坐标点是479x271。是从0开始的,这点要注意。否侧的话在不使用DMA2D填充LCD,而是直接对地址操作的话,在寻址的函数里极易造成画面倾斜。
  • SDRAM的驱动头文件里SDRAM_READBURST宏一定要修改为Enable。否则的话,在触摸屏幕时,屏幕也会有撕裂感。


本帖最后就是有个小问题,我还没有找到原因,就是屏幕最右侧的显示异常,我对刷屏进行延时发现,当屏幕刷到x=400左右的位置时,会跳到最右侧约x=470位置写,写到480位置后又会跳回到原位置重新写。不知道这是什么原因造成的,求大神解惑。


评分

参与人数 1火花 +2 收起 理由
青青子矜 + 2

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2021-7-1 16:37:08 | 显示全部楼层
第一次发帖,还有很多问题,欢迎指正。谢谢
回复 支持 反对

使用道具 举报

发表于 2021-7-2 09:31:58 | 显示全部楼层
帖子的图片是可以上传后先点要插入的地方 然后再点图片插入 之前帖子图片显示有问题我重新点了一下 看看应该是对了吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-2 14:51:21 | 显示全部楼层
WishWish 发表于 2021-7-2 09:31
帖子的图片是可以上传后先点要插入的地方 然后再点图片插入 之前帖子图片显示有问题我重新点了一下 看看应 ...

是的。谢谢您的修改
回复 支持 反对

使用道具 举报

发表于 2022-2-12 11:57:34 | 显示全部楼层
大佬代码能提供一下嘛,我参考参考
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-22 05:13 , Processed in 0.038212 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表