/* * Copyright (c) 2006-2021, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date Author Notes * 2025-12-06 Administrator the first version */ #ifndef DRIVERS_INCLUDE_LTDC_H_ #define DRIVERS_INCLUDE_LTDC_H_ #include #include #include #include #include "stm32h7xx_hal.h" /* 选择是否使用8寸800X1280RGB屏 * 0: 没有使用8寸RGB屏 * 1: 使用8寸RGB屏 */ #define RGB_80_8001280 0 /* 默认不使用8寸800X1280RGB屏 */ /* LCD LTDC重要参数集 */ typedef struct { uint32_t pwidth; /* LTDC面板的宽度,固定参数,不随显示方向改变,如果为0,说明没有任何RGB屏接入 */ uint32_t pheight; /* LTDC面板的高度,固定参数,不随显示方向改变 */ uint16_t hsw; /* 水平同步宽度 */ uint16_t vsw; /* 垂直同步宽度 */ uint16_t hbp; /* 水平后廊 */ uint16_t vbp; /* 垂直后廊 */ uint16_t hfp; /* 水平前廊 */ uint16_t vfp; /* 垂直前廊 */ uint8_t activelayer; /* 当前层编号:0/1 */ uint8_t dir; /* 0,竖屏;1,横屏; */ uint16_t width; /* LTDC宽度 */ uint16_t height; /* LTDC高度 */ uint32_t pixsize; /* 每个像素所占字节数 */ uint8_t pixformat; /* 颜色像素格式 */ }_ltdc_dev; extern _ltdc_dev lcdltdc; /* 管理LCD LTDC参数 */ extern LTDC_HandleTypeDef g_ltdc_handle; /* LTDC句柄 */ extern DMA2D_HandleTypeDef g_dma2d_handle; /* DMA2D句柄 */ #define LTDC_PIXFORMAT_ARGB8888 0X00 /* ARGB8888格式 */ #define LTDC_PIXFORMAT_RGB888 0X01 /* RGB888格式 */ #define LTDC_PIXFORMAT_RGB565 0X02 /* RGB565格式 */ #define LTDC_PIXFORMAT_ARGB1555 0X03 /* ARGB1555格式 */ #define LTDC_PIXFORMAT_ARGB4444 0X04 /* ARGB4444格式 */ #define LTDC_PIXFORMAT_L8 0X05 /* L8格式 */ #define LTDC_PIXFORMAT_AL44 0X06 /* AL44格式 */ #define LTDC_PIXFORMAT_AL88 0X07 /* AL88格式 */ /******************************************************************************************/ /* LTDC_DE/VSYNC/HSYNC/CLK/BL/RST 引脚 定义 * LTDC_R0~R7, G0~G7, B0~B7,由于引脚太多,就不在这里定义了,直接在ltcd_init里面修改.所以在移植的时候, * 除了改这6个IO口, 还得改ltcd_init里面的R0~R7, G0~G7, B0~B7所在的IO口. */ #define LTDC_DE_GPIO_PORT GPIOF #define LTDC_DE_GPIO_PIN GPIO_PIN_10 #define LTDC_DE_GPIO_CLK_ENABLE() do{ __HAL_RCC_GPIOF_CLK_ENABLE(); }while(0) /* 所在IO口时钟使能 */ #define LTDC_VSYNC_GPIO_PORT GPIOI #define LTDC_VSYNC_GPIO_PIN GPIO_PIN_9 #define LTDC_VSYNC_GPIO_CLK_ENABLE() do{ __HAL_RCC_GPIOI_CLK_ENABLE(); }while(0) /* 所在IO口时钟使能 */ #define LTDC_HSYNC_GPIO_PORT GPIOI #define LTDC_HSYNC_GPIO_PIN GPIO_PIN_10 #define LTDC_HSYNC_GPIO_CLK_ENABLE() do{ __HAL_RCC_GPIOI_CLK_ENABLE(); }while(0) /* 所在IO口时钟使能 */ #define LTDC_CLK_GPIO_PORT GPIOG #define LTDC_CLK_GPIO_PIN GPIO_PIN_7 #define LTDC_CLK_GPIO_CLK_ENABLE() do{ __HAL_RCC_GPIOG_CLK_ENABLE(); }while(0) /* 所在IO口时钟使能 */ #define LTDC_BL_GPIO_PORT GPIOD #define LTDC_BL_GPIO_PIN GPIO_PIN_12 #define LTDC_BL_GPIO_CLK_ENABLE() do{ __HAL_RCC_GPIOD_CLK_ENABLE(); }while(0) /* 所在IO口时钟使能 */ #define LTDC_RST_GPIO_PORT GPIOD #define LTDC_RST_GPIO_PIN GPIO_PIN_11 #define LTDC_RST_GPIO_CLK_ENABLE() do{ __HAL_RCC_GPIOD_CLK_ENABLE(); }while(0) /* 所在IO口时钟使能 */ /* 定义颜色像素格式,一般用RGB565 */ #define LTDC_PIXFORMAT LTDC_PIXFORMAT_RGB565 /* 定义默认背景层颜色 */ #define LTDC_BACKLAYERCOLOR 0X00000000 /* LTDC帧缓冲区首地址,这里定义在SDRAM里面. */ #define LTDC_FRAME_BUF_ADDR 0XC0000000 /* LTDC背光控制 */ #define LTDC_BL(x) do{ x ? \ HAL_GPIO_WritePin(LTDC_BL_GPIO_PORT, LTDC_BL_GPIO_PIN, GPIO_PIN_SET) : \ HAL_GPIO_WritePin(LTDC_BL_GPIO_PORT, LTDC_BL_GPIO_PIN, GPIO_PIN_RESET); \ }while(0) /* LTDC复位引脚 */ #define LTDC_RST(x) do{ x ? \ HAL_GPIO_WritePin(LTDC_RST_GPIO_PORT, LTDC_RST_GPIO_PIN, GPIO_PIN_SET) : \ HAL_GPIO_WritePin(LTDC_RST_GPIO_PORT, LTDC_RST_GPIO_PIN, GPIO_PIN_RESET); \ }while(0) /******************************************************************************************/ void ltdc_switch(uint8_t sw); /* LTDC开关 */ void ltdc_layer_switch(uint8_t layerx, uint8_t sw); /* 层开关 */ void ltdc_select_layer(uint8_t layerx); /* 层选择 */ void ltdc_display_dir(uint8_t dir); /* LTDC显示方向设置 */ void ltdc_draw_point(uint16_t x, uint16_t y, uint32_t color); /* LTDC画点函数 */ uint32_t ltdc_read_point(uint16_t x, uint16_t y); /* LTDC读点函数 */ void ltdc_fill(uint16_t sx, uint16_t sy, uint16_t ex, uint16_t ey, uint32_t color); /* 矩形单色填充, DMA2D填充 */ void ltdc_color_fill(uint16_t sx, uint16_t sy, uint16_t ex, uint16_t ey, uint16_t *color); /* 矩形彩色填充, DMA2D填充 */ void ltdc_clear(uint32_t color); /* LTDC清屏函数 */ uint8_t ltdc_clk_set(uint32_t pll3n, uint32_t pll3m, uint32_t pll3r); /* LTDC时钟配置 */ void ltdc_layer_window_config(uint8_t layerx, uint16_t sx, uint16_t sy, uint16_t width, uint16_t height); /* LTDC层窗口设置 */ void ltdc_layer_parameter_config(uint8_t layerx, uint32_t bufaddr, uint8_t pixformat, uint8_t alpha, uint8_t alpha0, uint8_t bfac1, uint8_t bfac2, uint32_t bkcolor); /* LTDC层基本参数设置 */ uint16_t ltdc_panelid_read(void); /* LTDC 面板ID读取函数 */ int ltdc_init(void); /* LTDC初始化函数 */ #endif /* DRIVERS_INCLUDE_LTDC_H_ */