LCD驱动

ST7789

端口

基本上存在两种驱动方法 SPI和8080 8bit接口

需要使用的寄存器是一样的

引脚名 功能 SPI 8080 8bit
BLK 背光(1开0关)
RST 复位(1启动0复位)
CS_NE 片选
DC_RS 数据/地址
SPI_SCK 时钟 ×
SPI_MOSI 发送 ×
SPI_MISO 接收 ×
D0-D7 并行数据 ×
WR NWE写数据(上升沿有效) ×
RD NOE读数据(上升沿有效) ×

SPI

数据宽度8bits 其余默认即可

GPIO等级调到最高

SPI_DMA

DMA设置 默认即可 打开中断

SPI设置和上方相同

8080_GPIO

设置一整个GPIO组 例如PD0-PD7

可以整个GPIO组写加快速度

8080_FMC

设置为LCD 寄存器选择随意引脚即可

数据宽度8bits

注意时序 1-5即可 其余默认

片选 起始地址 中止地址
NE1 0x60000000 0x63FFFFFF
NE2 0x64000000 0x67FFFFFF
NE3 0x68000000 0x6BFFFFFF
NE4 0x6C000000 0x6FFFFFFF

APIs

宏定义

c 复制代码
// 显示屏长宽和方向
#define TFT_ST7789_w 240
#define TFT_ST7789_h 320
#define TFT_ST7789_Dir 1

// 以下3选1
#define TFT_ST7789_SPI
// #define TFT_ST7789_8080_GPIO
// #define TFT_ST7789_8080_FMC

// 背光
#define TFT_ST7789_BLK_GPIOx GPIOA
#define TFT_ST7789_BLK_Pin GPIO_PIN_4

// 复位
#define TFT_ST7789_RST_GPIOx GPIOC
#define TFT_ST7789_RST_Pin GPIO_PIN_5

#ifdef TFT_ST7789_8080_FMC

#define TFT_ST7789_CMD_ARDD (*(__IO uint8_t *)((uint32_t)0x60000000))
#define TFT_ST7789_DAT_ARDD (*(__IO uint8_t *)((uint32_t)0x60000000 + (1 << 19)))//8bit Ax=>x A19=>19

#endif

#if defined(TFT_ST7789_SPI) || defined(TFT_ST7789_8080_GPIO)

// 片选
#define TFT_ST7789_CS_GPIOx GPIOC
#define TFT_ST7789_CS_Pin GPIO_PIN_11

// 数据/地址
#define TFT_ST7789_DCRS_GPIOx GPIOC
#define TFT_ST7789_DCRS_Pin GPIO_PIN_10

#endif

#ifdef TFT_ST7789_8080_GPIO

#define TFT_ST7789_DAT_GPIOx GPIOD // 传输数据的GPIO组 0-7

// 写使能
#define TFT_ST7789_WR_GPIOx GPIOC
#define TFT_ST7789_WR_Pin GPIO_PIN_12

// 读使能
#define TFT_ST7789_RD_GPIOx GPIOB
#define TFT_ST7789_RD_Pin GPIO_PIN_5

#endif

#ifdef TFT_ST7789_SPI
// 硬件SPI
extern SPI_HandleTypeDef hspi1;
#define TFT_ST7789_hSPI hspi1
// 使用DMA
#define TFT_ST7789_SPI_DMA
// #define TFT_ST7789_SPI_DMA_IT
#endif

IO控制

控制背光和复位控制

c 复制代码
/**
 * @brief 控制背光开关
 * @param en 1-打开 0-关闭
 * @author HZ12138
 * @date 2025-02-26 18:49:16
 */
void TFT_ST7789_BLK(uint8_t en)
{
    if (en)
        HAL_GPIO_WritePin(TFT_ST7789_BLK_GPIOx, TFT_ST7789_BLK_Pin, GPIO_PIN_SET);
    else
        HAL_GPIO_WritePin(TFT_ST7789_BLK_GPIOx, TFT_ST7789_BLK_Pin, GPIO_PIN_RESET);
}

/**
 * @brief 复位控制
 * @param en 1-打开 0-关闭
 * @author HZ12138
 * @date 2025-02-26 18:56:21
 */
void TFT_ST7789_RST(uint8_t en)
{
    if (en)
        HAL_GPIO_WritePin(TFT_ST7789_RST_GPIOx, TFT_ST7789_RST_Pin, GPIO_PIN_SET);
    else
        HAL_GPIO_WritePin(TFT_ST7789_RST_GPIOx, TFT_ST7789_RST_Pin, GPIO_PIN_RESET);
}

使用SPI和8080 8bits GPIO需要使用

c 复制代码
#if defined(TFT_ST7789_SPI) || defined(TFT_ST7789_8080_GPIO)
/**
 * @brief 数据/命令控制
 * @param en 1-打开 0-关闭
 * @author HZ12138
 * @date 2025-02-26 18:55:59
 */
void TFT_ST7789_DCRS(uint8_t en)
{
    if (en)
        HAL_GPIO_WritePin(TFT_ST7789_DCRS_GPIOx, TFT_ST7789_DCRS_Pin, GPIO_PIN_SET);
    else
        HAL_GPIO_WritePin(TFT_ST7789_DCRS_GPIOx, TFT_ST7789_DCRS_Pin, GPIO_PIN_RESET);
}
#endif

写数据

SPI写函数使用 hal库的API即可

如下

复制代码
HAL_SPI_Transmit(&TFT_ST7789_hSPI, &data, 1, 1000);
HAL_SPI_Transmit_DMA(&TFT_ST7789_hSPI, (uint8_t *)buf, len);

8080 8bits GPIO 写数据函数

c 复制代码
#ifdef TFT_ST7789_8080_GPIO
/**
 * @brief 写数据
 * @param data 数据
 * @author HZ12138
 * @date 2025-02-26 18:55:59
 */
void TFT_ST7789_Write_bus(uint8_t data)
{
    uint32_t temp;
    temp = TFT_ST7789_DAT_GPIOx->ODR;
    temp &= 0xffffff00;
    temp |= data;

    TFT_ST7789_WR_GPIOx->BSRR = (uint32_t)TFT_ST7789_WR_Pin << 16; // WR 0
    TFT_ST7789_DAT_GPIOx->ODR = temp;
    TFT_ST7789_WR_GPIOx->BSRR = TFT_ST7789_WR_Pin; // WR 1
}
#endif

8080 8bits FMC

直接向指定内存处写入即可

c 复制代码
TFT_ST7789_DAT_ARDD = buf[i];
TFT_ST7789_CMD_ARDD = buf[i];

发送命令/数据

发送命令
c 复制代码
/**
 * @brief 发送命令
 * @param data 数据
 * @author HZ12138
 * @date 2025-02-26 18:56:40
 */
void TFT_ST7789_CMD_Write(uint8_t data)
{
#ifdef TFT_ST7789_8080_FMC
    TFT_ST7789_CMD_ARDD = data;
#endif

#if defined(TFT_ST7789_SPI) || defined(TFT_ST7789_8080_GPIO)
    TFT_ST7789_DCRS(0);
    TFT_ST7789_CS_GPIOx->BSRR = (uint32_t)TFT_ST7789_CS_Pin << 16; // CS 0
#endif

#ifdef TFT_ST7789_8080_GPIO
    TFT_ST7789_Write_bus(data);
#endif

#ifdef TFT_ST7789_SPI
    HAL_SPI_Transmit(&TFT_ST7789_hSPI, &data, 1, 1000);
#endif

#if defined(TFT_ST7789_SPI) || defined(TFT_ST7789_8080_GPIO)
    TFT_ST7789_CS_GPIOx->BSRR = TFT_ST7789_CS_Pin; // CS 1
    TFT_ST7789_DCRS(1);
#endif
}
发送数据
c 复制代码
/**
 * @brief 发送数据
 * @param data 数据
 * @author HZ12138
 * @date 2025-02-26 18:59:03
 */
void TFT_ST7789_DAT_Write(uint8_t data)
{

#ifdef TFT_ST7789_8080_FMC
    TFT_ST7789_DAT_ARDD = data;
#endif

#if defined(TFT_ST7789_SPI) || defined(TFT_ST7789_8080_GPIO)
    TFT_ST7789_CS_GPIOx->BSRR = (uint32_t)TFT_ST7789_CS_Pin << 16; // CS 0
#endif

#ifdef TFT_ST7789_8080_GPIO
    TFT_ST7789_Write_bus(data);
#endif

#ifdef TFT_ST7789_SPI
    HAL_SPI_Transmit(&TFT_ST7789_hSPI, &data, 1, 1000);
#endif
#if defined(TFT_ST7789_SPI) || defined(TFT_ST7789_8080_GPIO)
    TFT_ST7789_CS_GPIOx->BSRR = TFT_ST7789_CS_Pin; // CS 1
#endif
}
批量写
c 复制代码
/**
 * @brief 批量写
 * @param buf 数据
 * @param len 长度
 * @author HZ12138
 * @date 2025-02-26 19:01:24
 */
void TFT_ST7789_write_len(uint8_t *buf, uint16_t len)
{
#ifdef TFT_ST7789_8080_FMC
    for (int i = 0; i < len; i++)
        TFT_ST7789_DAT_ARDD = buf[i];
#endif

#ifdef TFT_ST7789_SPI
    HAL_SPI_Transmit(&TFT_ST7789_hSPI, (uint8_t *)buf, len, 0xfffff);
#endif

#ifdef TFT_ST7789_8080_GPIO
    for (int i = 0; i < len; i++)
        TFT_ST7789_Write_bus(buf[i]);
#endif
}
批量写 中断方式(SPI DMA专用)
c 复制代码
/**
 * @brief SPI批量写 中断方式
 * @param buf 数据
 * @param len 长度
 * @author HZ12138
 * @date 2025-02-27 22:24:45
 */
void TFT_ST7789_SPI_len_IT(uint8_t *buf, uint16_t len)
{
#ifdef TFT_ST7789_SPI_DMA
    HAL_SPI_Transmit_DMA(&TFT_ST7789_hSPI, (uint8_t *)buf, len);
#endif
}

写寄存器

先通过CMD发寄存器地址 再发数据

c 复制代码
/**
 * @brief 写寄存器
 * @param reg 命令
 * @param data 数据
 * @author HZ12138
 * @date 2025-02-26 18:59:17
 */
void TFT_ST7789_WriteReg(uint8_t reg, uint8_t data)
{
    TFT_ST7789_CMD_Write(reg);
    TFT_ST7789_DAT_Write(data);
}

设置窗口

主要是0x2A 0x2B 0x2C 三个寄存器

分别设置x坐标窗口 y坐标窗口 和开始数据传输

c 复制代码
/**
 * @brief 设置窗口
 * @param xStar 开始X
 * @param yStar 开始Y
 * @param xEnd 结束X
 * @param yEnd 结束Y
 * @author HZ12138
 * @date 2025-02-26 18:59:36
 */
void TFT_ST7789_SetWindows(uint16_t xStar, uint16_t yStar, uint16_t xEnd, uint16_t yEnd)
{
    TFT_ST7789_CMD_Write(0x2A);
    TFT_ST7789_DAT_Write((xStar) >> 8);
    TFT_ST7789_DAT_Write(xStar);
    TFT_ST7789_DAT_Write((xEnd) >> 8);
    TFT_ST7789_DAT_Write(xEnd);

    TFT_ST7789_CMD_Write(0x2B);
    TFT_ST7789_DAT_Write((yStar) >> 8);
    TFT_ST7789_DAT_Write(yStar);
    TFT_ST7789_DAT_Write((yEnd) >> 8);
    TFT_ST7789_DAT_Write(yEnd);

    TFT_ST7789_CMD_Write(0x2C);
}

设置扫描方向

c 复制代码
/**
 * @brief 设置方向
 * @param direction 方向 0-0° 1-90° 2-180° 3-270°
 * @author HZ12138
 * @date 2025-02-26 18:59:56
 */
void TFT_ST7789_direction(uint8_t direction)
{

    switch (direction % 4)
    {
    case 0:
        TFT_ST7789_width = TFT_ST7789_w;
        TFT_ST7789_height = TFT_ST7789_h;
        TFT_ST7789_WriteReg(0x36, 0); // BGR==1,MY==0,MX==0,MV==0
        break;
    case 1:
        TFT_ST7789_width = TFT_ST7789_h;
        TFT_ST7789_height = TFT_ST7789_w;
        TFT_ST7789_WriteReg(0x36, (1 << 6) | (1 << 5)); // BGR==1,MY==1,MX==0,MV==1
        break;
    case 2:
        TFT_ST7789_width = TFT_ST7789_w;
        TFT_ST7789_height = TFT_ST7789_h;
        TFT_ST7789_WriteReg(0x36, (1 << 6) | (1 << 7)); // BGR==1,MY==0,MX==0,MV==0
        break;
    case 3:
        TFT_ST7789_width = TFT_ST7789_h;
        TFT_ST7789_height = TFT_ST7789_w;
        TFT_ST7789_WriteReg(0x36, (1 << 7) | (1 << 5)); // BGR==1,MY==1,MX==0,MV==1
        break;
    default:
        break;
    }
}

填充

SPI ,8080 8bits 填充函数

c 复制代码
/**
 * @brief 填充
 * @param xStar 开始X
 * @param yStar 开始Y
 * @param xEnd 结束X
 * @param yEnd 结束Y
 * @param buf 填充数据
 * @author HZ12138
 * @date 2025-02-26 19:01:41
 */
void TFT_ST7789_Fill(uint16_t xStar, uint16_t yStar, uint16_t xEnd, uint16_t yEnd, uint16_t *buf)
{
    uint32_t len = (xEnd - xStar + 1) * (yEnd - yStar + 1);

    TFT_ST7789_SetWindows(xStar, yStar, xEnd, yEnd);
    // TFT_ST7789_SetWindows(0, 0, 100 - 1, 100 - 1);

#if defined(TFT_ST7789_SPI) || defined(TFT_ST7789_8080_GPIO)
    TFT_ST7789_CS_GPIOx->BSRR = (uint32_t)TFT_ST7789_CS_Pin << 16; // CS 0
    TFT_ST7789_DCRS(1);
#endif

    TFT_ST7789_write_len((uint8_t *)buf, 2 * len);

#if defined(TFT_ST7789_SPI) || defined(TFT_ST7789_8080_GPIO)
    TFT_ST7789_CS_GPIOx->BSRR = TFT_ST7789_CS_Pin; // CS 1
#endif
    TFT_ST7789_SetWindows(0, 0, TFT_ST7789_width - 1, TFT_ST7789_height - 1);
}

SPI DMA专用函数
在SPI DMA 发送完成函数中需要调用 TFT_ST7789_Fill_DMAIT_end

c 复制代码
/**
 * @brief 开始DMA中断填充
 * @param xStar 开始X
 * @param yStar 开始Y
 * @param xEnd 结束X
 * @param yEnd 结束Y
 * @param buf 填充数据
 * @author HZ12138
 * @date 2025-02-27 22:25:20
 */
void TFT_ST7789_Fill_DMAIT_start(uint16_t xStar, uint16_t yStar, uint16_t xEnd, uint16_t yEnd, uint16_t *buf)
{
    uint32_t len = (xEnd - xStar + 1) * (yEnd - yStar + 1);

    TFT_ST7789_SetWindows(xStar, yStar, xEnd, yEnd);
    // TFT_ST7789_SetWindows(0, 0, 100 - 1, 100 - 1);

    TFT_ST7789_CS_GPIOx->BSRR = (uint32_t)TFT_ST7789_CS_Pin << 16; // CS 0
    TFT_ST7789_DCRS(1);

    TFT_ST7789_SPI_len_IT((uint8_t *)buf, 2 * len);
}
/**
 * @brief 中断填充结束(在SPI完成函数中调用 HAL_SPI_TxCpltCallback )
 * @author HZ12138
 * @date 2025-02-27 22:25:42
 */
void TFT_ST7789_Fill_DMAIT_end(void)
{
    TFT_ST7789_CS_GPIOx->BSRR = TFT_ST7789_CS_Pin; // CS 1
}
c 复制代码
void HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *hspi)
{
}

清屏

c 复制代码
/**
 * @brief 清屏
 * @param color 颜色
 * @author HZ12138
 * @date 2025-02-26 19:02:02
 */
void TFT_ST7789_Clear(uint16_t color)
{
    TFT_ST7789_SetWindows(0, 0, TFT_ST7789_width - 1, TFT_ST7789_height - 1);
#if defined(TFT_ST7789_SPI) || defined(TFT_ST7789_8080_GPIO)
    TFT_ST7789_CS_GPIOx->BSRR = (uint32_t)TFT_ST7789_CS_Pin << 16; // CS 0
    TFT_ST7789_DCRS(1);
#endif

    for (int i = 0; i < TFT_ST7789_height; i++)
    {
        for (int m = 0; m < TFT_ST7789_width; m++)
        {
#ifdef TFT_ST7789_8080_FMC
            TFT_ST7789_DAT_ARDD = color & 0xff;
            TFT_ST7789_DAT_ARDD = (color >> 8) & 0xff;
#endif

#ifdef TFT_ST7789_SPI
            HAL_SPI_Transmit(&TFT_ST7789_hSPI, (uint8_t *)&color, 2, 0xff);
#endif

#ifdef TFT_ST7789_8080_GPIO
            TFT_ST7789_Write_bus(color);
            TFT_ST7789_Write_bus(color >> 8);
#endif
        }
    }
#if defined(TFT_ST7789_SPI) || defined(TFT_ST7789_8080_GPIO)
    TFT_ST7789_CS_GPIOx->BSRR = TFT_ST7789_CS_Pin; // CS 1
#endif
}

初始化

c 复制代码
/**
 * @brief 初始化
 * @author HZ12138
 * @date 2025-02-26 19:02:20
 */
