cmcu为stm32h743IIt6
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

130 lines
6.7 KiB

/*
* 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 <rtthread.h>
#include <rtdevice.h>
#include <board.h>
#include <drivers/pin.h>
#include "stm32h7xx_hal.h"
/* 选择是否使用8寸800X1280RGB屏
* 0: 使8RGB屏
* 1: 使8RGB屏
*/
#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里面修改.,
* 6IO口, 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_ */