You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ESP32-S3-GEEK集成LCD屏幕编程黑屏故障求助

ESP32-S3-GEEK集成LCD黑屏问题求助

正在为自带集成显示屏的ESP32-S3-GEEK开发板编写LCD驱动程序,严格遵循官方文档操作后仍无法正常工作。烧录代码后ESP32进入循环,但LCD屏幕始终处于黑屏状态。

相关硬件信息

ESP32-S3-GEEK开发板自带集成LCD,其原理图包含完整引脚映射。

使用代码

#include <stdio.h>
#include <inttypes.h>
#include "sdkconfig.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_chip_info.h"
#include "esp_system.h"

// LCD相关头文件
#include "esp_lcd_panel_io.h"      // 用于面板I/O函数,如esp_lcd_new_panel_io_spi
#include "esp_lcd_panel_vendor.h"  // 用于厂商特定面板,如esp_lcd_new_panel_st7789
#include "esp_lcd_types.h"         // 用于LCD特定类型(如esp_lcd_panel_handle_t)
#include "hal/lcd_types.h"         // 用于色彩空间及其他LCD相关定义
#include "driver/gpio.h"
#include "esp_lcd_panel_rgb.h"
#include "esp_lcd_panel_vendor.h"
#include "esp_lcd_panel_ops.h" // 注:这是之前遗漏的必要库

// 根据硬件连接定义引脚
#define LCD_HOST    SPI2_HOST      // LCD使用SPI2
#define PIN_NUM_MOSI 16            // MOSI引脚
#define PIN_NUM_CLK  17            // 时钟引脚
#define PIN_NUM_CS   15            // 片选引脚
#define PIN_NUM_DC   13            // 数据/命令引脚
#define PIN_NUM_RST  14            // 复位引脚
#define PIN_NUM_BL   12            // 背光引脚


void app_main(void)
{

    printf("初始化LCD...\n"); // 测试打印信息

    // SPI总线配置
    spi_bus_config_t buscfg = {
        .mosi_io_num = PIN_NUM_MOSI,
        .miso_io_num = -1,         // LCD不使用MISO
        .sclk_io_num = PIN_NUM_CLK,
        .quadwp_io_num = -1,
        .quadhd_io_num = -1,
        //.max_transfer_sz = EXAMPLE_LCD_H_RES * 80 * sizeof(uint16_t), // 单次SPI事务最多传输80行像素(假设像素为RGB565格式)
    };
    ESP_ERROR_CHECK(spi_bus_initialize(LCD_HOST, &buscfg, SPI_DMA_CH_AUTO)); // 启用DMA功能

    // SPI LCD面板配置
    esp_lcd_panel_io_handle_t io_handle = NULL;
    esp_lcd_panel_io_spi_config_t io_config = {
        .dc_gpio_num = PIN_NUM_DC,
        .cs_gpio_num = PIN_NUM_CS,
        .pclk_hz = 500 * 1000,  // 1MHz,可按需调整
        .spi_mode = 0,
        .trans_queue_depth = 10,
    };
    // 将LCD挂载到SPI总线
    ESP_ERROR_CHECK(esp_lcd_new_panel_io_spi((esp_lcd_spi_bus_handle_t)LCD_HOST, &io_config, &io_handle));


    // LCD面板设备配置
    esp_lcd_panel_handle_t panel_handle = NULL;
    esp_lcd_panel_dev_config_t panel_config = {
        .reset_gpio_num = PIN_NUM_RST,
        .color_space = ESP_LCD_COLOR_SPACE_RGB,
        .bits_per_pixel = 16,
    };
    // 创建ST7789型LCD面板句柄,关联SPI IO设备句柄
    ESP_ERROR_CHECK(esp_lcd_new_panel_st7789(io_handle, &panel_config, &panel_handle));

    // 复位并初始化LCD面板
    ESP_ERROR_CHECK(esp_lcd_panel_reset(panel_handle));
    ESP_ERROR_CHECK(esp_lcd_panel_init(panel_handle));

    // 开启背光
    gpio_set_direction(PIN_NUM_BL, GPIO_MODE_OUTPUT);
    gpio_set_level(PIN_NUM_BL, 1);  // 设置为1开启背光

    // 红色矩形尺寸定义
    #define RECT_X_START  0    // 起始X坐标
    #define RECT_Y_START  0    // 起始Y坐标
    #define RECT_WIDTH    500  // 矩形宽度
    #define RECT_HEIGHT   500  // 矩形高度
    
    // 为红色矩形分配内存缓冲区
    size_t num_pixels = RECT_WIDTH * RECT_HEIGHT;
    uint16_t *rectangle_buffer = malloc(num_pixels * sizeof(uint16_t));
    if (rectangle_buffer == NULL) {
        printf("矩形缓冲区内存分配失败\n");
        return; // 处理分配错误
    }

    // 将缓冲区填充为红色(RGB565格式)
    for (size_t i = 0; i < num_pixels; i++) {
        rectangle_buffer[i] = 0xF800; // 红色
    }

    // 在LCD上绘制红色矩形
    ESP_ERROR_CHECK(esp_lcd_panel_draw_bitmap(panel_handle, RECT_X_START, RECT_Y_START, RECT_WIDTH, RECT_HEIGHT, rectangle_buffer));

    printf("LCD初始化完成\n");

    vTaskDelay(5000 / portTICK_PERIOD_MS);  // 等待5秒

    esp_restart();

}

已采取的排查步骤

  • 对照原理图核对引脚映射,并尝试修改引脚分配;
  • 查阅ESP-IDF官方LCD文档并自行翻译为中文内容。

内容的提问来源于stack exchange,提问作者fubiii11

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 18:32:05