w803|联盛德|WM IoT SDK2.X测试|window11|TOML 文件|外设|TFT_LCD|测试任务|(5):TFT_LCD_LVGL示例

TFT_LCD_LVGL

功能概述

此应用程序是使用 WM IoT SDK 进行 LVGL 功能的示例。它演示了如何初始化 TFT LCD 设备,并创建 LVGL DEMO Task 进行 LVGL 模块的初始化,并展示 LVGL 原生的不同 Demo 场景, 例如: Widgets, Music Player, Benchmark, Stress 等。 此程序采用 SDIO(SPI 模式) 与连接屏通信, 通信过程采用 DMA 或 CPU Polling 方式进行。

环境要求 Á

  1. 示例程序中

TFT LCD屏要求:

手边有个1.8寸的TFT SPI屏,显示芯片ST7735,拿来测试。

应用程序 使用的 TFT LCD 屏可以被替换,但需要满足3个条件:

  1. Device Table 中 要预先设定 该 TFT LCD 屏的设备信息。

W803的Device Table位于G:\bsp\wm_iot_sdk\components\wm_dt\config\w803,已有定义,如:

\[dev\]

dev_name = "nv3041a_spi"

init_cfg = {init_level = "app", init_priority = 0}

spi_cfg = {mode = 0, freq = 40000000, pin_cs = {pin_num = 27, pin_mux = "fun5", dir = "output", pupd = "float"}}

pin_lcd_reset = 26

pin_lcd_dcx = 25

pin_lcd_led = 24

spi_device = "sdspi"

gpio_device = "gpio"

\[dev\]

dev_name = "st7735_spi"

init_cfg = {init_level = "app", init_priority = 0}

spi_cfg = {mode = 0, freq = 15000000, pin_cs = {pin_num = 27, pin_mux = "fun5", dir = "output", pupd = "float"}}

pin_lcd_reset = 26

pin_lcd_dcx = 25

pin_lcd_led = 24

spi_device = "sdspi"

gpio_device = "gpio"

执行wm.py devconfig查询到的GPIO配置:

TFT LCD 配置说明

对于 TFT LCD,包含如下选项:

  • pin_lcd_reset 表示 TFT LCD 屏幕的复位引脚,选择用哪个引脚来重置显示模块,取值为 GPIO 引脚编号,可取值为从 0 到 45。
  • pin_lcd_dcx 表示 TFT LCD 屏幕的数据/命令选择引脚,选择用哪个引脚来区分,取值为 GPIO 引脚编号,可取值为从 0 到 45。
  • pin_lcd_led 表示 TFT LCD 屏幕的背光控制引脚,选择用哪个引脚来控制屏幕的背光亮灭,取值为 GPIO 引脚编号,可取值为从 0 到 45。
  1. 此应用参考程序 引用 wm_drv_tft_lcd_cfg.h 中 的宏定义 WM_LVGL_LCD_MODULE_NAME,

#define LCD_DEVICE_NAME WM_CFG_TFT_LCD_DEVICE_NAME

其值应配置成 Device Table 中已预设的 TFT LCD 屏设备 的设备名。 并在 menuconfig -> PERIPHERALS -> TFT LCD -> LCD Device 中选中 LCD 设备, 或者在 prj.config 中直接定义所需选中 LCD 设备的 Compile 开关,如 CONFIG_COMPONENT_DRIVER_LCD_NV3041A_SPI=y 。

c) 该 TFT LCD 屏的设备驱动 需要适配好,主要是其驱动实现的 ops 函数需要实现,并关联到 Device Table 中 dt_hw_table_entry[] 中。

执行wm.py devconfig后,显示调整主控芯片为w803后的devicetable,其中:

采用ST7735显示驱动:

还需要修改G:\bsp\wm_iot_sdk\components\driver\include\wm_drv_tft_lcd_cfg.h,适配屏幕大小。

本例修改如下:

#elif defined(CONFIG_COMPONENT_DRIVER_LCD_ST7735_SPI)

/* User need to check the ST7735 LCD Model's GM mode pin selection which descripted on ST7735's Datasheet.

* GM[2:0]=000 , 132RGB x 162 resolution

* GM[2:0]=011 , 128RGB x 160 resolution

*/

#define WM_CFG_TFT_LCD_DEVICE_NAME DEV_NAME_ST7735_SPI

#define WM_CFG_TFT_LCD_X_RESOLUTION 130

#define WM_CFG_TFT_LCD_Y_RESOLUTION 162

#define WM_CFG_TFT_LCD_ROTATION 0