void TFT_ST7789_Init(void)
{
#ifdef TFT_ST7789_8080_GPIO
    HAL_GPIO_WritePin(TFT_ST7789_RD_GPIOx, TFT_ST7789_RD_Pin, GPIO_PIN_SET);
#endif

    TFT_ST7789_RST(0);
    HAL_Delay(100);
    TFT_ST7789_RST(1);
    HAL_Delay(100);

    TFT_ST7789_CMD_Write(0x36);
    TFT_ST7789_DAT_Write(0x00);

    TFT_ST7789_CMD_Write(0x3A);
    TFT_ST7789_DAT_Write(0x05);

    TFT_ST7789_CMD_Write(0xB2);
    TFT_ST7789_DAT_Write(0x0C);
    TFT_ST7789_DAT_Write(0x0C);
    TFT_ST7789_DAT_Write(0x00);
    TFT_ST7789_DAT_Write(0x33);
    TFT_ST7789_DAT_Write(0x33);

    TFT_ST7789_CMD_Write(0xB7);
    TFT_ST7789_DAT_Write(0x35);

    TFT_ST7789_CMD_Write(0xBB);
    TFT_ST7789_DAT_Write(0x17);

    TFT_ST7789_CMD_Write(0xC0);
    TFT_ST7789_DAT_Write(0x2C);

    TFT_ST7789_CMD_Write(0xC2);
    TFT_ST7789_DAT_Write(0x01);

    TFT_ST7789_CMD_Write(0xC3);
    TFT_ST7789_DAT_Write(0x12);

    TFT_ST7789_CMD_Write(0xC4);
    TFT_ST7789_DAT_Write(0x20);

    TFT_ST7789_CMD_Write(0xC6);
    TFT_ST7789_DAT_Write(0x0F);

    TFT_ST7789_CMD_Write(0xD0);
    TFT_ST7789_DAT_Write(0xA4);
    TFT_ST7789_DAT_Write(0xA1);

    TFT_ST7789_CMD_Write(0xE0);
    TFT_ST7789_DAT_Write(0xD0);
    TFT_ST7789_DAT_Write(0x04);
    TFT_ST7789_DAT_Write(0x0D);
    TFT_ST7789_DAT_Write(0x11);
    TFT_ST7789_DAT_Write(0x13);
    TFT_ST7789_DAT_Write(0x2B);
    TFT_ST7789_DAT_Write(0x3F);
    TFT_ST7789_DAT_Write(0x54);
    TFT_ST7789_DAT_Write(0x4C);
    TFT_ST7789_DAT_Write(0x18);
    TFT_ST7789_DAT_Write(0x0D);
    TFT_ST7789_DAT_Write(0x0B);
    TFT_ST7789_DAT_Write(0x1F);
    TFT_ST7789_DAT_Write(0x23);

    TFT_ST7789_CMD_Write(0xE1);
    TFT_ST7789_DAT_Write(0xD0);
    TFT_ST7789_DAT_Write(0x04);
    TFT_ST7789_DAT_Write(0x0C);
    TFT_ST7789_DAT_Write(0x11);
    TFT_ST7789_DAT_Write(0x13);
    TFT_ST7789_DAT_Write(0x2C);
    TFT_ST7789_DAT_Write(0x3F);
    TFT_ST7789_DAT_Write(0x44);
    TFT_ST7789_DAT_Write(0x51);
    TFT_ST7789_DAT_Write(0x2F);
    TFT_ST7789_DAT_Write(0x1F);
    TFT_ST7789_DAT_Write(0x1F);
    TFT_ST7789_DAT_Write(0x20);
    TFT_ST7789_DAT_Write(0x23);

    TFT_ST7789_CMD_Write(0x21);

    TFT_ST7789_CMD_Write(0x11);

    HAL_Delay(120);

    TFT_ST7789_CMD_Write(0x29);

    TFT_ST7789_BLK(1);

    TFT_ST7789_CMD_Write(0xB0);
    TFT_ST7789_DAT_Write(0x00);
    TFT_ST7789_DAT_Write(0x18);

    TFT_ST7789_direction(TFT_ST7789_Dir);
}

文件

TFT_ST7789.h

c 复制代码
#ifndef TFT_ST7789_H
#define TFT_ST7789_H
#include "main.h"
#include "string.h"

/*
需要:
1.硬件SPI
    全双工主控
    8bit数据大小
    CPOL LOW
    CPHA 1Edge
    CS软件控制
    H750:Master Keep Io State 主控IO保持状态 启用
2.GPIO 4个
    全推挽输出即可

注意所有IO包括SPI的选到最高等级
    */
// 显示屏长宽和方向
#define TFT_ST7789_w 240
#define TFT_ST7789_h 320
#define TFT_ST7789_Dir 1

// 以下3选1
#define TFT_ST7789_SPI
// #define TFT_ST7789_8080_GPIO
// #define TFT_ST7789_8080_FMC

// 背光
#define TFT_ST7789_BLK_GPIOx GPIOA
#define TFT_ST7789_BLK_Pin GPIO_PIN_4

// 复位
#define TFT_ST7789_RST_GPIOx GPIOC
#define TFT_ST7789_RST_Pin GPIO_PIN_5

#ifdef TFT_ST7789_8080_FMC

#define TFT_ST7789_CMD_ARDD (*(__IO uint8_t *)((uint32_t)0x60000000))
#define TFT_ST7789_DAT_ARDD (*(__IO uint8_t *)((uint32_t)0x60000000 + (1 << 19)))

#endif

#if defined(TFT_ST7789_SPI) || defined(TFT_ST7789_8080_GPIO)

// 片选
#define TFT_ST7789_CS_GPIOx GPIOC
#define TFT_ST7789_CS_Pin GPIO_PIN_11

// 数据/地址
#define TFT_ST7789_DCRS_GPIOx GPIOC
#define TFT_ST7789_DCRS_Pin GPIO_PIN_10

#endif

#ifdef TFT_ST7789_8080_GPIO

#define TFT_ST7789_DAT_GPIOx GPIOD // 传输数据的GPIO组 0-7

// 写使能
#define TFT_ST7789_WR_GPIOx GPIOC
#define TFT_ST7789_WR_Pin GPIO_PIN_12

// 读使能
#define TFT_ST7789_RD_GPIOx GPIOB
#define TFT_ST7789_RD_Pin GPIO_PIN_5

#endif

#ifdef TFT_ST7789_SPI
// 硬件SPI
extern SPI_HandleTypeDef hspi1;
#define TFT_ST7789_hSPI hspi1
// 使用DMA
#define TFT_ST7789_SPI_DMA
// #define TFT_ST7789_SPI_DMA_IT
#endif

void TFT_ST7789_BLK(uint8_t en);
void TFT_ST7789_Init(void);
void TFT_ST7789_Fill(uint16_t xStar, uint16_t yStar, uint16_t xEnd, uint16_t yEnd, uint16_t *buf);
void TFT_ST7789_Clear(uint16_t color);

void TFT_ST7789_SPI_len_IT(uint8_t *buf, uint16_t len);
void TFT_ST7789_SetWindows(uint16_t xStar, uint16_t yStar, uint16_t xEnd, uint16_t yEnd);
	
void TFT_ST7789_Fill_DMAIT_start(uint16_t xStar, uint16_t yStar, uint16_t xEnd, uint16_t yEnd, uint16_t *buf);
void TFT_ST7789_Fill_DMAIT_end(void);

#endif

TFT_ST7789.c

c 复制代码
#include "TFT_ST7789.h"

uint16_t TFT_ST7789_width;
uint16_t TFT_ST7789_height;

/**
 * @brief 控制背光开关
 * @param en 1-打开 0-关闭
 * @author HZ12138
 * @date 2025-02-26 18:49:16
 */
void TFT_ST7789_BLK(uint8_t en)
{
    if (en)
        HAL_GPIO_WritePin(TFT_ST7789_BLK_GPIOx, TFT_ST7789_BLK_Pin, GPIO_PIN_SET);
    else
        HAL_GPIO_WritePin(TFT_ST7789_BLK_GPIOx, TFT_ST7789_BLK_Pin, GPIO_PIN_RESET);
}

/**
 * @brief 复位控制
 * @param en 1-打开 0-关闭
 * @author HZ12138
 * @date 2025-02-26 18:56:21
 */
void TFT_ST7789_RST(uint8_t en)
{
    if (en)
        HAL_GPIO_WritePin(TFT_ST7789_RST_GPIOx, TFT_ST7789_RST_Pin, GPIO_PIN_SET);
    else
        HAL_GPIO_WritePin(TFT_ST7789_RST_GPIOx, TFT_ST7789_RST_Pin, GPIO_PIN_RESET);
}

#if defined(TFT_ST7789_SPI) || defined(TFT_ST7789_8080_GPIO)
/**
 * @brief 数据/命令控制
 * @param en 1-打开 0-关闭
 * @author HZ12138
 * @date 2025-02-26 18:55:59
 */
void TFT_ST7789_DCRS(uint8_t en)
{
    if (en)
        HAL_GPIO_WritePin(TFT_ST7789_DCRS_GPIOx, TFT_ST7789_DCRS_Pin, GPIO_PIN_SET);
    else
        HAL_GPIO_WritePin(TFT_ST7789_DCRS_GPIOx, TFT_ST7789_DCRS_Pin, GPIO_PIN_RESET);
}
#endif

#ifdef TFT_ST7789_8080_GPIO
/**
 * @brief 写数据
 * @param data 数据
 * @author HZ12138
 * @date 2025-02-26 18:55:59
 */
void TFT_ST7789_Write_bus(uint8_t data)
{
    uint32_t temp;
    temp = TFT_ST7789_DAT_GPIOx->ODR;
    temp &= 0xffffff00;
    temp |= data;

    TFT_ST7789_WR_GPIOx->BSRR = (uint32_t)TFT_ST7789_WR_Pin << 16; // WR 0
    TFT_ST7789_DAT_GPIOx->ODR = temp;
    TFT_ST7789_WR_GPIOx->BSRR = TFT_ST7789_WR_Pin; // WR 1
}
#endif
/**
 * @brief 发送命令
 * @param data 数据
 * @author HZ12138
 * @date 2025-02-26 18:56:40
 */
void TFT_ST7789_CMD_Write(uint8_t data)
{
#ifdef TFT_ST7789_8080_FMC
    TFT_ST7789_CMD_ARDD = data;
#endif

#if defined(TFT_ST7789_SPI) || defined(TFT_ST7789_8080_GPIO)
    TFT_ST7789_DCRS(0);
    TFT_ST7789_CS_GPIOx->BSRR = (uint32_t)TFT_ST7789_CS_Pin << 16; // CS 0
#endif

#ifdef TFT_ST7789_8080_GPIO
    TFT_ST7789_Write_bus(data);
#endif

#ifdef TFT_ST7789_SPI
    HAL_SPI_Transmit(&TFT_ST7789_hSPI, &data, 1, 1000);
#endif

#if defined(TFT_ST7789_SPI) || defined(TFT_ST7789_8080_GPIO)
    TFT_ST7789_CS_GPIOx->BSRR = TFT_ST7789_CS_Pin; // CS 1
    TFT_ST7789_DCRS(1);
#endif
}
/**
 * @brief 发送数据
 * @param data 数据
 * @author HZ12138
 * @date 2025-02-26 18:59:03
 */
void TFT_ST7789_DAT_Write(uint8_t data)
{

#ifdef TFT_ST7789_8080_FMC
    TFT_ST7789_DAT_ARDD = data;
#endif

#if defined(TFT_ST7789_SPI) || defined(TFT_ST7789_8080_GPIO)
    TFT_ST7789_CS_GPIOx->BSRR = (uint32_t)TFT_ST7789_CS_Pin << 16; // CS 0
#endif

#ifdef TFT_ST7789_8080_GPIO
    TFT_ST7789_Write_bus(data);
#endif

#ifdef TFT_ST7789_SPI
    HAL_SPI_Transmit(&TFT_ST7789_hSPI, &data, 1, 1000);
#endif
#if defined(TFT_ST7789_SPI) || defined(TFT_ST7789_8080_GPIO)
    TFT_ST7789_CS_GPIOx->BSRR = TFT_ST7789_CS_Pin; // CS 1
#endif
}

/**
 * @brief 批量写
 * @param buf 数据
 * @param len 长度
 * @author HZ12138
 * @date 2025-02-26 19:01:24
 */
void TFT_ST7789_write_len(uint8_t *buf, uint16_t len)
{
#ifdef TFT_ST7789_8080_FMC
    for (int i = 0; i < len; i++)
        TFT_ST7789_DAT_ARDD = buf[i];
#endif

#ifdef TFT_ST7789_SPI
    HAL_SPI_Transmit(&TFT_ST7789_hSPI, (uint8_t *)buf, len, 0xfffff);
#endif

#ifdef TFT_ST7789_8080_GPIO
    for (int i = 0; i < len; i++)
        TFT_ST7789_Write_bus(buf[i]);
#endif
}
#ifdef TFT_ST7789_SPI

/**
 * @brief SPI批量写 中断方式
 * @param buf 数据
 * @param len 长度
 * @author HZ12138
 * @date 2025-02-27 22:24:45
 */
void TFT_ST7789_SPI_len_IT(uint8_t *buf, uint16_t len)
{
#ifdef TFT_ST7789_SPI_DMA
    HAL_SPI_Transmit_DMA(&TFT_ST7789_hSPI, (uint8_t *)buf, len);
#endif
}

/**
 * @brief 开始DMA中断填充
 * @param xStar 开始X
 * @param yStar 开始Y
 * @param xEnd 结束X
 * @param yEnd 结束Y
 * @param buf 填充数据
 * @author HZ12138
 * @date 2025-02-27 22:25:20
 */
void TFT_ST7789_Fill_DMAIT_start(uint16_t xStar, uint16_t yStar, uint16_t xEnd, uint16_t yEnd, uint16_t *buf)
{
    uint32_t len = (xEnd - xStar + 1) * (yEnd - yStar + 1);

    TFT_ST7789_SetWindows(xStar, yStar, xEnd, yEnd);
    // TFT_ST7789_SetWindows(0, 0, 100 - 1, 100 - 1);

    TFT_ST7789_CS_GPIOx->BSRR = (uint32_t)TFT_ST7789_CS_Pin << 16; // CS 0
    TFT_ST7789_DCRS(1);

    TFT_ST7789_SPI_len_IT((uint8_t *)buf, 2 * len);
}
/**
 * @brief 中断填充结束(在SPI完成函数中调用 HAL_SPI_TxCpltCallback )
 * @author HZ12138
 * @date 2025-02-27 22:25:42
 */
void TFT_ST7789_Fill_DMAIT_end(void)
{
    TFT_ST7789_CS_GPIOx->BSRR = TFT_ST7789_CS_Pin; // CS 1
}
#endif

/**
 * @brief 写寄存器
 * @param reg 命令
 * @param data 数据
 * @author HZ12138
 * @date 2025-02-26 18:59:17
 */
void TFT_ST7789_WriteReg(uint8_t reg, uint8_t data)
{
    TFT_ST7789_CMD_Write(reg);
    TFT_ST7789_DAT_Write(data);
}

/**
 * @brief 设置窗口
 * @param xStar 开始X
 * @param yStar 开始Y
 * @param xEnd 结束X
 * @param yEnd 结束Y
 * @author HZ12138
 * @date 2025-02-26 18:59:36
 */
void TFT_ST7789_SetWindows(uint16_t xStar, uint16_t yStar, uint16_t xEnd, uint16_t yEnd)
{
    TFT_ST7789_CMD_Write(0x2A);
    TFT_ST7789_DAT_Write((xStar) >> 8);
    TFT_ST7789_DAT_Write(xStar);
    TFT_ST7789_DAT_Write((xEnd) >> 8);
    TFT_ST7789_DAT_Write(xEnd);

    TFT_ST7789_CMD_Write(0x2B);
    TFT_ST7789_DAT_Write((yStar) >> 8);
    TFT_ST7789_DAT_Write(yStar);
    TFT_ST7789_DAT_Write((yEnd) >> 8);
    TFT_ST7789_DAT_Write(yEnd);

    TFT_ST7789_CMD_Write(0x2C);
}

/**
 * @brief 设置方向
 * @param direction 方向 0-0° 1-90° 2-180° 3-270°
 * @author HZ12138
 * @date 2025-02-26 18:59:56
 */
void TFT_ST7789_direction(uint8_t direction)
{

    switch (direction % 4)
    {
    case 0:
        TFT_ST7789_width = TFT_ST7789_w;
        TFT_ST7789_height = TFT_ST7789_h;
        TFT_ST7789_WriteReg(0x36, 0); // BGR==1,MY==0,MX==0,MV==0
        break;
    case 1:
        TFT_ST7789_width = TFT_ST7789_h;
        TFT_ST7789_height = TFT_ST7789_w;
        TFT_ST7789_WriteReg(0x36, (1 << 6) | (1 << 5)); // BGR==1,MY==1,MX==0,MV==1
        break;
    case 2:
        TFT_ST7789_width = TFT_ST7789_w;
        TFT_ST7789_height = TFT_ST7789_h;
        TFT_ST7789_WriteReg(0x36, (1 << 6) | (1 << 7)); // BGR==1,MY==0,MX==0,MV==0
        break;
    case 3:
        TFT_ST7789_width = TFT_ST7789_h;
        TFT_ST7789_height = TFT_ST7789_w;
        TFT_ST7789_WriteReg(0x36, (1 << 7) | (1 << 5)); // BGR==1,MY==1,MX==0,MV==1
        break;
    default:
        break;
    }
}
/**
 * @brief 填充
 * @param xStar 开始X
 * @param yStar 开始Y
 * @param xEnd 结束X
 * @param yEnd 结束Y
 * @param buf 填充数据
 * @author HZ12138
 * @date 2025-02-26 19:01:41
 */
