# Display RGB ST7701S 示例 ## 功能说明 本示例演示如何在 `venusa_rd_evb` 上通过 LISA Display 统一接口驱动 ST7701S RGB 屏幕。 示例使用 RGB 并行总线传输 RGB565 像素数据,并使用 `spi_sw0` 软件 9-bit SPI 向 ST7701S 下发初始化命令。 SDIO pad 复用为 GPIOB 后,由 LISA SPI 软件设备控制 SCLK/MOSI,`cmd_bus_sw_spi` 负责编码 D/C 位并通过 GPIOB 控制 CS。面板初始化序列通过 `panel_init_params` 覆盖为自己的初始化序列。 ## 硬件连接 本示例面向 `venusa_rd_evb` 的 ST7701S RGB 屏硬件。 ### RGB 数据通道 RGB 数据通道使用 RGB565 输出: - **PA2**: PCLK - **PA20**: VSYNC - **PA19**: HSYNC - **PA30**: DE - **PA7 ~ PA3**: R3 ~ R7 - **PA13 ~ PA8**: G2 ~ G7 - **PA18 ~ PA14**: B3 ~ B7 ### ST7701S 命令通道 ST7701S 初始化命令使用复用为 GPIOB 的 SDIO pad 模拟 9-bit SPI: - **SDIO_CLK / GPIOB 10**: SCL - **SDIO_CMD / GPIOB 11**: SDA - **SDIO_DAT3 / GPIOB 15**: CS - **PA0**: RESET ## 示例步骤 1. 重定向 `lisa_rgb_pinmux()`,配置 venusa RGB565 数据线。 2. 重定向 `lisa_gpioa_pinmux()`,配置 ST7701S reset 引脚。 3. 重定向 `lisa_gpiob_pinmux()`,将 SDIO_CLK、SDIO_CMD、SDIO_DAT3 复用为 GPIOB。 4. 获取 `display`、`rgb0`、`gpioa`、`gpiob` 和 `spi_sw0` 设备。 5. 配置 `lisa_display_config_t`: - 数据总线为 `LISA_DISPLAY_BUS_RGB` - panel 为 `st7701s` - 命令总线为 `LISA_DISPLAY_CMD_BUS_SW_SPI` - 命令 SPI 设备为 `spi_sw0`,CS 使用 GPIOB 15 - `panel_init_params` 使用 venusa 480x800 ST7701S 初始化序列 6. 调用 `lisa_display_attach_bus()` 完成 RGB 总线、命令总线和 ST7701S panel 初始化。 7. 获取显示能力,分配 RGB565 帧缓冲。 8. 循环绘制纯色、彩条和渐变图案,并调用 `lisa_display_write()` 刷新整屏。 ## 编译 ```{eval-rst} .. include:: /sample_build.rst ``` 示例构建目标板型为 `venusa_rd_evb`: ```bash ./build.sh -C -S samples/drivers/devices/lisa_display/rgb_display -DBOARD=venusa_rd_evb ``` ## 烧录 ```{eval-rst} .. include:: /sample_flash.rst ``` ## 预期输出 **终端输出:** ```text === LISA Display RGB ST7701S example === SPI command bus configured: freq=62500 Hz, mode=0, data_bits=9 st7701s initialized Display capabilities: 480 x 800 Framebuffer allocated: 0x... (size: 768000 bytes) Pattern 0: Red screen Starting pattern display loop Pattern 1: Green screen Pattern 2: Blue screen Pattern 3: White screen Pattern 4: Color bars Pattern 5: Gradient ... ``` **显示屏效果:** - 上电后显示红色整屏。 - 每 2 秒切换一次图案。 - 图案顺序为绿色、蓝色、白色、彩条、渐变,然后循环。 ## 核心 API | API | 说明 | |-----|------| | `lisa_device_get()` | 获取 `display`、`rgb0`、`gpioa`、`gpiob` 和 `spi_sw0` 设备 | | `lisa_device_ready()` | 检查设备是否初始化完成 | | `lisa_display_attach_bus()` | 关联 RGB 总线、命令总线和 ST7701S panel | | `lisa_display_get_capabilities()` | 获取屏幕分辨率和像素格式 | | `lisa_display_write()` | 写入 RGB565 帧缓冲数据 | | `lisa_display_blanking_off()` | 打开屏幕显示 | | `lisa_mem_alloc()` | 从堆中分配帧缓冲 | ## 配置说明 关键 Kconfig 配置如下: ```kconfig CONFIG_LISA_DEVICE=y CONFIG_LISA_GPIO_DEVICE=y CONFIG_LISA_GPIOA=y CONFIG_LISA_GPIOB=y CONFIG_LISA_DISPLAY_DEVICE=y CONFIG_LISA_DISPLAY_PANEL_ST7701S=y CONFIG_PANEL_ST7701S_WIDTH=480 CONFIG_PANEL_ST7701S_HEIGHT=800 # 不需要旋转功能, 覆盖默认配置节省SRAM CONFIG_ROTATE_BUF_MAX_HEIGHT=16 CONFIG_LISA_RGB_DEVICE=y CONFIG_LISA_DISPLAY_BUS_RGB=y CONFIG_LISA_DISPLAY_CMD_BUS_SW_SPI=y CONFIG_LISA_SPI_SW0=y CONFIG_HEAP_SIZE=0x6000 CONFIG_PSRAM_HEAP_SIZE=0x500000 ``` ## 注意事项 1. 本示例仅面向 `venusa_rd_evb` 的 ST7701S RGB 屏硬件。 2. RGB 输出使用 RGB565 格式,单帧缓冲大小为 `480 x 800 x 2 = 768000` 字节。 3. 示例不配置 PWM 背光,避免与 RGB 数据线复用冲突。 4. 通过 `panel_init_params` 覆盖了 panel 内置默认序列,此初始化序列仅在 P0397BR009-V5 RGB 屏验证过。 5. SDIO pad 已复用为 GPIOB,不能同时用于 SDMMC/SDIO。 ## 文件说明 - `src/main.c` - 示例主程序 - `prj.conf` - Kconfig 配置 - `sample.yaml` - 样例构建配置 - `CMakeLists.txt` - 构建配置