国民技术N32G45X移植LVGL8.3+ILI9488

这篇具有很好参考价值的文章主要介绍了国民技术N32G45X移植LVGL8.3+ILI9488。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


1 准备工作


1.1 硬件方面

使用的是自制的一块控制板,主控选用的是国民技术的N32G452VEL7芯片,屏幕大小为3.5寸,驱动型号为ILI9488。

1.2 软件方面

从GitHub中获取LVGL码源: GitHub - lvgl/lvgl at release/v8.3
按照下边图示(步骤1-5)选择V8.3版本并进行下载
n32g45 ili9488 lvgl,单片机,stm32,ui
n32g45 ili9488 lvgl,单片机,stm32,ui


2 移植LVGL


2.1 修改LVGL相关文件名

打开下载好的LVGL-V8.3文件夹,移植LVGL主要就是操作下边这四份文件(/文件夹)
n32g45 ili9488 lvgl,单片机,stm32,ui

在项目工程文件夹中创建一份新文件夹,并命名为LVGL,然后复制LVGL-V8.3里边的这四份文件,其中porting文件夹是在上图的examples文件夹里。
n32g45 ili9488 lvgl,单片机,stm32,ui
为了看着专业一点的感觉,我们可以将文件名进行修改,
lv_conf_template.h重命名为lv_conf.h、
porting文件夹里的lv_port_disp_template.c重命名为lv_port_disp.c、
lv_port_disp_template.h重命名为lv_port_disp.h。
n32g45 ili9488 lvgl,单片机,stm32,ui
port_disp (显示相关)
port_fs (文件系统相关)
port_indev(输入设备相关)

2.2 加载LVGL头文件

将LVGL的头文件加载进来并设置为C99模式
n32g45 ili9488 lvgl,单片机,stm32,ui

2.3 添加LVGL码源

在项目工程文件栏处创建两份新的文件
n32g45 ili9488 lvgl,单片机,stm32,ui
LVGL_SRC (用来存放lvgl源码)
LVGL_POR(用来配置lvgl接口文件)

LVGL_POR文件里边加载这三份文件,(仅屏幕显示)
n32g45 ili9488 lvgl,单片机,stm32,ui

将LVGL/src里边的所有.c文件全都加载进LVGL_SRC文件里,数量有点多,注意别落下。
n32g45 ili9488 lvgl,单片机,stm32,ui

2.4 修改lv_conf.h文件

将lv_conf.h中if 0改成 if 1
n32g45 ili9488 lvgl,单片机,stm32,ui

修改内存大小
n32g45 ili9488 lvgl,单片机,stm32,ui

打开显示CPU使用率和FPS计数
n32g45 ili9488 lvgl,单片机,stm32,ui

2.5 修改lv_port_disp.c文件

将lv_port_disp.c中if 0改成 if 1
将lv_port_disp_template.h改为lv_port_disp.h
n32g45 ili9488 lvgl,单片机,stm32,ui

修改屏幕分辨率
n32g45 ili9488 lvgl,单片机,stm32,ui

选择缓存配置
n32g45 ili9488 lvgl,单片机,stm32,ui

添加屏幕填充函数
LCD_Color_Fill(area->x1,area->y1,area->x2,area->y2,(uint16_t *)color_p);
n32g45 ili9488 lvgl,单片机,stm32,ui

2.6 修改lv_port_disp.h文件

将lv_port_disp.h中if 0改成 if 1
将lvgl/lvgl.h改为lvgl.h
n32g45 ili9488 lvgl,单片机,stm32,ui

2.7 lvgl初步编译

经过编译后,出现一些错误:
n32g45 ili9488 lvgl,单片机,stm32,ui

按住ctrl+F,按照下图操作来进行批量替换
n32g45 ili9488 lvgl,单片机,stm32,ui

修改完成后编译通过
n32g45 ili9488 lvgl,单片机,stm32,ui


3 屏幕显示测试


3.1修改堆栈大小

Stack栈改为0x1000(4Kb)
Heap堆改为0x800(2Kb)
n32g45 ili9488 lvgl,单片机,stm32,ui

3.2 添加lvgl心跳

定时器配置为1ms的中断
在定时器中断函数中添加lv_tick_inc(1);

void TIMX_IRQHandler(void)
{
    if (TIM_GetIntStatus(TIMX, TIM_INT_UPDATE) != RESET)
    {
        TIM_ClrIntPendingBit(TIMX, TIM_INT_UPDATE);
                lv_tick_inc(1);
        /* Pin PC.06 toggling */
//        GPIO_WriteBit(GPIOC, GPIO_PIN_6, (Bit_OperateType)(1 - GPIO_ReadOutputDataBit(GPIOC, GPIO_PIN_6)));
    }
}