void TFT_ST7789_Fill(uint16_t xStar, uint16_t yStar, uint16_t xEnd, uint16_t yEnd, uint16_t *buf)
{
    uint32_t len = (xEnd - xStar + 1) * (yEnd - yStar + 1);

    TFT_ST7789_SetWindows(xStar, yStar, xEnd, yEnd);
    // TFT_ST7789_SetWindows(0, 0, 100 - 1, 100 - 1);

#if defined(TFT_ST7789_SPI) || defined(TFT_ST7789_8080_GPIO)
    TFT_ST7789_CS_GPIOx->BSRR = (uint32_t)TFT_ST7789_CS_Pin << 16; // CS 0
    TFT_ST7789_DCRS(1);
#endif

    TFT_ST7789_write_len((uint8_t *)buf, 2 * len);

#if defined(TFT_ST7789_SPI) || defined(TFT_ST7789_8080_GPIO)
    TFT_ST7789_CS_GPIOx->BSRR = TFT_ST7789_CS_Pin; // CS 1
#endif
    TFT_ST7789_SetWindows(0, 0, TFT_ST7789_width - 1, TFT_ST7789_height - 1);
}

/**
 * @brief 清屏
 * @param color 颜色
 * @author HZ12138
 * @date 2025-02-26 19:02:02
 */
void TFT_ST7789_Clear(uint16_t color)
{
    TFT_ST7789_SetWindows(0, 0, TFT_ST7789_width - 1, TFT_ST7789_height - 1);
#if defined(TFT_ST7789_SPI) || defined(TFT_ST7789_8080_GPIO)
    TFT_ST7789_CS_GPIOx->BSRR = (uint32_t)TFT_ST7789_CS_Pin << 16; // CS 0
    TFT_ST7789_DCRS(1);
#endif

    for (int i = 0; i < TFT_ST7789_height; i++)
    {
        for (int m = 0; m < TFT_ST7789_width; m++)
        {
#ifdef TFT_ST7789_8080_FMC
            TFT_ST7789_DAT_ARDD = color & 0xff;
            TFT_ST7789_DAT_ARDD = (color >> 8) & 0xff;
#endif

#ifdef TFT_ST7789_SPI
            HAL_SPI_Transmit(&TFT_ST7789_hSPI, (uint8_t *)&color, 2, 0xff);
#endif

#ifdef TFT_ST7789_8080_GPIO
            TFT_ST7789_Write_bus(color);
            TFT_ST7789_Write_bus(color >> 8);
#endif
        }
    }
#if defined(TFT_ST7789_SPI) || defined(TFT_ST7789_8080_GPIO)
    TFT_ST7789_CS_GPIOx->BSRR = TFT_ST7789_CS_Pin; // CS 1
#endif
}

/**
 * @brief 初始化
 * @author HZ12138
 * @date 2025-02-26 19:02:20
 */
void TFT_ST7789_Init(void)
{
#ifdef TFT_ST7789_8080_GPIO
    HAL_GPIO_WritePin(TFT_ST7789_RD_GPIOx, TFT_ST7789_RD_Pin, GPIO_PIN_SET);
#endif

    TFT_ST7789_RST(0);
    HAL_Delay(100);
    TFT_ST7789_RST(1);
    HAL_Delay(100);

    TFT_ST7789_CMD_Write(0x36);
    TFT_ST7789_DAT_Write(0x00);

    TFT_ST7789_CMD_Write(0x3A);
    TFT_ST7789_DAT_Write(0x05);

    TFT_ST7789_CMD_Write(0xB2);
    TFT_ST7789_DAT_Write(0x0C);
    TFT_ST7789_DAT_Write(0x0C);
    TFT_ST7789_DAT_Write(0x00);
    TFT_ST7789_DAT_Write(0x33);
    TFT_ST7789_DAT_Write(0x33);

    TFT_ST7789_CMD_Write(0xB7);
    TFT_ST7789_DAT_Write(0x35);

    TFT_ST7789_CMD_Write(0xBB);
    TFT_ST7789_DAT_Write(0x17);

    TFT_ST7789_CMD_Write(0xC0);
    TFT_ST7789_DAT_Write(0x2C);

    TFT_ST7789_CMD_Write(0xC2);
    TFT_ST7789_DAT_Write(0x01);

    TFT_ST7789_CMD_Write(0xC3);
    TFT_ST7789_DAT_Write(0x12);

    TFT_ST7789_CMD_Write(0xC4);
    TFT_ST7789_DAT_Write(0x20);

    TFT_ST7789_CMD_Write(0xC6);
    TFT_ST7789_DAT_Write(0x0F);

    TFT_ST7789_CMD_Write(0xD0);
    TFT_ST7789_DAT_Write(0xA4);
    TFT_ST7789_DAT_Write(0xA1);

    TFT_ST7789_CMD_Write(0xE0);
    TFT_ST7789_DAT_Write(0xD0);
    TFT_ST7789_DAT_Write(0x04);
    TFT_ST7789_DAT_Write(0x0D);
    TFT_ST7789_DAT_Write(0x11);
    TFT_ST7789_DAT_Write(0x13);
    TFT_ST7789_DAT_Write(0x2B);
    TFT_ST7789_DAT_Write(0x3F);
    TFT_ST7789_DAT_Write(0x54);
    TFT_ST7789_DAT_Write(0x4C);
    TFT_ST7789_DAT_Write(0x18);
    TFT_ST7789_DAT_Write(0x0D);
    TFT_ST7789_DAT_Write(0x0B);
    TFT_ST7789_DAT_Write(0x1F);
    TFT_ST7789_DAT_Write(0x23);

    TFT_ST7789_CMD_Write(0xE1);
    TFT_ST7789_DAT_Write(0xD0);
    TFT_ST7789_DAT_Write(0x04);
    TFT_ST7789_DAT_Write(0x0C);
    TFT_ST7789_DAT_Write(0x11);
    TFT_ST7789_DAT_Write(0x13);
    TFT_ST7789_DAT_Write(0x2C);
    TFT_ST7789_DAT_Write(0x3F);
    TFT_ST7789_DAT_Write(0x44);
    TFT_ST7789_DAT_Write(0x51);
    TFT_ST7789_DAT_Write(0x2F);
    TFT_ST7789_DAT_Write(0x1F);
    TFT_ST7789_DAT_Write(0x1F);
    TFT_ST7789_DAT_Write(0x20);
    TFT_ST7789_DAT_Write(0x23);

    TFT_ST7789_CMD_Write(0x21);

    TFT_ST7789_CMD_Write(0x11);

    HAL_Delay(120);

    TFT_ST7789_CMD_Write(0x29);

    TFT_ST7789_BLK(1);

    TFT_ST7789_CMD_Write(0xB0);
    TFT_ST7789_DAT_Write(0x00);
    TFT_ST7789_DAT_Write(0x18);

    TFT_ST7789_direction(TFT_ST7789_Dir);
}

S6D05

8080 16bits 驱动方式 采用FMC驱动

端口

引脚名 功能
BLK 背光(1开0关)
RST 复位(1启动0复位)
CS_NE 片选
RS 数据/地址
D0-D15 并行数据
WR NWE写数据(上升沿有效)
RD NOE读数据(上升沿有效)

FMC

设置为LCD 寄存器选择随意引脚即可

数据宽度16bits

注意时序 1-5即可 其余默认
写数据/命令时需要向特定的地址写入数据即可

片选 起始地址 中止地址
NE1 0x60000000 0x63FFFFFF
NE2 0x64000000 0x67FFFFFF
NE3 0x68000000 0x6BFFFFFF
NE4 0x6C000000 0x6FFFFFFF

APIs

宏定义

c 复制代码
// 显示屏长宽和方向
#define TFT_S6D05_w 480 // 横向
#define TFT_S6D05_h 320 // 竖向

#define TFT_S6D05_Dir 1 // 0/1竖屏 4/7横屏
// 背光
#define TFT_S6D05_BLK_GPIOx GPIOB
#define TFT_S6D05_BLK_Pin GPIO_PIN_15

// 复位
#define TFT_S6D05_RST_GPIOx GPIOB
#define TFT_S6D05_RST_Pin GPIO_PIN_14

#define TFT_S6D05_ADDR_CMD (*(__IO uint16_t *)((uint32_t)0x60000000))
#define TFT_S6D05_ADDR_DAT (*(__IO uint16_t *)((uint32_t)0x60000000 + (1 << 19)))//8bit Ax=>x A19=>19

IO控制

c 复制代码
/**
 * @brief 控制背光开关
 * @param en 1-打开 0-关闭
 * @author HZ12138
 * @date 2025-02-26 18:49:16
 */
void TFT_S6D05_BLK(uint8_t en)
{
    if (en)
        HAL_GPIO_WritePin(TFT_S6D05_BLK_GPIOx, TFT_S6D05_BLK_Pin, GPIO_PIN_SET);
    else
        HAL_GPIO_WritePin(TFT_S6D05_BLK_GPIOx, TFT_S6D05_BLK_Pin, GPIO_PIN_RESET);
}

/**
 * @brief 复位控制
 * @param en 1-打开 0-关闭
 * @author HZ12138
 * @date 2025-02-26 18:56:21
 */
void TFT_S6D05_RST(uint8_t en)
{
    if (en)
        HAL_GPIO_WritePin(TFT_S6D05_RST_GPIOx, TFT_S6D05_RST_Pin, GPIO_PIN_SET);
    else
        HAL_GPIO_WritePin(TFT_S6D05_RST_GPIOx, TFT_S6D05_RST_Pin, GPIO_PIN_RESET);
}

发送数据/命令

发送数据
c 复制代码
/**
 * @brief 写数据
 * @param data 数据
 * @author HZ12138
 * @date 2025-03-06 21:19:32
 */
void TFT_S6D05_DAT_Write(uint16_t data)
{
    TFT_S6D05_ADDR_DAT = data;
}
发送命令
c 复制代码
/**
 * @brief 写命令
 * @param data 命令
 * @author HZ12138
 * @date 2025-03-06 21:19:46
 */
void TFT_S6D05_CMD_Write(uint16_t data)
{
    TFT_S6D05_ADDR_CMD = data;
}

写寄存器

先通过命令口发送寄存器地址,再发数据即可

c 复制代码
/**
 * @brief 写寄存器
 * @param reg 寄存器
 * @param dat 数据
 * @author HZ12138
 * @date 2025-03-06 21:12:33
 */
void TFT_S6D05_RegWrite(uint16_t reg, uint16_t dat)
{
    TFT_S6D05_CMD_Write(reg);
    TFT_S6D05_DAT_Write(dat);
}

设置窗口

主要是0x2A 0x2B 0x2C 三个寄存器

分别设置x坐标窗口 y坐标窗口 和开始数据传输

c 复制代码
/**
 * @brief 设置窗口
 * @param xStar X起始点
 * @param yStar Y起始点
 * @param xEnd X结束点
 * @param yEnd Y结束点
 * @author HZ12138
 * @date 2025-03-06 21:12:16
 */
void TFT_S6D05_SetWindows(uint16_t xStar, uint16_t yStar, uint16_t xEnd, uint16_t yEnd)
{

    TFT_S6D05_CMD_Write(0x2A);
    TFT_S6D05_DAT_Write((xStar) >> 8);
    TFT_S6D05_DAT_Write(xStar);
    TFT_S6D05_DAT_Write((xEnd) >> 8);
    TFT_S6D05_DAT_Write(xEnd);

    TFT_S6D05_CMD_Write(0x2B);
    TFT_S6D05_DAT_Write((yStar) >> 8);
    TFT_S6D05_DAT_Write(yStar);
    TFT_S6D05_DAT_Write((yEnd) >> 8);
    TFT_S6D05_DAT_Write(yEnd);

    TFT_S6D05_CMD_Write(0x2C);
}

设置扫描方向

c 复制代码
/**
 * @brief 设置扫描方向
 * @param dir 扫描方向
 * @author HZ12138
 * @date 2025-03-06 21:11:46
 */
void TFT_S6D05_ScanDir(uint8_t dir)
{
    uint16_t temp = 0;
    switch (dir)
    {
    case 0: // 从左到右,从上到下
        temp |= (0 << 7) | (0 << 6) | (0 << 5);
        break;
    case 1: // 从左到右,从下到上
        temp |= (1 << 7) | (0 << 6) | (0 << 5);
        break;
    case 2: // 从右到左,从上到下
        temp |= (0 << 7) | (1 << 6) | (0 << 5);
        break;
    case 3: // 从右到左,从下到上
        temp |= (1 << 7) | (1 << 6) | (0 << 5);
        break;
    case 4: // 从上到下,从左到右
        temp |= (0 << 7) | (0 << 6) | (1 << 5);
        break;
    case 5: // 从上到下,从右到左
        temp |= (0 << 7) | (1 << 6) | (1 << 5);
        break;
    case 6: // 从下到上,从左到右
        temp |= (1 << 7) | (0 << 6) | (1 << 5);
        break;
    case 7: // 从下到上,从右到左
        temp |= (1 << 7) | (1 << 6) | (1 << 5);
        break;
    }
    temp |= 0X08; // BGR

    TFT_S6D05_RegWrite(0X36, temp);

    TFT_S6D05_SetWindows(0, 0, TFT_S6D05_w - 1, TFT_S6D05_h - 1);
}

清屏

c 复制代码
/**
 * @brief 清屏
 * @param color 颜色
 * @author HZ12138
 * @date 2025-03-06 21:09:26
 */
void TFT_S6D05_Clear(uint16_t color)
{

    TFT_S6D05_SetWindows(0, 0, TFT_S6D05_w - 1, TFT_S6D05_h - 1); // 设置光标位置
    TFT_S6D05_CMD_Write(0x2c);                                    // 开始写入GRAM

    for (int i = 0; i < TFT_S6D05_w; i++)
        for (int j = 0; j < TFT_S6D05_h; j++)
            TFT_S6D05_DAT_Write(color);
}

填充

c 复制代码
/**
 * @brief 填充
 * @param xStar 起始点X坐标
 * @param yStar 起始点Y坐标
 * @param xEnd 终止点X坐标
 * @param yEnd 终止点Y坐标
 * @param buf 填充颜色缓冲区
 * @author HZ12138
 * @date 2025-03-06 21:09:52
 */
void TFT_S6D05_Fill(uint16_t xStar, uint16_t yStar, uint16_t xEnd, uint16_t yEnd, uint16_t *buf)
{
    uint32_t len = (xEnd - xStar + 1) * (yEnd - yStar + 1);
    TFT_S6D05_SetWindows(xStar, yStar, xEnd, yEnd);
    for (uint32_t i = 0; i < len; i++)
        TFT_S6D05_DAT_Write(buf[i]);
    // TFT_S6D05_SetWindows(0, 0, TFT_S6D05_w - 1, TFT_S6D05_h - 1);
}

初始化

c 复制代码
/**
 * @brief 初始化
 * @author HZ12138
 * @date 2025-03-06 20:59:17
 */
void TFT_S6D05_Init(void)
{

    TFT_S6D05_RST(0);
    HAL_Delay(100);
    TFT_S6D05_RST(1);
    TFT_S6D05_BLK(1);
    HAL_Delay(100);

    // S6D05A1  INIT
    TFT_S6D05_CMD_Write(0x0011);
    HAL_Delay(100);
    TFT_S6D05_CMD_Write(0x0013);
    HAL_Delay(100);

    TFT_S6D05_CMD_Write(0x0036);
    TFT_S6D05_DAT_Write(0x0048);

    TFT_S6D05_CMD_Write(0x003A);
    TFT_S6D05_DAT_Write(0x0005);
    //  reg F0 5A 5A
    TFT_S6D05_CMD_Write(0x00F0);
    TFT_S6D05_DAT_Write(0x005A);
    TFT_S6D05_DAT_Write(0x005A);
    // reg F1 5A 5A
    TFT_S6D05_CMD_Write(0x00F1);
    TFT_S6D05_DAT_Write(0x005A);
    TFT_S6D05_DAT_Write(0x005A);
    // reg F7 00 00 10 02 00
    TFT_S6D05_CMD_Write(0x00F7);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0010);
    TFT_S6D05_DAT_Write(0x0002);
    TFT_S6D05_DAT_Write(0x0000);
    // reg F8 11 00
    TFT_S6D05_CMD_Write(0x00F8);
    TFT_S6D05_DAT_Write(0x0011);
    TFT_S6D05_DAT_Write(0x0000);
    // reg F9 17
    TFT_S6D05_CMD_Write(0x00F9);
    TFT_S6D05_DAT_Write(0x0017);
    // reg 44 00 01
    TFT_S6D05_CMD_Write(0x0044);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0001);
    // reg F2
    // 3B 30 03 08
    // 08 08 08 00
    // 08 08 00 00
    // 00 00 30 08
    // 08 08 08
    TFT_S6D05_CMD_Write(0x00F2);
    TFT_S6D05_DAT_Write(0x003b);
    TFT_S6D05_DAT_Write(0x0030);
    TFT_S6D05_DAT_Write(0x0003);
    TFT_S6D05_DAT_Write(0x0008);
    TFT_S6D05_DAT_Write(0x0008);
    TFT_S6D05_DAT_Write(0x0008);
    TFT_S6D05_DAT_Write(0x0008);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0008);
    TFT_S6D05_DAT_Write(0x0008);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0030);
    TFT_S6D05_DAT_Write(0x0008);
    TFT_S6D05_DAT_Write(0x0008);
    TFT_S6D05_DAT_Write(0x0008);
    TFT_S6D05_DAT_Write(0x0008);

    // reg F4
    // 06 00 00 00
    // 00 00 00 00
    // 00 52 02 00
    // 52 02
    TFT_S6D05_CMD_Write(0x00F4);
    TFT_S6D05_DAT_Write(0x0006);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0052);
    TFT_S6D05_DAT_Write(0x0002);
    TFT_S6D05_DAT_Write(0x0000);

    TFT_S6D05_DAT_Write(0x0052);
    TFT_S6D05_DAT_Write(0x0002);
    // reg F5 00 31 54 00 00 04 00 00 31 54?????
    TFT_S6D05_CMD_Write(0x00F5);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0031);
    TFT_S6D05_DAT_Write(0x0054);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0004);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0031);
    TFT_S6D05_DAT_Write(0x0054);
    // reg F6 00 00 08 03 01 00 01 00
    TFT_S6D05_CMD_Write(0x00F6);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0008);
    TFT_S6D05_DAT_Write(0x0003);
    TFT_S6D05_DAT_Write(0x0001);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0001);
    TFT_S6D05_DAT_Write(0x0000);
    // reg FA
    // 04 37 00 20
    // 21 1F 2A 19
    // 28 21 2E 2B
    // 19 00 00 00
    TFT_S6D05_CMD_Write(0x00Fa);
    TFT_S6D05_DAT_Write(0x0004);
    TFT_S6D05_DAT_Write(0x0037);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0020);
    TFT_S6D05_DAT_Write(0x0021);
    TFT_S6D05_DAT_Write(0x001f);
    TFT_S6D05_DAT_Write(0x002a);
    TFT_S6D05_DAT_Write(0x0019);
    TFT_S6D05_DAT_Write(0x0028);
    TFT_S6D05_DAT_Write(0x0021);
    TFT_S6D05_DAT_Write(0x002e);
    TFT_S6D05_DAT_Write(0x002b);
    TFT_S6D05_DAT_Write(0x0019);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0000);
    // reg FB
    // 37 00 0E 2F
    // 30 1F 16 14
    // 30 2A 18 1D
    // 00 00 00 00
    TFT_S6D05_CMD_Write(0x00Fb); // 色调
    TFT_S6D05_DAT_Write(0x0057);
    TFT_S6D05_DAT_Write(0x0022);
    TFT_S6D05_DAT_Write(0x000e);
    TFT_S6D05_DAT_Write(0x002f);
    TFT_S6D05_DAT_Write(0x0030);
    TFT_S6D05_DAT_Write(0x001f);
    TFT_S6D05_DAT_Write(0x0016);
    TFT_S6D05_DAT_Write(0x0014);
    TFT_S6D05_DAT_Write(0x0030);
    TFT_S6D05_DAT_Write(0x002a);
    TFT_S6D05_DAT_Write(0x0018);
    TFT_S6D05_DAT_Write(0x001d);
    TFT_S6D05_DAT_Write(0x0019);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0000);

    HAL_Delay(120);
    TFT_S6D05_CMD_Write(0x0029);

    TFT_S6D05_ScanDir(TFT_S6D05_Dir);
}

