【RT-Thread Titan Board 开发板】RGB LCD屏测试

目录

引言

LCD屏硬件接口

硬件连接

软件测试

[I2C 设备扫描工具的使用](#I2C 设备扫描工具的使用)

LVGL示例

[1. 自动初始化入口](#1. 自动初始化入口)

[2. LVGL 线程初始化](#2. LVGL 线程初始化)

[3. LVGL 线程入口函数](#3. LVGL 线程入口函数)

[4. 测试程序入口](#4. 测试程序入口)

测试结果

结束语


引言

厂商提供的RT-Thread Titan Board 开发板套件不包括屏幕,而我计划的项目必须有一个屏幕才行,从某宝买了一个4.3寸RGB LCD触摸屏,这两天到货了,来测试一下。本文将分享项目测试过程中的经验。

LCD屏硬件接口

开发板的LCD屏接口如下:

这实际上是正点原子定义的LCD屏幕的管脚定义:

某宝上有大量和正点原子兼容的屏幕,价格一般只有正版的一半。我买的这款是三个接口兼容的,还包括韦东山和野火的接口。

硬件连接

下面是显示屏背面的连线:

下面是开发板背面的连线方式:

这款开发板的LCD连线有点特殊,刚开始我以为金手指在里面,而塑料面在外面,结果开发板不能点亮显示器,显示大量错误:

复制代码
[E/drv.hwi2c] POWER_CTL reg I2C write failed
[I/touch] rt_touch init success 
[I/gt9147] touch device gt9147 init success 

[E/drv.hwi2c] POWER_CTL reg I2C write failed 
id = GT-48-640 
[E/drv.hwi2c] POWER_CTL reg I2C write failed 
[E/drv.hwi2c] POWER_CTL reg I2C write failed 
[E/drv.hwi2c] POWER_CTL reg I2C write failed 
range_x = 1254749290 
range_y = -1989128864 
point_num = 88 

把线调整过来之后,屏幕就可以正常点亮了。

软件测试

厂商提供了两个和RGB LCD有关的例子,我使用的是Titan_display_rgb_lvgl。

该项目是一个基于 Renesas RA8D1 微控制器的 RGB LCD 显示方案,使用以下技术栈:

  • 操作系统:RT-Thread
  • 图形库:LVGL
  • 触摸芯片:GT9147
  • 显示接口:RGB LCD
  • 通信总线:I2C(用于触摸屏)

I2C 设备扫描工具的使用

在调试 I2C 设备时,首先需要确认设备是否正确连接到总线上。RT-Thread 提供了一个实用的 i2c_scan 命令。 i2c_scan 命令实现 在 hal_entry.c 中实现了 I2C 扫描功能。在 FinSH 控制台中输入:

bash 复制代码
i2c_scan i2c0

正常情况下,如果 GT9147 触摸屏已连接,应该能看到:

bash 复制代码
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- 5d -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

其中 5d 就是 GT9147 触摸芯片的 I2C 地址。

LVGL示例

LVGL 测试程序会在系统启动时自动运行,其启动流程如下:

1. 自动初始化入口

cpp 复制代码
// lv_rt_thread_port.c
INIT_ENV_EXPORT(lvgl_thread_init);

INIT_ENV_EXPORT 宏会在 RT-Thread 系统初始化时自动调用 lvgl_thread_init 函数。

2. LVGL 线程初始化

cpp 复制代码
static int lvgl_thread_init(void)
{
    rt_err_t err;

    err = rt_thread_init(&lvgl_thread, "LVGL", lvgl_thread_entry, RT_NULL,
           &lvgl_thread_stack[0], sizeof(lvgl_thread_stack), 
           PKG_LVGL_THREAD_PRIO, 10);
    if(err != RT_EOK)
    {
        LOG_E("Failed to create LVGL thread");
        return -1;
    }
    rt_thread_startup(&lvgl_thread);

    return 0;
}

3. LVGL 线程入口函数

cpp 复制代码
static void lvgl_thread_entry(void *parameter)
{
    lv_init();                           // 初始化 LVGL 库
    lv_tick_set_cb(&rt_tick_get_millisecond);
    lv_port_disp_init();                  // 初始化显示设备
    lv_port_indev_init();                 // 初始化输入设备(触摸屏)
    lv_user_gui_init();                   // 运行用户 GUI 程序(测试程序)

    /* handle the tasks of LVGL */
    while(1)
    {
        lv_timer_handler();
        rt_thread_mdelay(PKG_LVGL_DISP_REFR_PERIOD);
    }
}

4. 测试程序入口

cpp 复制代码
void lv_user_gui_init(void)
{
    /* display demo; you may replace with your LVGL application at here */
#if LV_USE_DEMO_MUSIC
    lv_demos_create("music");
#elif LV_USE_DEMO_BENCHMARK
    lv_demos_create("benchmark");
#elif LV_USE_DEMO_WIDGETS
    lv_demos_create("widgets");
#elif LV_USE_DEMO_STRESS
    lv_demos_create("stress");
#elif LV_USE_DEMO_RENDER
    lv_demo_render(LV_DEMO_RENDER_SCENE_IMAGE_NORMAL, 128);
#else
#error "Please enable one lvgl demo in the env"
#endif
    lv_demos_show_help();
}

测试结果

下图就是测试程序最后的跑分结果。

结束语

本文详细介绍了 RT-Thread LVGL RGB LCD 项目的测试和调试过程,包括: 设备扫描工具的使用、触摸屏 I2C 通信问题诊断和LVGL程序的自动启动机制。通过本文的介绍,希望能帮助开发者快速定位和解决类似的问题,提高开发效率。

相关推荐
周周记笔记2 小时前
ESP32-S3:工程配置(十二)
单片机·嵌入式硬件
想放学的刺客2 小时前
单片机嵌入式系统试题(第28期)flash芯片各引脚作用?低功耗设计估算电池续航时间是多少?如何优化低功耗等项目经验
stm32·单片机·嵌入式硬件·mcu·物联网·51单片机
WuLaHH2 小时前
可靠UDP协议RUDP
单片机·网络协议·udp
宵时待雨3 小时前
STM32笔记归纳5:SPI
笔记·stm32·嵌入式硬件
DLGXY3 小时前
STM32——DMA(十四)
stm32·单片机·嵌入式硬件
恒锐丰小吕3 小时前
屹晶微 EG2121 中压250V半桥驱动芯片技术解析
嵌入式硬件·硬件工程
LeoZY_3 小时前
CH347 USB转JTAG功能使用笔记:CH347根据SVF文件实现任意FPGA下载
笔记·stm32·嵌入式硬件·fpga开发·硬件架构·硬件工程
__万波__3 小时前
STM32L475定时器实验
stm32·单片机·嵌入式硬件