3.3 对main.c文件进行操作

添加LVGL相关头文件
加入LVGL测试程序
n32g45 ili9488 lvgl,单片机,stm32,ui

#include "main.h"
#include "NZ_BitBand.h"
#include "delay.h"

#include "time.h"
#include "lcd.h"
#include "lvgl.h"
#include "lv_port_disp.h"

void lv_example_led_1(void)
{
    /*Create a LED and switch it OFF*/
    lv_obj_t * led1  = lv_led_create(lv_scr_act());
    lv_obj_align(led1, LV_ALIGN_CENTER, -80, 0);
    lv_led_off(led1);

    /*Copy the previous LED and set a brightness*/
    lv_obj_t * led2  = lv_led_create(lv_scr_act());
    lv_obj_align(led2, LV_ALIGN_TOP_LEFT, 0, 0);
    lv_led_set_brightness(led2, 150);
    lv_led_set_color(led2, lv_palette_main(LV_PALETTE_RED));

    /*Copy the previous LED and switch it ON*/
    lv_obj_t * led3  = lv_led_create(lv_scr_act());
    lv_obj_align(led3, LV_ALIGN_CENTER, 80, 0);
    lv_led_on(led3);
}
int main(void)
{
        TIME_Configuration_Init(5,5999);
        LCD_Init();
        lv_init();                      // lvgl系统初始化
        lv_port_disp_init();  // lvgl显示接口初始化,放在lv_init()的后面        
        
        lv_example_led_1();
        while(1)
        {
            lv_task_handler(); // lvgl的事务处理
        }
}

3.4 程序编译运行

程序编译后进行烧录,发现全屏只显示一个颜色
n32g45 ili9488 lvgl,单片机,stm32,ui

屏幕显示不正常,经过检查后发现,ILI9488的填充函数不对,正确的函数如下:

//在指定区域内填充指定颜色块             
//(sx,sy),(ex,ey):填充矩形对角坐标,区域大小为:(ex-sx+1)*(ey-sy+1)   
//color:要填充的颜色
void LCD_Color_Fill(u16 sx, u16 sy, u16 ex, u16 ey, u16 *color)
{
    u16 height, width;
    u16 i, j;
    width = ex - sx + 1;  //得到填充的宽度
    height = ey - sy + 1; //高度
    if (lcddev.id == 0X9486 || lcddev.id == 0X9488)
    {
        for (i = sy; i < ey + 1; i++)
        {
            for (j = sx; j < ex + 1; j++)
                LCD_Fast_DrawPoint(j, i, color[(i - sy) * width + (j - sx)]);
        }
    }
    else
    {
        for (i = 0; i < height; i++)
        {
            LCD_SetCursor(sx, sy + i); //设置光标位置
            LCD_WriteRAM_Prepare();    //开始写入GRAM
            for (j = 0; j < width; j++)
                LCD->LCD_RAM = color[i * width + j]; //写入数据
        }
    }
}

经过修改后,屏幕最终可以正常显示
n32g45 ili9488 lvgl,单片机,stm32,ui


4 总结


LVGL移植过程中,难免会有一些困难,但移植次数多了,后边会发现基本都差不多的,主要的问题点无非就那几种,堆栈溢出了报错、屏幕填充函数错误、LVGL内存溢出等方面原因。最后的链接中有提供初始项目工程以及移植好的工程,有需要的伙伴可以拿去参考下。

链接:https://pan.baidu.com/s/1fxSSeKr2Vq0WmGyagiMjmQ
提取码:gfep文章来源地址https://www.toymoban.com/news/detail-792289.html