文件

TFT_S6D05.h

c 复制代码
#ifndef TFT_S6D05_H_
#define TFT_S6D05_H_
#include "main.h"

// 显示屏长宽和方向
#define TFT_S6D05_w 480 // 横向
#define TFT_S6D05_h 320 // 竖向

#define TFT_S6D05_Dir 1 // 0/1竖屏 4/7横屏
// 背光
#define TFT_S6D05_BLK_GPIOx GPIOB
#define TFT_S6D05_BLK_Pin GPIO_PIN_15

// 复位
#define TFT_S6D05_RST_GPIOx GPIOB
#define TFT_S6D05_RST_Pin GPIO_PIN_14

#define TFT_S6D05_ADDR_CMD (*(__IO uint16_t *)((uint32_t)0x60000000))
#define TFT_S6D05_ADDR_DAT (*(__IO uint16_t *)((uint32_t)0x60100000))

void TFT_S6D05_Init(void);
void TFT_S6D05_Clear(uint16_t color);
void TFT_S6D05_Fill(uint16_t xStar, uint16_t yStar, uint16_t xEnd, uint16_t yEnd, uint16_t *buf);
#endif

TFT_S6D05.c

c 复制代码
#include "TFT_S6D05.h"

/**
 * @brief 控制背光开关
 * @param en 1-打开 0-关闭
 * @author HZ12138
 * @date 2025-02-26 18:49:16
 */
void TFT_S6D05_BLK(uint8_t en)
{
    if (en)
        HAL_GPIO_WritePin(TFT_S6D05_BLK_GPIOx, TFT_S6D05_BLK_Pin, GPIO_PIN_SET);
    else
        HAL_GPIO_WritePin(TFT_S6D05_BLK_GPIOx, TFT_S6D05_BLK_Pin, GPIO_PIN_RESET);
}

/**
 * @brief 复位控制
 * @param en 1-打开 0-关闭
 * @author HZ12138
 * @date 2025-02-26 18:56:21
 */
void TFT_S6D05_RST(uint8_t en)
{
    if (en)
        HAL_GPIO_WritePin(TFT_S6D05_RST_GPIOx, TFT_S6D05_RST_Pin, GPIO_PIN_SET);
    else
        HAL_GPIO_WritePin(TFT_S6D05_RST_GPIOx, TFT_S6D05_RST_Pin, GPIO_PIN_RESET);
}

/**
 * @brief 写命令
 * @param data 命令
 * @author HZ12138
 * @date 2025-03-06 21:19:46
 */
void TFT_S6D05_CMD_Write(uint16_t data)
{
    TFT_S6D05_ADDR_CMD = data;
}

/**
 * @brief 写数据
 * @param data 数据
 * @author HZ12138
 * @date 2025-03-06 21:19:32
 */
void TFT_S6D05_DAT_Write(uint16_t data)
{
    TFT_S6D05_ADDR_DAT = data;
}

/**
 * @brief 写寄存器
 * @param reg 寄存器
 * @param dat 数据
 * @author HZ12138
 * @date 2025-03-06 21:12:33
 */
void TFT_S6D05_RegWrite(uint16_t reg, uint16_t dat)
{
    TFT_S6D05_CMD_Write(reg);
    TFT_S6D05_DAT_Write(dat);
}

/**
 * @brief 设置窗口
 * @param xStar X起始点
 * @param yStar Y起始点
 * @param xEnd X结束点
 * @param yEnd Y结束点
 * @author HZ12138
 * @date 2025-03-06 21:12:16
 */
void TFT_S6D05_SetWindows(uint16_t xStar, uint16_t yStar, uint16_t xEnd, uint16_t yEnd)
{

    TFT_S6D05_CMD_Write(0x2A);
    TFT_S6D05_DAT_Write((xStar) >> 8);
    TFT_S6D05_DAT_Write(xStar);
    TFT_S6D05_DAT_Write((xEnd) >> 8);
    TFT_S6D05_DAT_Write(xEnd);

    TFT_S6D05_CMD_Write(0x2B);
    TFT_S6D05_DAT_Write((yStar) >> 8);
    TFT_S6D05_DAT_Write(yStar);
    TFT_S6D05_DAT_Write((yEnd) >> 8);
    TFT_S6D05_DAT_Write(yEnd);

    TFT_S6D05_CMD_Write(0x2C);
}

/**
 * @brief 设置扫描方向
 * @param dir 扫描方向
 * @author HZ12138
 * @date 2025-03-06 21:11:46
 */
void TFT_S6D05_ScanDir(uint8_t dir)
{
    uint16_t temp = 0;
    switch (dir)
    {
    case 0: // 从左到右,从上到下
        temp |= (0 << 7) | (0 << 6) | (0 << 5);
        break;
    case 1: // 从左到右,从下到上
        temp |= (1 << 7) | (0 << 6) | (0 << 5);
        break;
    case 2: // 从右到左,从上到下
        temp |= (0 << 7) | (1 << 6) | (0 << 5);
        break;
    case 3: // 从右到左,从下到上
        temp |= (1 << 7) | (1 << 6) | (0 << 5);
        break;
    case 4: // 从上到下,从左到右
        temp |= (0 << 7) | (0 << 6) | (1 << 5);
        break;
    case 5: // 从上到下,从右到左
        temp |= (0 << 7) | (1 << 6) | (1 << 5);
        break;
    case 6: // 从下到上,从左到右
        temp |= (1 << 7) | (0 << 6) | (1 << 5);
        break;
    case 7: // 从下到上,从右到左
        temp |= (1 << 7) | (1 << 6) | (1 << 5);
        break;
    }
    temp |= 0X08; // BGR

    TFT_S6D05_RegWrite(0X36, temp);

    TFT_S6D05_SetWindows(0, 0, TFT_S6D05_w - 1, TFT_S6D05_h - 1);
}

/**
 * @brief 清屏
 * @param color 颜色
 * @author HZ12138
 * @date 2025-03-06 21:09:26
 */
void TFT_S6D05_Clear(uint16_t color)
{

    TFT_S6D05_SetWindows(0, 0, TFT_S6D05_w - 1, TFT_S6D05_h - 1); // 设置光标位置
    TFT_S6D05_CMD_Write(0x2c);                                    // 开始写入GRAM

    for (int i = 0; i < TFT_S6D05_w; i++)
        for (int j = 0; j < TFT_S6D05_h; j++)
            TFT_S6D05_DAT_Write(color);
}
/**
 * @brief 填充
 * @param xStar 起始点X坐标
 * @param yStar 起始点Y坐标
 * @param xEnd 终止点X坐标
 * @param yEnd 终止点Y坐标
 * @param buf 填充颜色缓冲区
 * @author HZ12138
 * @date 2025-03-06 21:09:52
 */
void TFT_S6D05_Fill(uint16_t xStar, uint16_t yStar, uint16_t xEnd, uint16_t yEnd, uint16_t *buf)
{
    uint32_t len = (xEnd - xStar + 1) * (yEnd - yStar + 1);
    TFT_S6D05_SetWindows(xStar, yStar, xEnd, yEnd);
    for (uint32_t i = 0; i < len; i++)
        TFT_S6D05_DAT_Write(buf[i]);
    // TFT_S6D05_SetWindows(0, 0, TFT_S6D05_w - 1, TFT_S6D05_h - 1);
}

/**
 * @brief 初始化
 * @author HZ12138
 * @date 2025-03-06 20:59:17
 */
void TFT_S6D05_Init(void)
{

    TFT_S6D05_RST(0);
    HAL_Delay(100);
    TFT_S6D05_RST(1);
    TFT_S6D05_BLK(1);
    HAL_Delay(100);

    // S6D05A1  INIT
    TFT_S6D05_CMD_Write(0x0011);
    HAL_Delay(100);
    TFT_S6D05_CMD_Write(0x0013);
    HAL_Delay(100);

    TFT_S6D05_CMD_Write(0x0036);
    TFT_S6D05_DAT_Write(0x0048);

    TFT_S6D05_CMD_Write(0x003A);
    TFT_S6D05_DAT_Write(0x0005);
    //  reg F0 5A 5A
    TFT_S6D05_CMD_Write(0x00F0);
    TFT_S6D05_DAT_Write(0x005A);
    TFT_S6D05_DAT_Write(0x005A);
    // reg F1 5A 5A
    TFT_S6D05_CMD_Write(0x00F1);
    TFT_S6D05_DAT_Write(0x005A);
    TFT_S6D05_DAT_Write(0x005A);
    // reg F7 00 00 10 02 00
    TFT_S6D05_CMD_Write(0x00F7);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0010);
    TFT_S6D05_DAT_Write(0x0002);
    TFT_S6D05_DAT_Write(0x0000);
    // reg F8 11 00
    TFT_S6D05_CMD_Write(0x00F8);
    TFT_S6D05_DAT_Write(0x0011);
    TFT_S6D05_DAT_Write(0x0000);
    // reg F9 17
    TFT_S6D05_CMD_Write(0x00F9);
    TFT_S6D05_DAT_Write(0x0017);
    // reg 44 00 01
    TFT_S6D05_CMD_Write(0x0044);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0001);
    // reg F2
    // 3B 30 03 08
    // 08 08 08 00
    // 08 08 00 00
    // 00 00 30 08
    // 08 08 08
    TFT_S6D05_CMD_Write(0x00F2);
    TFT_S6D05_DAT_Write(0x003b);
    TFT_S6D05_DAT_Write(0x0030);
    TFT_S6D05_DAT_Write(0x0003);
    TFT_S6D05_DAT_Write(0x0008);
    TFT_S6D05_DAT_Write(0x0008);
    TFT_S6D05_DAT_Write(0x0008);
    TFT_S6D05_DAT_Write(0x0008);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0008);
    TFT_S6D05_DAT_Write(0x0008);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0030);
    TFT_S6D05_DAT_Write(0x0008);
    TFT_S6D05_DAT_Write(0x0008);
    TFT_S6D05_DAT_Write(0x0008);
    TFT_S6D05_DAT_Write(0x0008);

    // reg F4
    // 06 00 00 00
    // 00 00 00 00
    // 00 52 02 00
    // 52 02
    TFT_S6D05_CMD_Write(0x00F4);
    TFT_S6D05_DAT_Write(0x0006);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0052);
    TFT_S6D05_DAT_Write(0x0002);
    TFT_S6D05_DAT_Write(0x0000);

    TFT_S6D05_DAT_Write(0x0052);
    TFT_S6D05_DAT_Write(0x0002);
    // reg F5 00 31 54 00 00 04 00 00 31 54?????
    TFT_S6D05_CMD_Write(0x00F5);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0031);
    TFT_S6D05_DAT_Write(0x0054);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0004);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0031);
    TFT_S6D05_DAT_Write(0x0054);
    // reg F6 00 00 08 03 01 00 01 00
    TFT_S6D05_CMD_Write(0x00F6);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0008);
    TFT_S6D05_DAT_Write(0x0003);
    TFT_S6D05_DAT_Write(0x0001);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0001);
    TFT_S6D05_DAT_Write(0x0000);
    // reg FA
    // 04 37 00 20
    // 21 1F 2A 19
    // 28 21 2E 2B
    // 19 00 00 00
    TFT_S6D05_CMD_Write(0x00Fa);
    TFT_S6D05_DAT_Write(0x0004);
    TFT_S6D05_DAT_Write(0x0037);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0020);
    TFT_S6D05_DAT_Write(0x0021);
    TFT_S6D05_DAT_Write(0x001f);
    TFT_S6D05_DAT_Write(0x002a);
    TFT_S6D05_DAT_Write(0x0019);
    TFT_S6D05_DAT_Write(0x0028);
    TFT_S6D05_DAT_Write(0x0021);
    TFT_S6D05_DAT_Write(0x002e);
    TFT_S6D05_DAT_Write(0x002b);
    TFT_S6D05_DAT_Write(0x0019);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0000);
    // reg FB
    // 37 00 0E 2F
    // 30 1F 16 14
    // 30 2A 18 1D
    // 00 00 00 00
    TFT_S6D05_CMD_Write(0x00Fb); // 色调
    TFT_S6D05_DAT_Write(0x0057);
    TFT_S6D05_DAT_Write(0x0022);
    TFT_S6D05_DAT_Write(0x000e);
    TFT_S6D05_DAT_Write(0x002f);
    TFT_S6D05_DAT_Write(0x0030);
    TFT_S6D05_DAT_Write(0x001f);
    TFT_S6D05_DAT_Write(0x0016);
    TFT_S6D05_DAT_Write(0x0014);
    TFT_S6D05_DAT_Write(0x0030);
    TFT_S6D05_DAT_Write(0x002a);
    TFT_S6D05_DAT_Write(0x0018);
    TFT_S6D05_DAT_Write(0x001d);
    TFT_S6D05_DAT_Write(0x0019);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0000);
    TFT_S6D05_DAT_Write(0x0000);

    HAL_Delay(120);
    TFT_S6D05_CMD_Write(0x0029);

    TFT_S6D05_ScanDir(TFT_S6D05_Dir);
}

NT5510

端口

引脚名 功能
BLK 背光(1开0关)
RST 复位(1启动0复位)
CS_NE 片选
RS 数据/地址
D0-D15 并行数据
WR NWE写数据(上升沿有效)
RD NOE读数据(上升沿有效)

FMC

设置为LCD 寄存器选择随意引脚即可

数据宽度8bits

注意时序 1-5即可 其余默认

片选 起始地址 中止地址
NE1 0x60000000 0x63FFFFFF
NE2 0x64000000 0x67FFFFFF
NE3 0x68000000 0x6BFFFFFF
NE4 0x6C000000 0x6FFFFFFF

APIs

宏定义

c 复制代码
#define TFT_NT5510_AddrReg (*(__IO uint16_t *)((uint32_t)0x60000000))
#define TFT_NT5510_AddrData (*(__IO uint16_t *)((uint32_t)0x60100000))

#define TFT_NT5510_Height 480
#define TFT_NT5510_Width 800
#define TFT_NT5510_dir 5 // 0/3竖屏 5/6横屏

// 背光
#define TFT_NT5510_BLK_GPIOx GPIOB
#define TFT_NT5510_BLK_Pin GPIO_PIN_15

// 复位
#define TFT_NT5510_RST_GPIOx GPIOB
#define TFT_NT5510_RST_Pin GPIO_PIN_14

IO控制

c 复制代码
/**
 * @brief 控制背光开关
 * @param en 1-打开 0-关闭
 * @author HZ12138
 * @date 2025-02-26 18:49:16
 */
void TFT_NT5510_BLK(uint8_t en)
{
    if (en)
        HAL_GPIO_WritePin(TFT_NT5510_BLK_GPIOx, TFT_NT5510_BLK_Pin, GPIO_PIN_SET);
    else
        HAL_GPIO_WritePin(TFT_NT5510_BLK_GPIOx, TFT_NT5510_BLK_Pin, GPIO_PIN_RESET);
}

/**
 * @brief 复位控制
 * @param en 1-打开 0-关闭
 * @author HZ12138
 * @date 2025-02-26 18:56:21
 */
void TFT_NT5510_RST(uint8_t en)
{
    if (en)
        HAL_GPIO_WritePin(TFT_NT5510_RST_GPIOx, TFT_NT5510_RST_Pin, GPIO_PIN_SET);
    else
        HAL_GPIO_WritePin(TFT_NT5510_RST_GPIOx, TFT_NT5510_RST_Pin, GPIO_PIN_RESET);
}

