【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程序的自动启动机制。通过本文的介绍,希望能帮助开发者快速定位和解决类似的问题,提高开发效率。

相关推荐
芯联智造1 天前
【stm32简单外设篇】- WS2812单线地址式 RGB 灯带
c语言·stm32·单片机·嵌入式硬件
7yewh1 天前
jetson_yolo_deployment 02_linux_dev_skills
linux·python·嵌入式硬件·yolo·嵌入式
香水5只用六神1 天前
【DMA】存储器到外设模式实验2
c语言·git·stm32·单片机·嵌入式硬件·github·visual studio
forAllforMe1 天前
用STM32+LAN9252实现etherCAT 从站IO控制
stm32·单片机·嵌入式硬件
AnalogElectronic1 天前
RP2040学习4,LED点亮,OLED显示,DHT11温湿度传感器数据读取
单片机·嵌入式硬件·学习
LCG元1 天前
系统冗余设计:STM32F7双看门狗+电源监控,提高可靠性
stm32·单片机·嵌入式硬件
豆豆饿啦1 天前
【瑞萨AI挑战赛】#01 快速开始
嵌入式硬件·mcu·物联网·iot
豆豆饿啦1 天前
【瑞萨AI挑战赛】#02 DL任务说明及训练
人工智能·嵌入式硬件·mcu·物联网·iot
国科安芯1 天前
抗辐照加固CAN FD芯片的商业航天与车规级应用解析
科技·嵌入式硬件·安全·fpga开发·安全威胁分析
GodKK老神灭1 天前
CMSIS-DAP协议关键命令完整数据包示例详解
单片机·keil