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);
}