发送数据/命令

发送数据
c 复制代码
TFT_NT5510_AddrData = Val;
发送命令
c 复制代码
 TFT_NT5510_AddrReg = Reg;

写寄存器

先通过命令口发送寄存器地址,再发数据即可

c 复制代码
/**
 * @brief 写寄存器
 * @param Reg:寄存器地址
 * @param Value:寄存器地址
 * @return
 * @author HZ12138
 * @date 2023-02-14 22:40:21
 */
void TFT_NT5510_Write_Reg(uint16_t Reg, uint16_t Val)
{
    TFT_NT5510_AddrReg = Reg;
    TFT_NT5510_AddrData = Val;
}

设置窗口

主要是0x2A 0x2B 0x2C 三个寄存器

分别设置x坐标窗口 y坐标窗口 和开始数据传输

c 复制代码
/**
 * @brief 设置窗口
 * @param xStar:X坐标
 * @param yStar:Y坐标
 * @param xEnd:X坐标
 * @param yEnd:Y坐标
 * @author HZ12138
 * @date 2025-03-07 22:30:52
 */
void TFT_NT5510_SetWindows(uint16_t xStar, uint16_t yStar, uint16_t xEnd, uint16_t yEnd)
{

    TFT_NT5510_Write_Reg(0X2A00 + 0, xStar >> 8);
    TFT_NT5510_Write_Reg(0X2A00 + 1, xStar & 0XFF);
    TFT_NT5510_Write_Reg(0X2A00 + 2, xEnd >> 8);
    TFT_NT5510_Write_Reg(0X2A00 + 3, xEnd & 0XFF);

    TFT_NT5510_Write_Reg(0X2B00 + 0, yStar >> 8);
    TFT_NT5510_Write_Reg(0X2B00 + 1, yStar & 0XFF);
    TFT_NT5510_Write_Reg(0X2B00 + 2, yEnd >> 8);
    TFT_NT5510_Write_Reg(0X2B00 + 3, yEnd & 0XFF);

    TFT_NT5510_AddrReg = (0x2C00);
}

设置光标

c 复制代码
/**
 * @brief 设置光标
 * @param Xpos:X坐标
 * @param Ypos:Y坐标
 * @author HZ12138
 * @date 2025-03-07 22:30:38
 */
void TFT_NT5510_SetCursor(uint16_t Xpos, uint16_t Ypos)
{
    TFT_NT5510_Write_Reg(0X2A00, Xpos >> 8);
    TFT_NT5510_Write_Reg(0X2A00 + 1, Xpos & 0XFF);

    TFT_NT5510_Write_Reg(0X2B00, Ypos >> 8);
    TFT_NT5510_Write_Reg(0X2B00 + 1, Ypos & 0XFF);
}

设置扫描方向

c 复制代码
/**
 * @brief  设置扫描方向
 * @param dir 方向
 * @author HZ12138
 * @date 2025-03-07 22:30:14
 */
void TFT_NT5510_Scan_Dir(uint8_t dir)
{

    uint16_t temp;

    switch (dir)
    {
    case 0: // 从左到右,从上到下
        temp |= (0 << 7) | (0 << 6) | (0 << 5);
        break;
    case 1: // 从左到右,从下到上
        temp |= (1 << 7) | (0 << 6) | (0 << 5);
        break;
    case 2: // 从右到左,从上到下
        temp |= (0 << 7) | (1 << 6) | (0 << 5);
        break;
    case 3: // 从右到左,从下到上
        temp |= (1 << 7) | (1 << 6) | (0 << 5);
        break;
    case 4: // 从上到下,从左到右
        temp |= (0 << 7) | (0 << 6) | (1 << 5);
        break;
    case 5: // 从上到下,从右到左
        temp |= (0 << 7) | (1 << 6) | (1 << 5);
        break;
    case 6: // 从下到上,从左到右
        temp |= (1 << 7) | (0 << 6) | (1 << 5);
        break;
    case 7: // 从下到上,从右到左
        temp |= (1 << 7) | (1 << 6) | (1 << 5);
        break;
    }

    TFT_NT5510_Write_Reg(0X3600, temp);

    TFT_NT5510_SetWindows(0, 0, TFT_NT5510_Width, TFT_NT5510_Height);
}

清屏

c 复制代码
/**
 * @brief 清屏成一个颜色
 * @param color:颜色值(RGB656)
 * @return  无
 * @author HZ12138
 * @date 2023-02-15 10:54:44
 */
void TFT_NT5510_Clear(uint16_t color)
{

    uint32_t total = TFT_NT5510_Width * TFT_NT5510_Height; // 得到总点数
    TFT_NT5510_SetCursor(0x00, 0x0000);                    // 设置光标位置
    TFT_NT5510_AddrReg = 0X2C00;                           // 开始写入GRAM
    for (uint32_t i = 0; i < total; i++)
    {
        TFT_NT5510_AddrData = color;
    }
}

填充

c 复制代码
/**
 * @brief 填充颜色
 * @param xStar:起始横坐标
 * @param yStar:起始纵坐标
 * @param xEnd:结束横坐标
 * @param yEnd:结束纵坐标
 * @param buf:颜色值(RGB656)
 * @author HZ12138
 * @date 2025-03-07 21:41:14
 */
void TFT_NT5510_Fill(uint16_t xStar, uint16_t yStar, uint16_t xEnd, uint16_t yEnd, uint16_t *buf)
{
    uint32_t len = (xEnd - xStar + 1) * (yEnd - yStar + 1);
    TFT_NT5510_SetWindows(xStar, yStar, xEnd, yEnd);
    TFT_NT5510_AddrReg = 0X2C00;

    for (uint32_t i = 0; i < len; i++)
        TFT_NT5510_AddrData = buf[i];
}

初始化

c 复制代码
/**
 * @brief 初始化
 * @param 无
 * @return 无
 * @author HZ12138
 * @date 2023-02-15 11:35:30
 */
