一、引脚介绍
1.8寸TFT屏幕除去电源引脚还有6个引脚,分别为SCL、SDA、RST、DC、CS、BLK。
SCL:液晶屏SPI总线时钟信号
SDA:液晶屏SPI总线数据写信号
RST:液晶屏复位控制信号,为0则复位。
DC :液晶屏数据/命令控制信号,1为数据,0为命令
CS :液晶屏片选控制信号,0为片选开启
BLK:液晶屏背光控制信号,1为开启背光,0为关闭背光
这里附上我的接线图: 由于1.8寸的TFT使用的是SPI的时序,但其好像又好像有不同,细看之下还是一样的。这里的SDA是液晶屏SPI总线数据写信号,是由主机控制的,是不是很熟悉,不就是SPI的MOSI么?其中SCK为时钟线引脚,那么唯一便是少了MISO(我们不需要读数据)。
二、 时序介绍
由于没有MISO引脚,也就是我们根本用不到读,所以就没有读时序。上图便是其写时序了,SDA在SCL的上升沿采样(高位先行),在SCL低电平数据变化;初始时SCL为低电平,第一个边沿采样,也就是(CPOL = 0、CPHA = 0)不就是相当于舍弃了读数据的SPI的模式0么?对于SPI时序这里就不作介绍了,可以参考我的文章:协议篇之SPI通信(软件篇)
2.1 SPI引脚初始化
2.1.1 引脚的定义:
(DC是控制写的是数据还是命令的,正常的SPI是先发寄存器在发要写的数据,这里直接用这个线代替)
#define TFT_MOSI_PORT GPIOA
#define TFT_MOSI_PIN GPIO_Pin_7
#define TFT_SCK_PORT GPIOA
#define TFT_SCK_PIN GPIO_Pin_5
#define TFT_NSS_PORT GPIOB
#define TFT_NSS_PIN GPIO_Pin_7
#define TFT_DC_PORT GPIOB
#define TFT_DC_PIN GPIO_Pin_6
#define TFT_MOSI(x) TFT_MOSI_PORT->BSRR = TFT_MOSI_PIN<<(16*(!x))
#define TFT_SCK(x) TFT_SCK_PORT->BSRR = TFT_SCK_PIN<<(16*(!x))
#define TFT_NSS(x) TFT_NSS_PORT->BSRR = TFT_NSS_PIN<<(16*(!x))
#define TFT_DC(x) TFT_DC_PORT->BSRR = TFT_DC_PIN<<(16*(!x))
2.1.2 引脚初始化
由于这些全是由主机控制的,所以全初始化为推挽输出模式:
void lcd_spi_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;//定义一个GPIO_InitTypeDef类型的结构体
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE