学习stm32,TFT LCD显现屏操控是很重要的一章,本人在开始学习STM32遇到了许多困难,所以把学习中堆集的部分感觉重要的知识点罗列出来。现在常用的TFT液晶内部驱动芯片是ILI9320,ILI9325系列,内部原理根本共同,我用的是ILI9320。用stm32驱动液晶,实际上便是驱动ILI9320芯片。点亮TFT LCD的详细步骤有:
(1)stm32与ILI9320芯片管脚的初始化。
void LCD_Init(void); /*初始化LCD,也便是初始化LCD操控器ILI9320芯片与stm32操控器的管脚衔接装备*/其间包含CS:TFTLCD片选信号,WR:向TFTLCD写入信号,RD:从TFTLCD读取信号,DB(15–0):16位双向数据线,RST:硬复位TFTLCD,RS:指令/数据标志(0 读写指令;1 读写数据),TFT模块有个操控器,名为ILI9320,该操控器自带显存,其显存总巨细为172820,模块数据线与显存的对应联系位565方法
SGRAM (Synchronous Graphics Random-Access Memory),同步图形随机存储器,是一种专为显卡规划的显存、一种图形读写能力较强的显存,由SDRAM改进而成。SGRAM读写数据时不是逐个读取,而是以“块”(Block)为单位,然后削减了内存全体读写的次数,提高了图形操控器的功率。同SDRAM相同,SGRAM也分一般SGRAM与DDR SGRAM两种。
R0,这个指令有两个功用,假如对它写,则最低位位OSC,用于敞开或封闭振荡器,而假如对它读,回来操控器类型。咱们知道了操控器类型,能够针对不同类型的操控器,进行不同对的初始化。
R3,进口形式指令。要点重视I/D0,I/D1,AM这三个位,由于这3个位操控了屏幕的显现方向。AM:操控GRAM更新方向,当AM=0的时分,地址以行方向更新,当为1的时分,地址以列方向更新。I/D[1:0]:当更新了一个数据之后,依据这两个位的设置来操控地址计数器主动添加/削减1,其联系图如下
R7,显现操控指令。该指令CL位用来操控是8位五颜六色,仍是26万色。为0是26万色,为1时八位色。D1,D0,BASEE这三个位用来操控显现开关与否的。
当悉数置1的时分敞开显现,全0是封闭。咱们一般经过该指令的设置来敞开或封闭显现器,以降低功耗。
R22,(读/写)数据(到/从)GRAM。
R32,R33,设置GRAM的行地址和列地址。R32用于设置列地址(X坐标,0~239),R33用于设置行地址(Y坐标,0~319)。当咱们要在某个指定点写入一个色彩的时分,先经过这两个指令设置到改点,然后写入色彩值就能够了。
R34,写数据到GRAM指令,当写入了这个指令之后,地址计数器才会主动的添加和削减。
R80~R83,队伍GRAM地址方位设置。这几个指令用于设定你显现区域的巨细,咱们整个屏的巨细240*320, 可是有时分咱们只需求在其间一部分区域写入数据,假如用先写坐标,后写数据这样的方法来完成,则速度大打折扣。
此刻咱们能够经过这几个指令,在其间拓荒一个区域,然后不停地丢数据,地址计数器就会依据R3的设置主动添加/减小,这样就不需求频频的写地址了,大大提高了改写的速度。
(2)详细TFTLCD模块功用程序
显现屏宽度参数界说
#define LCD_W 240
#define LCD_H 320
#define LCD_LED PCout()//LCD背光
#define LCD_CS PCout() //片选端口
#define LCD_RS PCout() //数据/指令
#define LCD_WR PCout() //写数据
#define LCD_RD PCout() //读数据
A. 写寄存器
首要依据英文版的ILI9320 datasheet 描绘的关于写寄存器操控管脚的首要装备。下图所示:
图:写寄存器波形图
voidLCD_WriteReg(u16 LCD_Reg,u16 LCD_RegValue)
{
/* Write 16-bit Index, thenWrite Reg */
ClrCs //片选复位
ClrRs //挑选指令
ClrWr //写数据复位
LCD_Write(LCD_Reg); //写入操作指令代码
SetWr //写数据置位
/* 写16位的数据到指定寄存器*/
SetRs
ClrWr
LCD_Write(LCD_RegValue); //写数据
SetWr
SetCs
}
B. 读寄存器
图:读寄存器波形图
u16 LCD_ReadReg(u8 LCD_Reg)
{
u16data;
ClrCs
ClrRs
ClrWr
LCD_Write(LCD_Reg);
SetWr
SetRs
ClrRd
SetRd
data= LCD_Read();
SetCs
return data;
}
C. 写GRAM
图:写GRAM波形图
/*读GRAM预备进程*/
void LCD_WriteRAM_Prepare(void)
{
/*Write 16-bit Index, then Write Reg */
ClrCs
ClrRs
ClrWr
LCD_Write(0x22);
SetWr
SetCs
}
/*读GRAM*/
void LCD_WriteRAM(u16 RGB_Code)
{
/*Write 16-bit Index, then Write Reg */
ClrCs
SetRs
ClrWr
LCD_Write(RGB_Code);
SetWr
SetCs
}
D. 读GRAM
图:读GRAM波形图
u16 LCD_ReadRAM(void)
{
u16dummy;
u16data;
LCD_WriteRAM_Prepare();
LCD_DB_AS_InPut(); //将DB端口设置为输入形式
dummy= LCD_ReadSta();
dummy++;
data= LCD_ReadSta();
LCD_DB_AS_OutPut();
return data;
}
E.剩余的部分便是操控液晶画点划线,显现图画的内容,跟51年代的操控液晶根本相似。