void TFT_NT5510_Init(void)
{
    TFT_NT5510_RST(0);
    HAL_Delay(100);
    TFT_NT5510_RST(1);
    HAL_Delay(100);

    TFT_NT5510_Write_Reg(0xF000, 0x55);
    TFT_NT5510_Write_Reg(0xF001, 0xAA);
    TFT_NT5510_Write_Reg(0xF002, 0x52);
    TFT_NT5510_Write_Reg(0xF003, 0x08);
    TFT_NT5510_Write_Reg(0xF004, 0x01);
    // AVDD Set AVDD 5.2V
    TFT_NT5510_Write_Reg(0xB000, 0x0D);
    TFT_NT5510_Write_Reg(0xB001, 0x0D);
    TFT_NT5510_Write_Reg(0xB002, 0x0D);
    // AVDD ratio
    TFT_NT5510_Write_Reg(0xB600, 0x34);
    TFT_NT5510_Write_Reg(0xB601, 0x34);
    TFT_NT5510_Write_Reg(0xB602, 0x34);
    // AVEE -5.2V
    TFT_NT5510_Write_Reg(0xB100, 0x0D);
    TFT_NT5510_Write_Reg(0xB101, 0x0D);
    TFT_NT5510_Write_Reg(0xB102, 0x0D);
    // AVEE ratio
    TFT_NT5510_Write_Reg(0xB700, 0x34);
    TFT_NT5510_Write_Reg(0xB701, 0x34);
    TFT_NT5510_Write_Reg(0xB702, 0x34);
    // VCL -2.5V
    TFT_NT5510_Write_Reg(0xB200, 0x00);
    TFT_NT5510_Write_Reg(0xB201, 0x00);
    TFT_NT5510_Write_Reg(0xB202, 0x00);
    // VCL ratio
    TFT_NT5510_Write_Reg(0xB800, 0x24);
    TFT_NT5510_Write_Reg(0xB801, 0x24);
    TFT_NT5510_Write_Reg(0xB802, 0x24);
    // VGH 15V (Free pump)
    TFT_NT5510_Write_Reg(0xBF00, 0x01);
    TFT_NT5510_Write_Reg(0xB300, 0x0F);
    TFT_NT5510_Write_Reg(0xB301, 0x0F);
    TFT_NT5510_Write_Reg(0xB302, 0x0F);
    // VGH ratio
    TFT_NT5510_Write_Reg(0xB900, 0x34);
    TFT_NT5510_Write_Reg(0xB901, 0x34);
    TFT_NT5510_Write_Reg(0xB902, 0x34);
    // VGL_REG -10V
    TFT_NT5510_Write_Reg(0xB500, 0x08);
    TFT_NT5510_Write_Reg(0xB501, 0x08);
    TFT_NT5510_Write_Reg(0xB502, 0x08);
    TFT_NT5510_Write_Reg(0xC200, 0x03);
    // VGLX ratio
    TFT_NT5510_Write_Reg(0xBA00, 0x24);
    TFT_NT5510_Write_Reg(0xBA01, 0x24);
    TFT_NT5510_Write_Reg(0xBA02, 0x24);
    // VGMP/VGSP 4.5V/0V
    TFT_NT5510_Write_Reg(0xBC00, 0x00);
    TFT_NT5510_Write_Reg(0xBC01, 0x78);
    TFT_NT5510_Write_Reg(0xBC02, 0x00);
    // VGMN/VGSN -4.5V/0V
    TFT_NT5510_Write_Reg(0xBD00, 0x00);
    TFT_NT5510_Write_Reg(0xBD01, 0x78);
    TFT_NT5510_Write_Reg(0xBD02, 0x00);
    // VCOM
    TFT_NT5510_Write_Reg(0xBE00, 0x00);
    TFT_NT5510_Write_Reg(0xBE01, 0x64);
    // Gamma Setting
    TFT_NT5510_Write_Reg(0xD100, 0x00);
    TFT_NT5510_Write_Reg(0xD101, 0x33);
    TFT_NT5510_Write_Reg(0xD102, 0x00);
    TFT_NT5510_Write_Reg(0xD103, 0x34);
    TFT_NT5510_Write_Reg(0xD104, 0x00);
    TFT_NT5510_Write_Reg(0xD105, 0x3A);
    TFT_NT5510_Write_Reg(0xD106, 0x00);
    TFT_NT5510_Write_Reg(0xD107, 0x4A);
    TFT_NT5510_Write_Reg(0xD108, 0x00);
    TFT_NT5510_Write_Reg(0xD109, 0x5C);
    TFT_NT5510_Write_Reg(0xD10A, 0x00);
    TFT_NT5510_Write_Reg(0xD10B, 0x81);
    TFT_NT5510_Write_Reg(0xD10C, 0x00);
    TFT_NT5510_Write_Reg(0xD10D, 0xA6);
    TFT_NT5510_Write_Reg(0xD10E, 0x00);
    TFT_NT5510_Write_Reg(0xD10F, 0xE5);
    TFT_NT5510_Write_Reg(0xD110, 0x01);
    TFT_NT5510_Write_Reg(0xD111, 0x13);
    TFT_NT5510_Write_Reg(0xD112, 0x01);
    TFT_NT5510_Write_Reg(0xD113, 0x54);
    TFT_NT5510_Write_Reg(0xD114, 0x01);
    TFT_NT5510_Write_Reg(0xD115, 0x82);
    TFT_NT5510_Write_Reg(0xD116, 0x01);
    TFT_NT5510_Write_Reg(0xD117, 0xCA);
    TFT_NT5510_Write_Reg(0xD118, 0x02);
    TFT_NT5510_Write_Reg(0xD119, 0x00);
    TFT_NT5510_Write_Reg(0xD11A, 0x02);
    TFT_NT5510_Write_Reg(0xD11B, 0x01);
    TFT_NT5510_Write_Reg(0xD11C, 0x02);
    TFT_NT5510_Write_Reg(0xD11D, 0x34);
    TFT_NT5510_Write_Reg(0xD11E, 0x02);
    TFT_NT5510_Write_Reg(0xD11F, 0x67);
    TFT_NT5510_Write_Reg(0xD120, 0x02);
    TFT_NT5510_Write_Reg(0xD121, 0x84);
    TFT_NT5510_Write_Reg(0xD122, 0x02);
    TFT_NT5510_Write_Reg(0xD123, 0xA4);
    TFT_NT5510_Write_Reg(0xD124, 0x02);
    TFT_NT5510_Write_Reg(0xD125, 0xB7);
    TFT_NT5510_Write_Reg(0xD126, 0x02);
    TFT_NT5510_Write_Reg(0xD127, 0xCF);
    TFT_NT5510_Write_Reg(0xD128, 0x02);
    TFT_NT5510_Write_Reg(0xD129, 0xDE);
    TFT_NT5510_Write_Reg(0xD12A, 0x02);
    TFT_NT5510_Write_Reg(0xD12B, 0xF2);
    TFT_NT5510_Write_Reg(0xD12C, 0x02);
    TFT_NT5510_Write_Reg(0xD12D, 0xFE);
    TFT_NT5510_Write_Reg(0xD12E, 0x03);
    TFT_NT5510_Write_Reg(0xD12F, 0x10);
    TFT_NT5510_Write_Reg(0xD130, 0x03);
    TFT_NT5510_Write_Reg(0xD131, 0x33);
    TFT_NT5510_Write_Reg(0xD132, 0x03);
    TFT_NT5510_Write_Reg(0xD133, 0x6D);
    TFT_NT5510_Write_Reg(0xD200, 0x00);
    TFT_NT5510_Write_Reg(0xD201, 0x33);
    TFT_NT5510_Write_Reg(0xD202, 0x00);
    TFT_NT5510_Write_Reg(0xD203, 0x34);
    TFT_NT5510_Write_Reg(0xD204, 0x00);
    TFT_NT5510_Write_Reg(0xD205, 0x3A);
    TFT_NT5510_Write_Reg(0xD206, 0x00);
    TFT_NT5510_Write_Reg(0xD207, 0x4A);
    TFT_NT5510_Write_Reg(0xD208, 0x00);
    TFT_NT5510_Write_Reg(0xD209, 0x5C);
    TFT_NT5510_Write_Reg(0xD20A, 0x00);

    TFT_NT5510_Write_Reg(0xD20B, 0x81);
    TFT_NT5510_Write_Reg(0xD20C, 0x00);
    TFT_NT5510_Write_Reg(0xD20D, 0xA6);
    TFT_NT5510_Write_Reg(0xD20E, 0x00);
    TFT_NT5510_Write_Reg(0xD20F, 0xE5);
    TFT_NT5510_Write_Reg(0xD210, 0x01);
    TFT_NT5510_Write_Reg(0xD211, 0x13);
    TFT_NT5510_Write_Reg(0xD212, 0x01);
    TFT_NT5510_Write_Reg(0xD213, 0x54);
    TFT_NT5510_Write_Reg(0xD214, 0x01);
    TFT_NT5510_Write_Reg(0xD215, 0x82);
    TFT_NT5510_Write_Reg(0xD216, 0x01);
    TFT_NT5510_Write_Reg(0xD217, 0xCA);
    TFT_NT5510_Write_Reg(0xD218, 0x02);
    TFT_NT5510_Write_Reg(0xD219, 0x00);
    TFT_NT5510_Write_Reg(0xD21A, 0x02);
    TFT_NT5510_Write_Reg(0xD21B, 0x01);
    TFT_NT5510_Write_Reg(0xD21C, 0x02);
    TFT_NT5510_Write_Reg(0xD21D, 0x34);
    TFT_NT5510_Write_Reg(0xD21E, 0x02);
    TFT_NT5510_Write_Reg(0xD21F, 0x67);
    TFT_NT5510_Write_Reg(0xD220, 0x02);
    TFT_NT5510_Write_Reg(0xD221, 0x84);
    TFT_NT5510_Write_Reg(0xD222, 0x02);
    TFT_NT5510_Write_Reg(0xD223, 0xA4);
    TFT_NT5510_Write_Reg(0xD224, 0x02);
    TFT_NT5510_Write_Reg(0xD225, 0xB7);
    TFT_NT5510_Write_Reg(0xD226, 0x02);
    TFT_NT5510_Write_Reg(0xD227, 0xCF);
    TFT_NT5510_Write_Reg(0xD228, 0x02);
    TFT_NT5510_Write_Reg(0xD229, 0xDE);
    TFT_NT5510_Write_Reg(0xD22A, 0x02);
    TFT_NT5510_Write_Reg(0xD22B, 0xF2);
    TFT_NT5510_Write_Reg(0xD22C, 0x02);
    TFT_NT5510_Write_Reg(0xD22D, 0xFE);
    TFT_NT5510_Write_Reg(0xD22E, 0x03);
    TFT_NT5510_Write_Reg(0xD22F, 0x10);
    TFT_NT5510_Write_Reg(0xD230, 0x03);
    TFT_NT5510_Write_Reg(0xD231, 0x33);
    TFT_NT5510_Write_Reg(0xD232, 0x03);
    TFT_NT5510_Write_Reg(0xD233, 0x6D);
    TFT_NT5510_Write_Reg(0xD300, 0x00);
    TFT_NT5510_Write_Reg(0xD301, 0x33);
    TFT_NT5510_Write_Reg(0xD302, 0x00);
    TFT_NT5510_Write_Reg(0xD303, 0x34);
    TFT_NT5510_Write_Reg(0xD304, 0x00);
    TFT_NT5510_Write_Reg(0xD305, 0x3A);
    TFT_NT5510_Write_Reg(0xD306, 0x00);
    TFT_NT5510_Write_Reg(0xD307, 0x4A);
    TFT_NT5510_Write_Reg(0xD308, 0x00);
    TFT_NT5510_Write_Reg(0xD309, 0x5C);
    TFT_NT5510_Write_Reg(0xD30A, 0x00);

    TFT_NT5510_Write_Reg(0xD30B, 0x81);
    TFT_NT5510_Write_Reg(0xD30C, 0x00);
    TFT_NT5510_Write_Reg(0xD30D, 0xA6);
    TFT_NT5510_Write_Reg(0xD30E, 0x00);
    TFT_NT5510_Write_Reg(0xD30F, 0xE5);
    TFT_NT5510_Write_Reg(0xD310, 0x01);
    TFT_NT5510_Write_Reg(0xD311, 0x13);
    TFT_NT5510_Write_Reg(0xD312, 0x01);
    TFT_NT5510_Write_Reg(0xD313, 0x54);
    TFT_NT5510_Write_Reg(0xD314, 0x01);
    TFT_NT5510_Write_Reg(0xD315, 0x82);
    TFT_NT5510_Write_Reg(0xD316, 0x01);
    TFT_NT5510_Write_Reg(0xD317, 0xCA);
    TFT_NT5510_Write_Reg(0xD318, 0x02);
    TFT_NT5510_Write_Reg(0xD319, 0x00);
    TFT_NT5510_Write_Reg(0xD31A, 0x02);
    TFT_NT5510_Write_Reg(0xD31B, 0x01);
    TFT_NT5510_Write_Reg(0xD31C, 0x02);
    TFT_NT5510_Write_Reg(0xD31D, 0x34);
    TFT_NT5510_Write_Reg(0xD31E, 0x02);
    TFT_NT5510_Write_Reg(0xD31F, 0x67);
    TFT_NT5510_Write_Reg(0xD320, 0x02);
    TFT_NT5510_Write_Reg(0xD321, 0x84);
    TFT_NT5510_Write_Reg(0xD322, 0x02);
    TFT_NT5510_Write_Reg(0xD323, 0xA4);
    TFT_NT5510_Write_Reg(0xD324, 0x02);
    TFT_NT5510_Write_Reg(0xD325, 0xB7);
    TFT_NT5510_Write_Reg(0xD326, 0x02);
    TFT_NT5510_Write_Reg(0xD327, 0xCF);
    TFT_NT5510_Write_Reg(0xD328, 0x02);
    TFT_NT5510_Write_Reg(0xD329, 0xDE);
    TFT_NT5510_Write_Reg(0xD32A, 0x02);
    TFT_NT5510_Write_Reg(0xD32B, 0xF2);
    TFT_NT5510_Write_Reg(0xD32C, 0x02);
    TFT_NT5510_Write_Reg(0xD32D, 0xFE);
    TFT_NT5510_Write_Reg(0xD32E, 0x03);
    TFT_NT5510_Write_Reg(0xD32F, 0x10);
    TFT_NT5510_Write_Reg(0xD330, 0x03);
    TFT_NT5510_Write_Reg(0xD331, 0x33);
    TFT_NT5510_Write_Reg(0xD332, 0x03);
    TFT_NT5510_Write_Reg(0xD333, 0x6D);
    TFT_NT5510_Write_Reg(0xD400, 0x00);
    TFT_NT5510_Write_Reg(0xD401, 0x33);
    TFT_NT5510_Write_Reg(0xD402, 0x00);
    TFT_NT5510_Write_Reg(0xD403, 0x34);
    TFT_NT5510_Write_Reg(0xD404, 0x00);
    TFT_NT5510_Write_Reg(0xD405, 0x3A);
    TFT_NT5510_Write_Reg(0xD406, 0x00);
    TFT_NT5510_Write_Reg(0xD407, 0x4A);
    TFT_NT5510_Write_Reg(0xD408, 0x00);
    TFT_NT5510_Write_Reg(0xD409, 0x5C);
    TFT_NT5510_Write_Reg(0xD40A, 0x00);
    TFT_NT5510_Write_Reg(0xD40B, 0x81);

    TFT_NT5510_Write_Reg(0xD40C, 0x00);
    TFT_NT5510_Write_Reg(0xD40D, 0xA6);
    TFT_NT5510_Write_Reg(0xD40E, 0x00);
    TFT_NT5510_Write_Reg(0xD40F, 0xE5);
    TFT_NT5510_Write_Reg(0xD410, 0x01);
    TFT_NT5510_Write_Reg(0xD411, 0x13);
    TFT_NT5510_Write_Reg(0xD412, 0x01);
    TFT_NT5510_Write_Reg(0xD413, 0x54);
    TFT_NT5510_Write_Reg(0xD414, 0x01);
    TFT_NT5510_Write_Reg(0xD415, 0x82);
    TFT_NT5510_Write_Reg(0xD416, 0x01);
    TFT_NT5510_Write_Reg(0xD417, 0xCA);
    TFT_NT5510_Write_Reg(0xD418, 0x02);
    TFT_NT5510_Write_Reg(0xD419, 0x00);
    TFT_NT5510_Write_Reg(0xD41A, 0x02);
    TFT_NT5510_Write_Reg(0xD41B, 0x01);
    TFT_NT5510_Write_Reg(0xD41C, 0x02);
    TFT_NT5510_Write_Reg(0xD41D, 0x34);
    TFT_NT5510_Write_Reg(0xD41E, 0x02);
    TFT_NT5510_Write_Reg(0xD41F, 0x67);
    TFT_NT5510_Write_Reg(0xD420, 0x02);
    TFT_NT5510_Write_Reg(0xD421, 0x84);
    TFT_NT5510_Write_Reg(0xD422, 0x02);
    TFT_NT5510_Write_Reg(0xD423, 0xA4);
    TFT_NT5510_Write_Reg(0xD424, 0x02);
    TFT_NT5510_Write_Reg(0xD425, 0xB7);
    TFT_NT5510_Write_Reg(0xD426, 0x02);
    TFT_NT5510_Write_Reg(0xD427, 0xCF);
    TFT_NT5510_Write_Reg(0xD428, 0x02);
    TFT_NT5510_Write_Reg(0xD429, 0xDE);
    TFT_NT5510_Write_Reg(0xD42A, 0x02);
    TFT_NT5510_Write_Reg(0xD42B, 0xF2);
    TFT_NT5510_Write_Reg(0xD42C, 0x02);
    TFT_NT5510_Write_Reg(0xD42D, 0xFE);
    TFT_NT5510_Write_Reg(0xD42E, 0x03);
    TFT_NT5510_Write_Reg(0xD42F, 0x10);
    TFT_NT5510_Write_Reg(0xD430, 0x03);
    TFT_NT5510_Write_Reg(0xD431, 0x33);
    TFT_NT5510_Write_Reg(0xD432, 0x03);
    TFT_NT5510_Write_Reg(0xD433, 0x6D);
    TFT_NT5510_Write_Reg(0xD500, 0x00);
    TFT_NT5510_Write_Reg(0xD501, 0x33);
    TFT_NT5510_Write_Reg(0xD502, 0x00);
    TFT_NT5510_Write_Reg(0xD503, 0x34);
    TFT_NT5510_Write_Reg(0xD504, 0x00);
    TFT_NT5510_Write_Reg(0xD505, 0x3A);
    TFT_NT5510_Write_Reg(0xD506, 0x00);
    TFT_NT5510_Write_Reg(0xD507, 0x4A);
    TFT_NT5510_Write_Reg(0xD508, 0x00);
    TFT_NT5510_Write_Reg(0xD509, 0x5C);
    TFT_NT5510_Write_Reg(0xD50A, 0x00);
    TFT_NT5510_Write_Reg(0xD50B, 0x81);

    TFT_NT5510_Write_Reg(0xD50C, 0x00);
    TFT_NT5510_Write_Reg(0xD50D, 0xA6);
    TFT_NT5510_Write_Reg(0xD50E, 0x00);
    TFT_NT5510_Write_Reg(0xD50F, 0xE5);
    TFT_NT5510_Write_Reg(0xD510, 0x01);
    TFT_NT5510_Write_Reg(0xD511, 0x13);
    TFT_NT5510_Write_Reg(0xD512, 0x01);
    TFT_NT5510_Write_Reg(0xD513, 0x54);
    TFT_NT5510_Write_Reg(0xD514, 0x01);
    TFT_NT5510_Write_Reg(0xD515, 0x82);
    TFT_NT5510_Write_Reg(0xD516, 0x01);
    TFT_NT5510_Write_Reg(0xD517, 0xCA);
    TFT_NT5510_Write_Reg(0xD518, 0x02);
    TFT_NT5510_Write_Reg(0xD519, 0x00);
    TFT_NT5510_Write_Reg(0xD51A, 0x02);
    TFT_NT5510_Write_Reg(0xD51B, 0x01);
    TFT_NT5510_Write_Reg(0xD51C, 0x02);
    TFT_NT5510_Write_Reg(0xD51D, 0x34);
    TFT_NT5510_Write_Reg(0xD51E, 0x02);
    TFT_NT5510_Write_Reg(0xD51F, 0x67);
    TFT_NT5510_Write_Reg(0xD520, 0x02);
    TFT_NT5510_Write_Reg(0xD521, 0x84);
    TFT_NT5510_Write_Reg(0xD522, 0x02);
    TFT_NT5510_Write_Reg(0xD523, 0xA4);
    TFT_NT5510_Write_Reg(0xD524, 0x02);
    TFT_NT5510_Write_Reg(0xD525, 0xB7);
    TFT_NT5510_Write_Reg(0xD526, 0x02);
    TFT_NT5510_Write_Reg(0xD527, 0xCF);
    TFT_NT5510_Write_Reg(0xD528, 0x02);
    TFT_NT5510_Write_Reg(0xD529, 0xDE);
    TFT_NT5510_Write_Reg(0xD52A, 0x02);
    TFT_NT5510_Write_Reg(0xD52B, 0xF2);
    TFT_NT5510_Write_Reg(0xD52C, 0x02);
    TFT_NT5510_Write_Reg(0xD52D, 0xFE);
    TFT_NT5510_Write_Reg(0xD52E, 0x03);
    TFT_NT5510_Write_Reg(0xD52F, 0x10);
    TFT_NT5510_Write_Reg(0xD530, 0x03);
    TFT_NT5510_Write_Reg(0xD531, 0x33);
    TFT_NT5510_Write_Reg(0xD532, 0x03);
    TFT_NT5510_Write_Reg(0xD533, 0x6D);
    TFT_NT5510_Write_Reg(0xD600, 0x00);
    TFT_NT5510_Write_Reg(0xD601, 0x33);
    TFT_NT5510_Write_Reg(0xD602, 0x00);
    TFT_NT5510_Write_Reg(0xD603, 0x34);
    TFT_NT5510_Write_Reg(0xD604, 0x00);
    TFT_NT5510_Write_Reg(0xD605, 0x3A);
    TFT_NT5510_Write_Reg(0xD606, 0x00);
    TFT_NT5510_Write_Reg(0xD607, 0x4A);
    TFT_NT5510_Write_Reg(0xD608, 0x00);
    TFT_NT5510_Write_Reg(0xD609, 0x5C);
    TFT_NT5510_Write_Reg(0xD60A, 0x00);
    TFT_NT5510_Write_Reg(0xD60B, 0x81);

    TFT_NT5510_Write_Reg(0xD60C, 0x00);
    TFT_NT5510_Write_Reg(0xD60D, 0xA6);
    TFT_NT5510_Write_Reg(0xD60E, 0x00);
    TFT_NT5510_Write_Reg(0xD60F, 0xE5);
    TFT_NT5510_Write_Reg(0xD610, 0x01);
    TFT_NT5510_Write_Reg(0xD611, 0x13);
    TFT_NT5510_Write_Reg(0xD612, 0x01);
    TFT_NT5510_Write_Reg(0xD613, 0x54);
    TFT_NT5510_Write_Reg(0xD614, 0x01);
    TFT_NT5510_Write_Reg(0xD615, 0x82);
    TFT_NT5510_Write_Reg(0xD616, 0x01);
    TFT_NT5510_Write_Reg(0xD617, 0xCA);
    TFT_NT5510_Write_Reg(0xD618, 0x02);
    TFT_NT5510_Write_Reg(0xD619, 0x00);
    TFT_NT5510_Write_Reg(0xD61A, 0x02);
    TFT_NT5510_Write_Reg(0xD61B, 0x01);
    TFT_NT5510_Write_Reg(0xD61C, 0x02);
    TFT_NT5510_Write_Reg(0xD61D, 0x34);
    TFT_NT5510_Write_Reg(0xD61E, 0x02);
    TFT_NT5510_Write_Reg(0xD61F, 0x67);
    TFT_NT5510_Write_Reg(0xD620, 0x02);
    TFT_NT5510_Write_Reg(0xD621, 0x84);
    TFT_NT5510_Write_Reg(0xD622, 0x02);
    TFT_NT5510_Write_Reg(0xD623, 0xA4);
    TFT_NT5510_Write_Reg(0xD624, 0x02);
    TFT_NT5510_Write_Reg(0xD625, 0xB7);
    TFT_NT5510_Write_Reg(0xD626, 0x02);
    TFT_NT5510_Write_Reg(0xD627, 0xCF);
    TFT_NT5510_Write_Reg(0xD628, 0x02);
    TFT_NT5510_Write_Reg(0xD629, 0xDE);
    TFT_NT5510_Write_Reg(0xD62A, 0x02);
    TFT_NT5510_Write_Reg(0xD62B, 0xF2);
    TFT_NT5510_Write_Reg(0xD62C, 0x02);
    TFT_NT5510_Write_Reg(0xD62D, 0xFE);
    TFT_NT5510_Write_Reg(0xD62E, 0x03);
    TFT_NT5510_Write_Reg(0xD62F, 0x10);
    TFT_NT5510_Write_Reg(0xD630, 0x03);
    TFT_NT5510_Write_Reg(0xD631, 0x33);
    TFT_NT5510_Write_Reg(0xD632, 0x03);
    TFT_NT5510_Write_Reg(0xD633, 0x6D);
    // LV2 Page 0 enable
    TFT_NT5510_Write_Reg(0xF000, 0x55);
    TFT_NT5510_Write_Reg(0xF001, 0xAA);
    TFT_NT5510_Write_Reg(0xF002, 0x52);
    TFT_NT5510_Write_Reg(0xF003, 0x08);
    TFT_NT5510_Write_Reg(0xF004, 0x00);
    // Display control
    TFT_NT5510_Write_Reg(0xB100, 0xCC);
    TFT_NT5510_Write_Reg(0xB101, 0x00);
    // Source hold time
    TFT_NT5510_Write_Reg(0xB600, 0x05);
    // Gate EQ control
    TFT_NT5510_Write_Reg(0xB700, 0x70);
    TFT_NT5510_Write_Reg(0xB701, 0x70);
    // Source EQ control (Mode 2)
    TFT_NT5510_Write_Reg(0xB800, 0x01);
    TFT_NT5510_Write_Reg(0xB801, 0x03);
    TFT_NT5510_Write_Reg(0xB802, 0x03);
    TFT_NT5510_Write_Reg(0xB803, 0x03);
    // Inversion mode (2-dot)
    TFT_NT5510_Write_Reg(0xBC00, 0x02);
    TFT_NT5510_Write_Reg(0xBC01, 0x00);
    TFT_NT5510_Write_Reg(0xBC02, 0x00);
    // Timing control 4H w/ 4-delay
    TFT_NT5510_Write_Reg(0xC900, 0xD0);
    TFT_NT5510_Write_Reg(0xC901, 0x02);
    TFT_NT5510_Write_Reg(0xC902, 0x50);
    TFT_NT5510_Write_Reg(0xC903, 0x50);
    TFT_NT5510_Write_Reg(0xC904, 0x50);
    TFT_NT5510_Write_Reg(0x3500, 0x00);
    TFT_NT5510_Write_Reg(0x3A00, 0x55); // 16-bit/pixel

    TFT_NT5510_AddrReg = 0x1100;
    HAL_Delay(100);
    TFT_NT5510_AddrReg = 0x2900;

    TFT_NT5510_BLK(1);
    TFT_NT5510_Scan_Dir(TFT_NT5510_dir);

    TFT_NT5510_Clear(0xffff);
}

文件

TFT_S6D05.h

c 复制代码
#ifndef _TFT_NT5510_H_
#define _TFT_NT5510_H_
#include "main.h"

/**/
#define TFT_NT5510_BL_GPIOx GPIOB
#define TFT_NT5510_BL_GPIOPin GPIO_PIN_0
/*
启用FSMC 选择LCD模式
根据硬件选择片选和RS线

片选        起始地址        中止地址
NE1         0x60000000      0x63FFFFFF
NE2         0x64000000      0x67FFFFFF
NE3         0x68000000      0x6BFFFFFF
NE4         0x6C000000      0x6FFFFFFF
16位数据 HADDR【25:1】--->FSCM_A【24:0】(此时一次读写2Byte数据,地址最低位无效,fsmc自动将地址右移1位)
8位数据 HADDR【25:0】--->FSMC_A【25:0】
RS线(寄存器/数据)接在地址线上,此线置高则为数据,置低则为寄存器
16位的数据地址公式: base(起始地址)+1<<(x+1)(地址线序号Ax则为x)
8位的数据地址公式: base(起始地址)+1<<x(地址线序号Ax则为x)
*/

#define TFT_NT5510_AddrReg (*(__IO uint16_t *)((uint32_t)0x60000000))
#define TFT_NT5510_AddrData (*(__IO uint16_t *)((uint32_t)0x60100000))

#define TFT_NT5510_Height 480
#define TFT_NT5510_Width 800
#define TFT_NT5510_dir 5 // 0/3竖屏 5/6横屏

// 背光
#define TFT_NT5510_BLK_GPIOx GPIOB
#define TFT_NT5510_BLK_Pin GPIO_PIN_15

// 复位
#define TFT_NT5510_RST_GPIOx GPIOB
#define TFT_NT5510_RST_Pin GPIO_PIN_14

void TFT_NT5510_BLK(uint8_t en);
void TFT_NT5510_RST(uint8_t en);
void TFT_NT5510_Init(void);
void TFT_NT5510_Clear(uint16_t color);
void TFT_NT5510_Fill(uint16_t xStar, uint16_t yStar, uint16_t xEnd, uint16_t yEnd, uint16_t *buf);

#endif

TFT_S6D05.c

c 复制代码
#include "TFT_NT5510.h"

/**
 * @brief 控制背光开关
 * @param en 1-打开 0-关闭
 * @author HZ12138
 * @date 2025-02-26 18:49:16
 */
void TFT_NT5510_BLK(uint8_t en)
{
    if (en)
        HAL_GPIO_WritePin(TFT_NT5510_BLK_GPIOx, TFT_NT5510_BLK_Pin, GPIO_PIN_SET);
    else
        HAL_GPIO_WritePin(TFT_NT5510_BLK_GPIOx, TFT_NT5510_BLK_Pin, GPIO_PIN_RESET);
}

/**
 * @brief 复位控制
 * @param en 1-打开 0-关闭
 * @author HZ12138
 * @date 2025-02-26 18:56:21
 */
void TFT_NT5510_RST(uint8_t en)
{
    if (en)
        HAL_GPIO_WritePin(TFT_NT5510_RST_GPIOx, TFT_NT5510_RST_Pin, GPIO_PIN_SET);
    else
        HAL_GPIO_WritePin(TFT_NT5510_RST_GPIOx, TFT_NT5510_RST_Pin, GPIO_PIN_RESET);
}

/**
 * @brief 写寄存器
 * @param Reg:寄存器地址
 * @param Value:寄存器地址
 * @return
 * @author HZ12138
 * @date 2023-02-14 22:40:21
 */
void TFT_NT5510_Write_Reg(uint16_t Reg, uint16_t Val)
{
    TFT_NT5510_AddrReg = Reg;
    TFT_NT5510_AddrData = Val;
}
/**
 * @brief 设置光标
 * @param Xpos:X坐标
 * @param Ypos:Y坐标
 * @author HZ12138
 * @date 2025-03-07 22:30:38
 */
void TFT_NT5510_SetCursor(uint16_t Xpos, uint16_t Ypos)
{
    TFT_NT5510_Write_Reg(0X2A00, Xpos >> 8);
    TFT_NT5510_Write_Reg(0X2A00 + 1, Xpos & 0XFF);

    TFT_NT5510_Write_Reg(0X2B00, Ypos >> 8);
    TFT_NT5510_Write_Reg(0X2B00 + 1, Ypos & 0XFF);
}

/**
 * @brief 设置窗口
 * @param xStar:X坐标
 * @param yStar:Y坐标
 * @param xEnd:X坐标
 * @param yEnd:Y坐标
 * @author HZ12138
 * @date 2025-03-07 22:30:52
 */
void TFT_NT5510_SetWindows(uint16_t xStar, uint16_t yStar, uint16_t xEnd, uint16_t yEnd)
{

    TFT_NT5510_Write_Reg(0X2A00 + 0, xStar >> 8);
    TFT_NT5510_Write_Reg(0X2A00 + 1, xStar & 0XFF);
    TFT_NT5510_Write_Reg(0X2A00 + 2, xEnd >> 8);
    TFT_NT5510_Write_Reg(0X2A00 + 3, xEnd & 0XFF);

    TFT_NT5510_Write_Reg(0X2B00 + 0, yStar >> 8);
    TFT_NT5510_Write_Reg(0X2B00 + 1, yStar & 0XFF);
    TFT_NT5510_Write_Reg(0X2B00 + 2, yEnd >> 8);
    TFT_NT5510_Write_Reg(0X2B00 + 3, yEnd & 0XFF);

    TFT_NT5510_AddrReg = (0x2C00);
}

/**
 * @brief 清屏成一个颜色
 * @param color:颜色值(RGB656)
 * @return  无
 * @author HZ12138
 * @date 2023-02-15 10:54:44
 */
void TFT_NT5510_Clear(uint16_t color)
{

    uint32_t total = TFT_NT5510_Width * TFT_NT5510_Height; // 得到总点数
    TFT_NT5510_SetCursor(0x00, 0x0000);                    // 设置光标位置
    TFT_NT5510_AddrReg = 0X2C00;                           // 开始写入GRAM
    for (uint32_t i = 0; i < total; i++)
    {
        TFT_NT5510_AddrData = color;
    }
}

/**
 * @brief 填充颜色
 * @param xStar:起始横坐标
 * @param yStar:起始纵坐标
 * @param xEnd:结束横坐标
 * @param yEnd:结束纵坐标
 * @param buf:颜色值(RGB656)
 * @author HZ12138
 * @date 2025-03-07 21:41:14
 */
void TFT_NT5510_Fill(uint16_t xStar, uint16_t yStar, uint16_t xEnd, uint16_t yEnd, uint16_t *buf)
{
    uint32_t len = (xEnd - xStar + 1) * (yEnd - yStar + 1);
    TFT_NT5510_SetWindows(xStar, yStar, xEnd, yEnd);
    TFT_NT5510_AddrReg = 0X2C00;

    for (uint32_t i = 0; i < len; i++)
        TFT_NT5510_AddrData = buf[i];
}
/**
 * @brief  设置扫描方向
 * @param dir 方向
 * @author HZ12138
 * @date 2025-03-07 22:30:14
 */
void TFT_NT5510_Scan_Dir(uint8_t dir)
{

    uint16_t temp;

    switch (dir)
    {
    case 0: // 从左到右,从上到下
        temp |= (0 << 7) | (0 << 6) | (0 << 5);
        break;
    case 1: // 从左到右,从下到上
        temp |= (1 << 7) | (0 << 6) | (0 << 5);
        break;
    case 2: // 从右到左,从上到下
        temp |= (0 << 7) | (1 << 6) | (0 << 5);
        break;
    case 3: // 从右到左,从下到上
        temp |= (1 << 7) | (1 << 6) | (0 << 5);
        break;
    case 4: // 从上到下,从左到右
        temp |= (0 << 7) | (0 << 6) | (1 << 5);
        break;
    case 5: // 从上到下,从右到左
        temp |= (0 << 7) | (1 << 6) | (1 << 5);
        break;
    case 6: // 从下到上,从左到右
        temp |= (1 << 7) | (0 << 6) | (1 << 5);
        break;
    case 7: // 从下到上,从右到左
        temp |= (1 << 7) | (1 << 6) | (1 << 5);
        break;
    }

    TFT_NT5510_Write_Reg(0X3600, temp);

    TFT_NT5510_SetWindows(0, 0, TFT_NT5510_Width, TFT_NT5510_Height);
}

/**
 * @brief 初始化
 * @param 无
 * @return 无
 * @author HZ12138
 * @date 2023-02-15 11:35:30
 */
