LISA Display 显示屏驱动示例

功能说明

演示如何使用 LISA Display 驱动通过 SPI 4-Wire 接口驱动 ST7789P3 LCD 显示屏,实现全屏颜色填充和 PWM 背光亮度控制。

新特性

  • SPI 4-Wire 总线: 使用标准 SPI 接口 + D/C 引脚控制命令/数据模式

  • PWM 背光控制: 通过 PWM 输出实现背光亮度无级调节

  • 动态颜色切换: 循环显示红、绿、蓝三种颜色

  • 亮度渐变: 背光亮度从 0% 逐步增加到 99% 循环变化

硬件连接

SPI 接口(GPIOB)

  • PB5: SPI1 CLK(时钟)

  • PB3: SPI1 MOSI(数据)

  • PB1: LCD CS(片选,软件控制)

  • PB0: LCD D/C(数据/命令选择)

控制引脚(GPIOA)

  • PA1: LCD RST(复位)

  • PA0: LCD 背光 PWM

其他引脚(GPIOB)

  • PB8: LCD TE(帧同步,可选)

使用场景

适用于需要驱动 SPI 接口 LCD 显示屏的应用场景,如智能穿戴设备、小型显示终端等。本示例展示了完整的显示屏初始化、全屏刷新和背光控制流程。

示例步骤

  1. 配置 GPIO 和 SPI 引脚复用

  2. 获取 GPIO、SPI、PWM、Display 设备

  3. 配置 Display 总线参数(SPI 频率、CS/DC 引脚、背光 PWM)

  4. 关联总线配置到 Display 设备

  5. 获取显示屏分辨率,分配帧缓冲区

  6. 关闭 blanking,开始显示

  7. 循环切换颜色并调整背光亮度

编译

重要提示:在编译前,请先确认您使用的开发板型号。SDK 目前支持以下开发板:

  • arcs_evb - ARCS EVB 评估板

  • arcs_mini - ARCS Mini 开发板

根据您的开发板型号,选择对应的编译命令:

在示例目录下执行编译:

# 使用 arcs_evb 开发板
./build.sh -C -DBOARD=arcs_evb

# 或使用 arcs_mini 开发板
./build.sh -C -DBOARD=arcs_mini

Note

如果在 SDK 根目录执行,需要指定示例路径:

# 使用 arcs_evb 开发板
./build.sh -C -S samples/<示例路径> -DBOARD=arcs_evb

# 或使用 arcs_mini 开发板
./build.sh -C -S samples/<示例路径> -DBOARD=arcs_mini

Note

确保已安装对应的工具链。

烧录

编译完成后,使用 SDK tools 目录下的 cskburn 工具烧录固件:

./tools/burn/cskburn -s /dev/ttyUSB0 -b 3000000 0x0 build/arcs.bin -C arcs

Note

烧录参数说明

  • -s /dev/ttyUSB0:串口设备路径,需要根据实际情况修改 - Linux 系统:通常是 /dev/ttyUSB0/dev/ttyACM0 - 可通过 ls /dev/tty* 命令查看可用串口设备 - 不同开发板或 USB 转串口芯片可能使用不同的设备名

  • -b 3000000:烧录波特率(3Mbps)

  • 0x0:烧录起始地址

  • build/arcs.bin:编译生成的固件路径

  • -C arcs:芯片类型

注意事项

  • 确保开发板已正确连接到电脑

  • 如果无法识别串口设备,请检查 USB 连接线是否正常,或尝试其他 USB 端口

预期输出

终端输出:

Display sample started
Display capabilities: 240 x 320

显示屏效果:

  • 屏幕每秒切换一次颜色(红 → 绿 → 蓝 → 红 …)

  • 背光亮度逐渐增加(0% → 99% 循环)

核心 API

API

说明

lisa_device_get()

获取设备实例(GPIO、SPI、PWM、Display)

lisa_display_attach_bus()

关联总线配置到显示设备

lisa_display_get_capabilities()

获取显示屏分辨率等参数

lisa_display_blanking_off()

关闭 blanking,开始显示

lisa_display_write()

写入帧缓冲区数据到显示屏

lisa_display_set_brightness()

设置背光亮度(0-100)

关键代码

/* 配置 Display 总线 */
lisa_display_config_t display_config = {
    .bus_type = LISA_DISPLAY_BUS_SPI_4WIRE,
    .bus_config = {
        .spi_4wire = {
            .spi_dev = lisa_device_get("spi1"),
            .cs_gpio = gpiob_dev,
            .cs_pin = LCD_CS_PIN,
            .dc_gpio = gpiob_dev,
            .dc_pin = LCD_CD_PIN,
            .spi_freq = 50 * 1000 * 1000, // 50MHz
        }
    },
    .backlight = {
        .type = LISA_DISPLAY_BACKLIGHT_TYPE_PWM,
        .config.pwm = {
            .channel = 0,
            .dev = lisa_device_get("pwm0"),
            .freq = 2000
        }
    },
    .rst_gpio = gpioa_dev,
    .rst_pin = LCD_RST_PIN,
};

/* 关联总线配置 */
lisa_display_attach_bus(display_device, &display_config);

/* 写入帧数据 */
lisa_display_write(display_device, 0, 0, &desc, buffer);

/* 设置背光亮度 */
lisa_display_set_brightness(display_device, brightness);

配置说明

Kconfig 配置

CONFIG_LISA_DISPLAY_DEVICE=y           # 启用 Display 设备
CONFIG_LISA_DISPLAY_PANEL_ST7789P3=y   # 使用 ST7789P3 面板驱动
CONFIG_PANEL_ST7789P3_WIDTH=240        # 屏幕宽度
CONFIG_PANEL_ST7789P3_HEIGHT=320       # 屏幕高度
CONFIG_LISA_DISPLAY_BUS_SPI_4WIRE=y    # 启用 SPI 4-Wire 总线

依赖设备

  • GPIO: gpioagpiob(用于 RST、CS、DC、TE 引脚控制)

  • SPI: spi1(用于数据传输)

  • PWM: pwm0(用于背光控制)

注意事项

  1. 引脚配置: 示例中重写了 lisa_gpioa_pinmux()lisa_gpiob_pinmux()lisa_spi1_pinmux() 函数,确保引脚复用正确

  2. 内存分配: 帧缓冲区使用 lisa_mem_alloc() 从 PSRAM 分配,需确保 CONFIG_PSRAM_HEAP_SIZE 足够大

  3. SPI 频率: 示例使用 50MHz,实际频率需根据屏幕规格和走线质量调整

  4. 背光范围: lisa_display_set_brightness() 参数范围为 0-100,表示百分比

  5. 颜色格式: 使用 RGB565 格式,每像素 2 字节

文件说明

  • src/main.c - 示例主程序

  • prj.conf - Kconfig 配置

  • CMakeLists.txt - 构建配置