#define WM_CFG_TFT_LCD_PIXEL_WIDTH 2 //RGB565(2 Bytes)

  1. 引脚连接:

硬件配置 存储在 Device Table 中,包含 SDIO 设备的引脚定义 和 SDIO(SPI Mode) 时钟设定 以及 TFT LCD 屏设备的其他引脚定义。 SDIO 设备 及 TFT LCD 屏设备 可在 Device Table中 通过设备名 进行定义查询。 Device Table 的定义文件是 wm_dt_hw.c,但具体可能会因为此工程所引用的设备表文件不同而由差异。

下图为 W803 的 GPIO 序号 与 ST7735 PIN 的对应关系 示例, 实际应该参考Device Table中的配置。

GPIO序号 引脚编号 连接描述 ST7735 PIN
WM_GPIO_NUM_22 PB6 CLK SCL
WM_GPIO_NUM_23 PB7 MOSI SDA
WM_GPIO_NUM_27 PB11 CS CS
WM_GPIO_NUM_26 PB10 RESET RES
WM_GPIO_NUM_25 PB9 DCX DC/DO
WM_GPIO_NUM_24 PB8 LED BK

编译和烧录

示例位置:examples\tft_lcd\tft_lcd_lvgl

Demo 场景的选择 是在 menuconfig -> LVGL -> Demos 中选中所需的 Demos选项,或者在 prj.config 中直接定义所需选中 Demo 场景的 Compile 开关,比如:打开 CONFIG_LV_USE_DEMO_STRESS=y。 需要注意的是,为了避免运行冲突, 不能同时打开两个及以上的 Demo 场景的宏定义开关。

编译时,请注意选择 CONFIG_BUILD_TYPE_XXX 以及 确认所引用的 Device Table 需要与所实验的开发板相匹配。 为了更高的画面显示效率,用户可通过 device table 将 RCC CPU Clock 设定成较高的值,比如:240MHz。

编译、烧录等操作请参考:快速入门

运行结果

成功运行将输出如下日志

I\] (10) main: ver: 2.2-beta.2 build at Feb 23 2025 19:38:05 \[I\] (11) main: boot reason 0 \[I\] (11) main: heap size 220656(215.48KB) \[I\] (11) main: flash size 0x200000(2MB) W803: \[I\] (451) lvgl_example: LCD x_resolution = 130 \[I\] (452) lvgl_example: LCD y_resolution = 162 \[I\] (452) lvgl_example: LCD rotation = 0 **其他可选演示功能** 可选演示功能1: 客制化 Memeoy malloc/realloc 函数,从 PSRAM 中分配 LVGL 所需的 heap 空间。 硬件上,须确保 pSRAM 元件有正确接到 测试平台上。 软件上,可启用 prj.config 中的如下选项(默认关闭), 或者在 menuconfig UI界面中 选择启用。 CONFIG_COMPONENT_DRIVER_PSRAM_ENABLED=y CONFIG_LV_MEM_CUSTOM=y CONFIG_LV_MEM_CUSTOM_INCLUDE="wm_lv_port_mem.h" 说明:考虑到 pSRAM 访问效率弱于 sRAM, 打开此功能后,可能 LVGL 的画面显示速度会降低。 可选演示功能2: 启用 CLI 模块,通过 CLI 查询工程运行时状态 软件上,可启用 prj.config 中的如下选项(默认打开), 或者在 menuconfig UI界面中 选择启用。 CONFIG_COMPONENT_CLI_ENABLED=y CONFIG_CLI_COMMANDS_SYSTEM=y 说明:CLI 为 debug 用途,在用户工程中的量产版本 可以考虑关闭。 如下是上电后,通过 Uart0(默认 CLI 端口,可通过 menuconfig 调整), 输入 help 命令 呈现出的 CLI 命令. W801S: help COMMAND LIST: cls -- clear command line help -- show help info log -- log level cmd heap -- show heap tracing free -- show free heap size task -- show task list reboot -- reboot system version -- show sdk version info partition -- partition table cmd ++**设备表简介**++ 设备表当前支持两种使用方式: 使用 TOML 文件配置,这是当前 推荐 的使用方式 使用 C 语言文件配置,这是传统的使用方式 对于这两种方式,使用者任选其一即可,默认使用 TOML 文件配置。 使用 TOML 文件配置 TOML 文件是一种文本格式的配置文件, 它的语义明显易于阅读,而且支持添加注释信息,非常方便人类阅读使用。 TOML 文件有用一套完整的语法规范,当前语法详情可参阅: TOML v1.0.0-rc.2 https://doc.winnermicro.net/w800/zh_CN/latest/component_guides/device_table/toml_spec_v1.0.0-rc.2.html WM IoT SDK 当前使用的 TOML 配置文件默认位置为 components/wm_dt/config/\/device_table.toml, 当工程根目录下存在 device_table.toml 文件时,会优先使用工程根目录下的 device_table.toml 文件。 当用户需要修改配置文件时,不推荐直接修改组件目录中的 device_table.toml 默认文件, 而是推荐从组件目录中复制一份至工程根目录,修改工程根目录下的 device_table.toml 文件。 device_table.toml 文件可用任意文本编辑工具进行编辑,但对于部分编辑器可能需要安装插件才能支持语法显示,此处不再介绍。 当启动编译后,构建系统首先会将检查项目根目录下是否有 device_table.toml 文件,如果有则将此 device_table.toml 文件复制为 build/device_table/device_table.toml,之后将 始终 使用 build/device_table/device_table.toml 文件作为当前的配置,脚本会将 build/device_table/device_table.toml 文件转为 C 代码后参与编译,转换的 C 代码在 build/device_table/ 路径下。 如果项目根目录下不存在 device_table.toml 文件,则选择将 components/wm_dt/config/\/device_table.toml 复制为 build/device_table/device_table.toml,之后的流程同上。 当开发完成之后,可以使用命令 wm.py saveconfig 将当前调好的设备表配置保存为工程根目录下的 device_table.toml 文件。 ++**设备表配置网页配置系统**++ 为了进一步简化对 device_table.toml 文件的配置,提供了一套网页系统,通过网页用户可以直接在网页进行勾选、输入等操作,而无需关心 TOML 文件规范和 SDK 中的设备属性。 使用时,可执行命令 wm.py devconfig 自动打开网页。 对于非桌面环境的用户则不能使用此命令,只能选择手动编辑 device_table.toml 文件或 C 代码方式。 网页中显示的内容,受到 menuconfig 菜单中的 SoC 类型和驱动选项影响,可能因为不同的 SoC 类型或裁剪了驱动而显示不同。 **Enumerations** ***enum* wm_lcd_rotate_t** Enumeration with tft lcd display rotation. *Values:* ***enumerator* LCD_ROTATION_NONE** NOMAL without display rotation ***enumerator* LCD_ROTATION_90_DEGREE** 90 degree rotation for the display ***enumerator* LCD_ROTATION_180_DEGREE[Á](https://doc.winnermicro.net/w800/zh_CN/latest/api_reference/driver/tft_lcd.html#_CPPv4N15wm_lcd_rotate_t23LCD_ROTATION_180_DEGREEE "Á")** 180 degree rotation for the display ***enumerator* LCD_ROTATION_270_DEGREE** 270 degree rotation for the display ***enumerator* LCD_ROTATION_MAX** The max number of rotation enum w803-1.8寸TFT_LCD_LVGL测试

相关推荐
可待电子单片机设计定制(论文)1 小时前
【STM32设计】基于STM32的智能门禁管理系统(指纹+密码+刷卡+蜂鸣器报警)(代码+资料+论文)
stm32·单片机·嵌入式硬件
不可思议迷宫3 小时前
Verilog编程实现一个分秒计数器
单片机·嵌入式硬件·fpga开发
life_yangzi4 小时前
关于单片机IAP升级的那点事儿|智能设置中断向量表
单片机·嵌入式硬件
古希腊掌握嵌入式的神5 小时前
[物联网iot]对比WIFI、MQTT、TCP、UDP通信协议
网络·物联网·网络协议·tcp/ip·udp
了一li6 小时前
STM32实现一个简单电灯
stm32·单片机·嵌入式硬件
march_birds10 小时前
FreeRTOS 与 RT-Thread 事件组对比分析
c语言·单片机·算法·系统架构
小麦嵌入式10 小时前
Linux驱动开发实战(十一):GPIO子系统深度解析与RGB LED驱动实践
linux·c语言·驱动开发·stm32·嵌入式硬件·物联网·ubuntu
触角0101000111 小时前
STM32F103低功耗模式深度解析:从理论到应用实践(上) | 零基础入门STM32第九十二步
驱动开发·stm32·单片机·嵌入式硬件·物联网
昊虹AI笔记12 小时前
使用STM32CubeMX和Keil在STM32上创建并运行一个简单的FreeRTOS多任务程序
stm32·单片机·嵌入式硬件
王光环12 小时前
单片机使用printf,不用微库
单片机·嵌入式硬件