基于LKS32(凌鸥芯片)液晶屏(ST7735S 1.8cun)SPI硬件驱动的方法
·
目的:
加速扫屏速度,软件模拟IO扫屏速度较慢
方法:
一、硬件接线
SPI 四线通讯 ,阔以只接2线 ,SPI_DI(MISO)阔以不接,CS 端接普通IO即可
MCU TFT
SPI-DO(MOSI) 接 SDA
SPI_CLK 接 SCK
屏幕端口:
说明:
RESET: 液晶屏复位
RS:为数据命令选择端,发送数据拉高,发送命令置低
二、软件配置:
(1)GPIO初始化 :
//P24 CLK P210 SPI DO
GPIO_StructInit(&GPIO_InitStruct);
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10;
GPIO_Init(GPIO2, &GPIO_InitStruct);
GPIO_PinAFConfig(GPIO2, GPIO_PinSource_10, AF5_SPI); //GPIO2.10复用SPI_DO功能
GPIO_StructInit(&GPIO_InitStruct);
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT; //设置为输入模式
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4;
GPIO_Init(GPIO2, &GPIO_InitStruct);
GPIO_PinAFConfig(GPIO2, GPIO_PinSource_4, AF5_SPI); //GPIO1.0复用SPI_CLK功能
(2)SPI初始化:
SPI_InitTypeDef SPI_InitStruct;
SPI_StructInit(&SPI_InitStruct); // SPI结构体初始化
SPI_InitStruct.Duplex = SPI_Half_Tx; // 模式设置 仅发送模式
SPI_InitStruct.Mode = SPI_Master; //master主机模式
SPI_InitStruct.EN = ENABLE; //使能SPI模块
SPI_InitStruct.TRANS_MODE = SPI_DMA_DISABLE; // 选择SPI搬移方式,由MCU搬运数据到SPI
SPI_InitStruct.Trig = 0; //内部自动触发传输
SPI_InitStruct.ENDIAN = SPI_FIRSTSEND_MSB; //该字节先发送 LSB
SPI_InitStruct.CPHA = 1; //第一个沿为发送数据时刻
SPI_InitStruct.CPOL = 1; //CLK默认高电平
SPI_InitStruct.BaudRate = 3; //传输速度96MHZ/(2*(31+1))= 1.50MHZ //31 =1.5M 7 =6M 3=12M
SPI_InitStruct.ByteLength = 8; //发送零个字节
SPI_InitStruct.IRQEna = DISABLE; //关闭SPI各中断
SPI_Init(SPI0, &SPI_InitStruct); //SPI初始化程序
SPI波特率 设置 见芯片技术手册(UM)
(3)程序调用:
在原LCD软件模拟的发送数据的地方改为SPI发送即可
void LCD_Writ_Bus(u8 dat)
{
LCD_CS_Clr();
SPI_SendByte(dat);
LCD_CS_Set();
/*
// 软件模拟:
u8 i;
LCD_CS_Clr();
for(i=0;i<8;i++)
{
LCD_SCLK_Clr();
if(dat&0x80)
{
LCD_MOSI_Set();
}
else
{
LCD_MOSI_Clr();
}
LCD_SCLK_Set();
dat<<=1;
}
LCD_CS_Set();
*/
}
u8 SPI_SendByte(u8 byte)
{
u8 rdata = 0;
SPI0_TX_DATA = byte; //发送数据
while (!(SPI0_IE & BIT2))
{
}; /*等待传输完成*/
rdata = SPI0_RX_DATA; //接收数据
SPI0_IE |= BIT2; //清除SPI传输完成标志位
return rdata; //返回接收数据
}
实验结果:
扫屏速度是有改善的
LCD驱动大家可以网上自行百度,有很多软件模拟的。
更多推荐
所有评论(0)