到了这里,关于国民技术N32G45X移植LVGL8.3+ILI9488的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 国民技术 MCU N32单片机所有系列---JLink添加芯片,方便使用Keil和JFlash

    1.将下图JLink tool adds Nations chip V1.0.12文件中选中的文件复制到自己电脑的JLINK的目录下(JLINK默认的下载路径是C:Program FilesSEGGERJLink   或者  C:Program Files(x86)SEGGERJLink) 2.然后直接把JLink tool adds Nations chip V1.0.12文件中的JLinkDevices.xml复制替换到自己电脑的JLINK的目录下的JLin

    2024年02月03日
    浏览(32)
  • 【国名技术】N32G401单片机驱动配置(STM32系列适用)

    N32G401总体上和STM32F4系列差不多,无论是从芯片资源,还是各种寄存器,都有相通之处,所以N32G401的所有驱动,如果使用smt32的话也可以借鉴使用(修改函数名) 文章代码仅限于参考,如果直接CV是肯定用不了的,源代码链接在最后 PS:所有驱动基于N32G401F7S8-1,一共20个引脚,

    2024年01月19日
    浏览(28)
  • 单片机移植freemodbus主机(STM32、GD32、瑞萨、国民技术等)

    从github下载:https://github.com/armink/FreeModbus_Slave-Master-RTT-STM32 无法下载或者下载太慢可以用资源下载,无需积分。freeModbus主机源码下载 示例代码 参考从机代码创建 将FreeModbus主机源代码拷贝到工程中间件-第三方库-freemodbus源码库:即MiddlewaresThird_PartyFreeModbusMaster文件夹中。

    2024年02月11日
    浏览(30)
  • 【N32G457】 基于RT-Thread和N32G457的迷你键盘

    此文为参加RT-Thread与国民技术联手推出N32G457 RT-Thread设计大赛期间作品。 由于疫情影响加上其他各种原因,本应在3月25日结束的比赛在今日终于完成了一个比较完整的作品,无论是否可以参赛,还是希望对大家有所帮助。 先放个图。 机械键盘在最近几年发展迅猛,功能也逐

    2024年02月09日
    浏览(25)
  • STM32移植LVGL8.0.2超详细的保姆级教程附移植好的工程文件

    网上教程那么多,为什么你要写这个教程? 问的好,csnd上很多类似的教程,他们写的都很好,但是有些过于简洁,对刚上手的小伙伴不太友好,移植到一半遇到bug就想放弃。一些第三方的教程很详细,但是由于lvgl的版本迭代很快,移植的过程有了一些变化,所谓失之毫厘差

    2024年02月03日
    浏览(28)
  • LVGL学习笔记(二):从0到1移植LVGL8.1到STM32平台上(完结篇)

    目录 一:TFT-LCD屏触摸 二:STM32CubeMX配置 三:FT5206触摸芯片驱动代码移植 四:LVGL 移植 4.1 源码下载 4.2 代码移植  4.3 添加源码至工程 4.4 指定头文件路径 4.5 设置编译参数  4.6 修改LVGL源文件   4.7 修改显示驱动接口    4.8 修改输入设备驱动接口  五:下载验证  六:工

    2024年02月03日
    浏览(30)
  • stm32f407移植LVGL8.3.1实况(所有bug调试现场,最终成功点灯)

    声明: 本文主要参考 stm32移植lvgl_NULL_1969的博客-CSDN博客_lvgl stm32 及 STM32移植LVGL8.0.2超详细的保姆级教程附移植好的工程文件 ,底层驱动主要采用正点原子触摸屏实验和定时器实验 1.1 主要硬件接口 1.1.1 触摸屏 主要需要触摸屏来实现屏幕的显示及触摸。 触摸屏需要底层的接

    2024年01月16日
    浏览(40)
  • STM32G431RBT6移植FreeRTOS

    引言: 本文专门为参加了蓝桥杯嵌入式赛道的同学准备, 大家可能会有这样一个问题, 比完赛之后, 对于像继续使用STM32G431RBT6学习FreeRTOS的, 发现网上的教程使用的板子基本上都是F1和F4的, 其实呢, 随便移植一下就能在我们自己的板子上面运行FreeTROS了。如果大家有AR

    2024年04月23日
    浏览(54)
  • STM32G473VET6 FlashDB数据库移植(裸机、片内Flash)

    此文档也适用于STM32G070 此处使用FlashDB官方最新源码 FlashDB: 一款支持 KV 数据和时序数据的超轻量级数据库 (gitee.com) 克隆源码后目录如下 红框中几个为移植必要文件与参考 根据FlashDB官方文档可知,FlashDB底层依赖于RT-Thread的FAL组件,所以需要先移植FAL FlashDB源码中port目录下即

    2024年01月21日
    浏览(30)
  • 国民技术N32_MCU ADC如何获取高精度采样数据

    国民技 术 微控制器内置最多四个高级 12 位 ADC    (取决于产品系列) ,具有校准功能,用于提高环境条件   变 化时的 ADC   精度。 在涉及模数转 换的应用中,   ADC   精度会影响整体的系统质量和效率。为了提高此精度,必须了解与 ADC 相 关 的误差以及影响它们的参数。

    2024年02月09日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包