void TFT_NT5510_Init(void)
{
    TFT_NT5510_RST(0);
    HAL_Delay(100);
    TFT_NT5510_RST(1);
    HAL_Delay(100);

    TFT_NT5510_Write_Reg(0xF000, 0x55);
    TFT_NT5510_Write_Reg(0xF001, 0xAA);
    TFT_NT5510_Write_Reg(0xF002, 0x52);
    TFT_NT5510_Write_Reg(0xF003, 0x08);
    TFT_NT5510_Write_Reg(0xF004, 0x01);
    // AVDD Set AVDD 5.2V
    TFT_NT5510_Write_Reg(0xB000, 0x0D);
    TFT_NT5510_Write_Reg(0xB001, 0x0D);
    TFT_NT5510_Write_Reg(0xB002, 0x0D);
    // AVDD ratio
    TFT_NT5510_Write_Reg(0xB600, 0x34);
    TFT_NT5510_Write_Reg(0xB601, 0x34);
    TFT_NT5510_Write_Reg(0xB602, 0x34);
    // AVEE -5.2V
    TFT_NT5510_Write_Reg(0xB100, 0x0D);
    TFT_NT5510_Write_Reg(0xB101, 0x0D);
    TFT_NT5510_Write_Reg(0xB102, 0x0D);
    // AVEE ratio
    TFT_NT5510_Write_Reg(0xB700, 0x34);
    TFT_NT5510_Write_Reg(0xB701, 0x34);
    TFT_NT5510_Write_Reg(0xB702, 0x34);
    // VCL -2.5V
    TFT_NT5510_Write_Reg(0xB200, 0x00);
    TFT_NT5510_Write_Reg(0xB201, 0x00);
    TFT_NT5510_Write_Reg(0xB202, 0x00);
    // VCL ratio
    TFT_NT5510_Write_Reg(0xB800, 0x24);
    TFT_NT5510_Write_Reg(0xB801, 0x24);
    TFT_NT5510_Write_Reg(0xB802, 0x24);
    // VGH 15V (Free pump)
    TFT_NT5510_Write_Reg(0xBF00, 0x01);
    TFT_NT5510_Write_Reg(0xB300, 0x0F);
    TFT_NT5510_Write_Reg(0xB301, 0x0F);
    TFT_NT5510_Write_Reg(0xB302, 0x0F);
    // VGH ratio
    TFT_NT5510_Write_Reg(0xB900, 0x34);
    TFT_NT5510_Write_Reg(0xB901, 0x34);
    TFT_NT5510_Write_Reg(0xB902, 0x34);
    // VGL_REG -10V
    TFT_NT5510_Write_Reg(0xB500, 0x08);
    TFT_NT5510_Write_Reg(0xB501, 0x08);
    TFT_NT5510_Write_Reg(0xB502, 0x08);
    TFT_NT5510_Write_Reg(0xC200, 0x03);
    // VGLX ratio
    TFT_NT5510_Write_Reg(0xBA00, 0x24);
    TFT_NT5510_Write_Reg(0xBA01, 0x24);
    TFT_NT5510_Write_Reg(0xBA02, 0x24);
    // VGMP/VGSP 4.5V/0V
    TFT_NT5510_Write_Reg(0xBC00, 0x00);
    TFT_NT5510_Write_Reg(0xBC01, 0x78);
    TFT_NT5510_Write_Reg(0xBC02, 0x00);
    // VGMN/VGSN -4.5V/0V
    TFT_NT5510_Write_Reg(0xBD00, 0x00);
    TFT_NT5510_Write_Reg(0xBD01, 0x78);
    TFT_NT5510_Write_Reg(0xBD02, 0x00);
    // VCOM
    TFT_NT5510_Write_Reg(0xBE00, 0x00);
    TFT_NT5510_Write_Reg(0xBE01, 0x64);
    // Gamma Setting
    TFT_NT5510_Write_Reg(0xD100, 0x00);
    TFT_NT5510_Write_Reg(0xD101, 0x33);
    TFT_NT5510_Write_Reg(0xD102, 0x00);
    TFT_NT5510_Write_Reg(0xD103, 0x34);
    TFT_NT5510_Write_Reg(0xD104, 0x00);
    TFT_NT5510_Write_Reg(0xD105, 0x3A);
    TFT_NT5510_Write_Reg(0xD106, 0x00);
    TFT_NT5510_Write_Reg(0xD107, 0x4A);
    TFT_NT5510_Write_Reg(0xD108, 0x00);
    TFT_NT5510_Write_Reg(0xD109, 0x5C);
    TFT_NT5510_Write_Reg(0xD10A, 0x00);
    TFT_NT5510_Write_Reg(0xD10B, 0x81);
    TFT_NT5510_Write_Reg(0xD10C, 0x00);
    TFT_NT5510_Write_Reg(0xD10D, 0xA6);
    TFT_NT5510_Write_Reg(0xD10E, 0x00);
    TFT_NT5510_Write_Reg(0xD10F, 0xE5);
    TFT_NT5510_Write_Reg(0xD110, 0x01);
    TFT_NT5510_Write_Reg(0xD111, 0x13);
    TFT_NT5510_Write_Reg(0xD112, 0x01);
    TFT_NT5510_Write_Reg(0xD113, 0x54);
    TFT_NT5510_Write_Reg(0xD114, 0x01);
    TFT_NT5510_Write_Reg(0xD115, 0x82);
    TFT_NT5510_Write_Reg(0xD116, 0x01);
    TFT_NT5510_Write_Reg(0xD117, 0xCA);
    TFT_NT5510_Write_Reg(0xD118, 0x02);
    TFT_NT5510_Write_Reg(0xD119, 0x00);
    TFT_NT5510_Write_Reg(0xD11A, 0x02);
    TFT_NT5510_Write_Reg(0xD11B, 0x01);
    TFT_NT5510_Write_Reg(0xD11C, 0x02);
    TFT_NT5510_Write_Reg(0xD11D, 0x34);
    TFT_NT5510_Write_Reg(0xD11E, 0x02);
    TFT_NT5510_Write_Reg(0xD11F, 0x67);
    TFT_NT5510_Write_Reg(0xD120, 0x02);
    TFT_NT5510_Write_Reg(0xD121, 0x84);
    TFT_NT5510_Write_Reg(0xD122, 0x02);
    TFT_NT5510_Write_Reg(0xD123, 0xA4);
    TFT_NT5510_Write_Reg(0xD124, 0x02);
    TFT_NT5510_Write_Reg(0xD125, 0xB7);
    TFT_NT5510_Write_Reg(0xD126, 0x02);
    TFT_NT5510_Write_Reg(0xD127, 0xCF);
    TFT_NT5510_Write_Reg(0xD128, 0x02);
    TFT_NT5510_Write_Reg(0xD129, 0xDE);
    TFT_NT5510_Write_Reg(0xD12A, 0x02);
    TFT_NT5510_Write_Reg(0xD12B, 0xF2);
    TFT_NT5510_Write_Reg(0xD12C, 0x02);
    TFT_NT5510_Write_Reg(0xD12D, 0xFE);
    TFT_NT5510_Write_Reg(0xD12E, 0x03);
    TFT_NT5510_Write_Reg(0xD12F, 0x10);
    TFT_NT5510_Write_Reg(0xD130, 0x03);
    TFT_NT5510_Write_Reg(0xD131, 0x33);
    TFT_NT5510_Write_Reg(0xD132, 0x03);
    TFT_NT5510_Write_Reg(0xD133, 0x6D);
    TFT_NT5510_Write_Reg(0xD200, 0x00);
    TFT_NT5510_Write_Reg(0xD201, 0x33);
    TFT_NT5510_Write_Reg(0xD202, 0x00);
    TFT_NT5510_Write_Reg(0xD203, 0x34);
    TFT_NT5510_Write_Reg(0xD204, 0x00);
    TFT_NT5510_Write_Reg(0xD205, 0x3A);
    TFT_NT5510_Write_Reg(0xD206, 0x00);
    TFT_NT5510_Write_Reg(0xD207, 0x4A);
    TFT_NT5510_Write_Reg(0xD208, 0x00);
    TFT_NT5510_Write_Reg(0xD209, 0x5C);
    TFT_NT5510_Write_Reg(0xD20A, 0x00);

    TFT_NT5510_Write_Reg(0xD20B, 0x81);
    TFT_NT5510_Write_Reg(0xD20C, 0x00);
    TFT_NT5510_Write_Reg(0xD20D, 0xA6);
    TFT_NT5510_Write_Reg(0xD20E, 0x00);
    TFT_NT5510_Write_Reg(0xD20F, 0xE5);
    TFT_NT5510_Write_Reg(0xD210, 0x01);
    TFT_NT5510_Write_Reg(0xD211, 0x13);
    TFT_NT5510_Write_Reg(0xD212, 0x01);
    TFT_NT5510_Write_Reg(0xD213, 0x54);
    TFT_NT5510_Write_Reg(0xD214, 0x01);
    TFT_NT5510_Write_Reg(0xD215, 0x82);
    TFT_NT5510_Write_Reg(0xD216, 0x01);
    TFT_NT5510_Write_Reg(0xD217, 0xCA);
    TFT_NT5510_Write_Reg(0xD218, 0x02);
    TFT_NT5510_Write_Reg(0xD219, 0x00);
    TFT_NT5510_Write_Reg(0xD21A, 0x02);
    TFT_NT5510_Write_Reg(0xD21B, 0x01);
    TFT_NT5510_Write_Reg(0xD21C, 0x02);
    TFT_NT5510_Write_Reg(0xD21D, 0x34);
    TFT_NT5510_Write_Reg(0xD21E, 0x02);
    TFT_NT5510_Write_Reg(0xD21F, 0x67);
    TFT_NT5510_Write_Reg(0xD220, 0x02);
    TFT_NT5510_Write_Reg(0xD221, 0x84);
    TFT_NT5510_Write_Reg(0xD222, 0x02);
    TFT_NT5510_Write_Reg(0xD223, 0xA4);
    TFT_NT5510_Write_Reg(0xD224, 0x02);
    TFT_NT5510_Write_Reg(0xD225, 0xB7);
    TFT_NT5510_Write_Reg(0xD226, 0x02);
    TFT_NT5510_Write_Reg(0xD227, 0xCF);
    TFT_NT5510_Write_Reg(0xD228, 0x02);
    TFT_NT5510_Write_Reg(0xD229, 0xDE);
    TFT_NT5510_Write_Reg(0xD22A, 0x02);
    TFT_NT5510_Write_Reg(0xD22B, 0xF2);
    TFT_NT5510_Write_Reg(0xD22C, 0x02);
    TFT_NT5510_Write_Reg(0xD22D, 0xFE);
    TFT_NT5510_Write_Reg(0xD22E, 0x03);
    TFT_NT5510_Write_Reg(0xD22F, 0x10);
    TFT_NT5510_Write_Reg(0xD230, 0x03);
    TFT_NT5510_Write_Reg(0xD231, 0x33);
    TFT_NT5510_Write_Reg(0xD232, 0x03);
    TFT_NT5510_Write_Reg(0xD233, 0x6D);
    TFT_NT5510_Write_Reg(0xD300, 0x00);
    TFT_NT5510_Write_Reg(0xD301, 0x33);
    TFT_NT5510_Write_Reg(0xD302, 0x00);
    TFT_NT5510_Write_Reg(0xD303, 0x34);
    TFT_NT5510_Write_Reg(0xD304, 0x00);
    TFT_NT5510_Write_Reg(0xD305, 0x3A);
    TFT_NT5510_Write_Reg(0xD306, 0x00);
    TFT_NT5510_Write_Reg(0xD307, 0x4A);
    TFT_NT5510_Write_Reg(0xD308, 0x00);
    TFT_NT5510_Write_Reg(0xD309, 0x5C);
    TFT_NT5510_Write_Reg(0xD30A, 0x00);

    TFT_NT5510_Write_Reg(0xD30B, 0x81);
    TFT_NT5510_Write_Reg(0xD30C, 0x00);
    TFT_NT5510_Write_Reg(0xD30D, 0xA6);
    TFT_NT5510_Write_Reg(0xD30E, 0x00);
    TFT_NT5510_Write_Reg(0xD30F, 0xE5);
    TFT_NT5510_Write_Reg(0xD310, 0x01);
    TFT_NT5510_Write_Reg(0xD311, 0x13);
    TFT_NT5510_Write_Reg(0xD312, 0x01);
    TFT_NT5510_Write_Reg(0xD313, 0x54);
    TFT_NT5510_Write_Reg(0xD314, 0x01);
    TFT_NT5510_Write_Reg(0xD315, 0x82);
    TFT_NT5510_Write_Reg(0xD316, 0x01);
    TFT_NT5510_Write_Reg(0xD317, 0xCA);
    TFT_NT5510_Write_Reg(0xD318, 0x02);
    TFT_NT5510_Write_Reg(0xD319, 0x00);
    TFT_NT5510_Write_Reg(0xD31A, 0x02);
    TFT_NT5510_Write_Reg(0xD31B, 0x01);
    TFT_NT5510_Write_Reg(0xD31C, 0x02);
    TFT_NT5510_Write_Reg(0xD31D, 0x34);
    TFT_NT5510_Write_Reg(0xD31E, 0x02);
    TFT_NT5510_Write_Reg(0xD31F, 0x67);
    TFT_NT5510_Write_Reg(0xD320, 0x02);
    TFT_NT5510_Write_Reg(0xD321, 0x84);
    TFT_NT5510_Write_Reg(0xD322, 0x02);
    TFT_NT5510_Write_Reg(0xD323, 0xA4);
    TFT_NT5510_Write_Reg(0xD324, 0x02);
    TFT_NT5510_Write_Reg(0xD325, 0xB7);
    TFT_NT5510_Write_Reg(0xD326, 0x02);
    TFT_NT5510_Write_Reg(0xD327, 0xCF);
    TFT_NT5510_Write_Reg(0xD328, 0x02);
    TFT_NT5510_Write_Reg(0xD329, 0xDE);
    TFT_NT5510_Write_Reg(0xD32A, 0x02);
    TFT_NT5510_Write_Reg(0xD32B, 0xF2);
    TFT_NT5510_Write_Reg(0xD32C, 0x02);
    TFT_NT5510_Write_Reg(0xD32D, 0xFE);
    TFT_NT5510_Write_Reg(0xD32E, 0x03);
    TFT_NT5510_Write_Reg(0xD32F, 0x10);
    TFT_NT5510_Write_Reg(0xD330, 0x03);
    TFT_NT5510_Write_Reg(0xD331, 0x33);
    TFT_NT5510_Write_Reg(0xD332, 0x03);
    TFT_NT5510_Write_Reg(0xD333, 0x6D);
    TFT_NT5510_Write_Reg(0xD400, 0x00);
    TFT_NT5510_Write_Reg(0xD401, 0x33);
    TFT_NT5510_Write_Reg(0xD402, 0x00);
    TFT_NT5510_Write_Reg(0xD403, 0x34);
    TFT_NT5510_Write_Reg(0xD404, 0x00);
    TFT_NT5510_Write_Reg(0xD405, 0x3A);
    TFT_NT5510_Write_Reg(0xD406, 0x00);
    TFT_NT5510_Write_Reg(0xD407, 0x4A);
    TFT_NT5510_Write_Reg(0xD408, 0x00);
    TFT_NT5510_Write_Reg(0xD409, 0x5C);
    TFT_NT5510_Write_Reg(0xD40A, 0x00);
    TFT_NT5510_Write_Reg(0xD40B, 0x81);

    TFT_NT5510_Write_Reg(0xD40C, 0x00);
    TFT_NT5510_Write_Reg(0xD40D, 0xA6);
    TFT_NT5510_Write_Reg(0xD40E, 0x00);
    TFT_NT5510_Write_Reg(0xD40F, 0xE5);
    TFT_NT5510_Write_Reg(0xD410, 0x01);
    TFT_NT5510_Write_Reg(0xD411, 0x13);
    TFT_NT5510_Write_Reg(0xD412, 0x01);
    TFT_NT5510_Write_Reg(0xD413, 0x54);
    TFT_NT5510_Write_Reg(0xD414, 0x01);
    TFT_NT5510_Write_Reg(0xD415, 0x82);
    TFT_NT5510_Write_Reg(0xD416, 0x01);
    TFT_NT5510_Write_Reg(0xD417, 0xCA);
    TFT_NT5510_Write_Reg(0xD418, 0x02);
    TFT_NT5510_Write_Reg(0xD419, 0x00);
    TFT_NT5510_Write_Reg(0xD41A, 0x02);
    TFT_NT5510_Write_Reg(0xD41B, 0x01);
    TFT_NT5510_Write_Reg(0xD41C, 0x02);
    TFT_NT5510_Write_Reg(0xD41D, 0x34);
    TFT_NT5510_Write_Reg(0xD41E, 0x02);
    TFT_NT5510_Write_Reg(0xD41F, 0x67);
    TFT_NT5510_Write_Reg(0xD420, 0x02);
    TFT_NT5510_Write_Reg(0xD421, 0x84);
    TFT_NT5510_Write_Reg(0xD422, 0x02);
    TFT_NT5510_Write_Reg(0xD423, 0xA4);
    TFT_NT5510_Write_Reg(0xD424, 0x02);
    TFT_NT5510_Write_Reg(0xD425, 0xB7);
    TFT_NT5510_Write_Reg(0xD426, 0x02);
    TFT_NT5510_Write_Reg(0xD427, 0xCF);
    TFT_NT5510_Write_Reg(0xD428, 0x02);
    TFT_NT5510_Write_Reg(0xD429, 0xDE);
    TFT_NT5510_Write_Reg(0xD42A, 0x02);
    TFT_NT5510_Write_Reg(0xD42B, 0xF2);
    TFT_NT5510_Write_Reg(0xD42C, 0x02);
    TFT_NT5510_Write_Reg(0xD42D, 0xFE);
    TFT_NT5510_Write_Reg(0xD42E, 0x03);
    TFT_NT5510_Write_Reg(0xD42F, 0x10);
    TFT_NT5510_Write_Reg(0xD430, 0x03);
    TFT_NT5510_Write_Reg(0xD431, 0x33);
    TFT_NT5510_Write_Reg(0xD432, 0x03);
    TFT_NT5510_Write_Reg(0xD433, 0x6D);
    TFT_NT5510_Write_Reg(0xD500, 0x00);
    TFT_NT5510_Write_Reg(0xD501, 0x33);
    TFT_NT5510_Write_Reg(0xD502, 0x00);
    TFT_NT5510_Write_Reg(0xD503, 0x34);
    TFT_NT5510_Write_Reg(0xD504, 0x00);
    TFT_NT5510_Write_Reg(0xD505, 0x3A);
    TFT_NT5510_Write_Reg(0xD506, 0x00);
    TFT_NT5510_Write_Reg(0xD507, 0x4A);
    TFT_NT5510_Write_Reg(0xD508, 0x00);
    TFT_NT5510_Write_Reg(0xD509, 0x5C);
    TFT_NT5510_Write_Reg(0xD50A, 0x00);
    TFT_NT5510_Write_Reg(0xD50B, 0x81);

    TFT_NT5510_Write_Reg(0xD50C, 0x00);
    TFT_NT5510_Write_Reg(0xD50D, 0xA6);
    TFT_NT5510_Write_Reg(0xD50E, 0x00);
    TFT_NT5510_Write_Reg(0xD50F, 0xE5);
    TFT_NT5510_Write_Reg(0xD510, 0x01);
    TFT_NT5510_Write_Reg(0xD511, 0x13);
    TFT_NT5510_Write_Reg(0xD512, 0x01);
    TFT_NT5510_Write_Reg(0xD513, 0x54);
    TFT_NT5510_Write_Reg(0xD514, 0x01);
    TFT_NT5510_Write_Reg(0xD515, 0x82);
    TFT_NT5510_Write_Reg(0xD516, 0x01);
    TFT_NT5510_Write_Reg(0xD517, 0xCA);
    TFT_NT5510_Write_Reg(0xD518, 0x02);
    TFT_NT5510_Write_Reg(0xD519, 0x00);
    TFT_NT5510_Write_Reg(0xD51A, 0x02);
    TFT_NT5510_Write_Reg(0xD51B, 0x01);
    TFT_NT5510_Write_Reg(0xD51C, 0x02);
    TFT_NT5510_Write_Reg(0xD51D, 0x34);
    TFT_NT5510_Write_Reg(0xD51E, 0x02);
    TFT_NT5510_Write_Reg(0xD51F, 0x67);
    TFT_NT5510_Write_Reg(0xD520, 0x02);
    TFT_NT5510_Write_Reg(0xD521, 0x84);
    TFT_NT5510_Write_Reg(0xD522, 0x02);
    TFT_NT5510_Write_Reg(0xD523, 0xA4);
    TFT_NT5510_Write_Reg(0xD524, 0x02);
    TFT_NT5510_Write_Reg(0xD525, 0xB7);
    TFT_NT5510_Write_Reg(0xD526, 0x02);
    TFT_NT5510_Write_Reg(0xD527, 0xCF);
    TFT_NT5510_Write_Reg(0xD528, 0x02);
    TFT_NT5510_Write_Reg(0xD529, 0xDE);
    TFT_NT5510_Write_Reg(0xD52A, 0x02);
    TFT_NT5510_Write_Reg(0xD52B, 0xF2);
    TFT_NT5510_Write_Reg(0xD52C, 0x02);
    TFT_NT5510_Write_Reg(0xD52D, 0xFE);
    TFT_NT5510_Write_Reg(0xD52E, 0x03);
    TFT_NT5510_Write_Reg(0xD52F, 0x10);
    TFT_NT5510_Write_Reg(0xD530, 0x03);
    TFT_NT5510_Write_Reg(0xD531, 0x33);
    TFT_NT5510_Write_Reg(0xD532, 0x03);
    TFT_NT5510_Write_Reg(0xD533, 0x6D);
    TFT_NT5510_Write_Reg(0xD600, 0x00);
    TFT_NT5510_Write_Reg(0xD601, 0x33);
    TFT_NT5510_Write_Reg(0xD602, 0x00);
    TFT_NT5510_Write_Reg(0xD603, 0x34);
    TFT_NT5510_Write_Reg(0xD604, 0x00);
    TFT_NT5510_Write_Reg(0xD605, 0x3A);
    TFT_NT5510_Write_Reg(0xD606, 0x00);
    TFT_NT5510_Write_Reg(0xD607, 0x4A);
    TFT_NT5510_Write_Reg(0xD608, 0x00);
    TFT_NT5510_Write_Reg(0xD609, 0x5C);
    TFT_NT5510_Write_Reg(0xD60A, 0x00);
    TFT_NT5510_Write_Reg(0xD60B, 0x81);

    TFT_NT5510_Write_Reg(0xD60C, 0x00);
    TFT_NT5510_Write_Reg(0xD60D, 0xA6);
    TFT_NT5510_Write_Reg(0xD60E, 0x00);
    TFT_NT5510_Write_Reg(0xD60F, 0xE5);
    TFT_NT5510_Write_Reg(0xD610, 0x01);
    TFT_NT5510_Write_Reg(0xD611, 0x13);
    TFT_NT5510_Write_Reg(0xD612, 0x01);
    TFT_NT5510_Write_Reg(0xD613, 0x54);
    TFT_NT5510_Write_Reg(0xD614, 0x01);
    TFT_NT5510_Write_Reg(0xD615, 0x82);
    TFT_NT5510_Write_Reg(0xD616, 0x01);
    TFT_NT5510_Write_Reg(0xD617, 0xCA);
    TFT_NT5510_Write_Reg(0xD618, 0x02);
    TFT_NT5510_Write_Reg(0xD619, 0x00);
    TFT_NT5510_Write_Reg(0xD61A, 0x02);
    TFT_NT5510_Write_Reg(0xD61B, 0x01);
    TFT_NT5510_Write_Reg(0xD61C, 0x02);
    TFT_NT5510_Write_Reg(0xD61D, 0x34);
    TFT_NT5510_Write_Reg(0xD61E, 0x02);
    TFT_NT5510_Write_Reg(0xD61F, 0x67);
    TFT_NT5510_Write_Reg(0xD620, 0x02);
    TFT_NT5510_Write_Reg(0xD621, 0x84);
    TFT_NT5510_Write_Reg(0xD622, 0x02);
    TFT_NT5510_Write_Reg(0xD623, 0xA4);
    TFT_NT5510_Write_Reg(0xD624, 0x02);
    TFT_NT5510_Write_Reg(0xD625, 0xB7);
    TFT_NT5510_Write_Reg(0xD626, 0x02);
    TFT_NT5510_Write_Reg(0xD627, 0xCF);
    TFT_NT5510_Write_Reg(0xD628, 0x02);
    TFT_NT5510_Write_Reg(0xD629, 0xDE);
    TFT_NT5510_Write_Reg(0xD62A, 0x02);
    TFT_NT5510_Write_Reg(0xD62B, 0xF2);
    TFT_NT5510_Write_Reg(0xD62C, 0x02);
    TFT_NT5510_Write_Reg(0xD62D, 0xFE);
    TFT_NT5510_Write_Reg(0xD62E, 0x03);
    TFT_NT5510_Write_Reg(0xD62F, 0x10);
    TFT_NT5510_Write_Reg(0xD630, 0x03);
    TFT_NT5510_Write_Reg(0xD631, 0x33);
    TFT_NT5510_Write_Reg(0xD632, 0x03);
    TFT_NT5510_Write_Reg(0xD633, 0x6D);
    // LV2 Page 0 enable
    TFT_NT5510_Write_Reg(0xF000, 0x55);
    TFT_NT5510_Write_Reg(0xF001, 0xAA);
    TFT_NT5510_Write_Reg(0xF002, 0x52);
    TFT_NT5510_Write_Reg(0xF003, 0x08);
    TFT_NT5510_Write_Reg(0xF004, 0x00);
    // Display control
    TFT_NT5510_Write_Reg(0xB100, 0xCC);
    TFT_NT5510_Write_Reg(0xB101, 0x00);
    // Source hold time
    TFT_NT5510_Write_Reg(0xB600, 0x05);
    // Gate EQ control
    TFT_NT5510_Write_Reg(0xB700, 0x70);
    TFT_NT5510_Write_Reg(0xB701, 0x70);
    // Source EQ control (Mode 2)
    TFT_NT5510_Write_Reg(0xB800, 0x01);
    TFT_NT5510_Write_Reg(0xB801, 0x03);
    TFT_NT5510_Write_Reg(0xB802, 0x03);
    TFT_NT5510_Write_Reg(0xB803, 0x03);
    // Inversion mode (2-dot)
    TFT_NT5510_Write_Reg(0xBC00, 0x02);
    TFT_NT5510_Write_Reg(0xBC01, 0x00);
    TFT_NT5510_Write_Reg(0xBC02, 0x00);
    // Timing control 4H w/ 4-delay
    TFT_NT5510_Write_Reg(0xC900, 0xD0);
    TFT_NT5510_Write_Reg(0xC901, 0x02);
    TFT_NT5510_Write_Reg(0xC902, 0x50);
    TFT_NT5510_Write_Reg(0xC903, 0x50);
    TFT_NT5510_Write_Reg(0xC904, 0x50);
    TFT_NT5510_Write_Reg(0x3500, 0x00);
    TFT_NT5510_Write_Reg(0x3A00, 0x55); // 16-bit/pixel

    TFT_NT5510_AddrReg = 0x1100;
    HAL_Delay(100);
    TFT_NT5510_AddrReg = 0x2900;

    TFT_NT5510_BLK(1);
    TFT_NT5510_Scan_Dir(TFT_NT5510_dir);

    TFT_NT5510_Clear(0xffff);
}
相关推荐
沐欣工作室_lvyiyi3 小时前
基于单片机的智能奶茶机(论文 +源码)
stm32·单片机·嵌入式硬件·物联网·智能家居
猪猪童鞋4 小时前
STM32F4单片机SDIO驱动SD卡
stm32·单片机·嵌入式硬件·sd卡驱动·sdio总线
Tlog嵌入式4 小时前
[项目]基于FreeRTOS的STM32四轴飞行器: 十六.激光测距定高功能
stm32·单片机·嵌入式硬件·mcu·iot
charlie1145141916 小时前
从0开始——在PlatformIO下开展STM32单片机的HAL库函数编程指南
stm32·单片机·嵌入式硬件·学习·嵌入式软件
三歪爱三玖7 小时前
【蓝桥杯】单片机设计与开发,温度传感器DS18B20
单片机·职场和发展·蓝桥杯
y198759987 小时前
C++代码脚本实现STM32启动
c++·stm32·嵌入式硬件
violet_evergarden.7 小时前
STM32单片机的桌面宠物机器人(基于HAL库)
stm32·单片机·mcu·机器人·宠物
柒月玖.8 小时前
基于AT89C52单片机的温湿度报警控制调节系统
单片机·嵌入式硬件
龙大大L8 小时前
第四章.4.3.1ESP32传感器数据采集与滤波处理实战教程
stm32·单片机·嵌入式硬件
weixin_413920618 小时前
1、C51单片机(STC8G2K64S4)串口实验
单片机·嵌入式硬件