资讯详情

Stm32的TFT LCD显示器控制学习笔记

学习stm32,TFT 控制是很重要的一章,本人在初步学习STM32遇到了很多困难,所以把学习中积累的部分感觉重要的知识点罗列出来。目前常用的TFT液晶内部驱动芯片是ILI9320,ILI9325系列,内部原理基本一致,我用的是ILI9320。用stm32驱动液晶,实际上就是驱动ILI9320芯片。点亮TFT 的具体步骤有:

(1)stm32与ILI9320芯片管脚的初始化。

void LCD_Init(void); /*初始化LCD,也就是初始化LCD控制器ILI9320芯片与stm32控制器的管脚连接配置*/其中包括CS:TFTLCD片选信号,WR:向TFTLCD写入信号,RD:从TFTLCD读取信号,(15--0):16位双向数据线,RST:硬复位TFTLCD,RS:命令/数据标志(0 读写命令;1 读写数据),TFT模块有个控制器,名为ILI9320,该控制器自带显存,其显存总大小为172820,模块数据线与显存的对应关系位565方式

SGRAM (Synchronous Graphics Random-Access Memory),同步图形随机存储器,是一种专为显卡设计的显存、一种图形读写能力较强的显存,由改良而成。SGRAM读写数据时不是一一读取,而是以“块”(Block)为单位,从而减少了内存整体读写的次数,提高了图形控制器的效率。同S一样,SGRAM也分普通SGRAM与 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时代的控制液晶基本类似。

-电子元器件采购网(www.ruidan.com)是本土元器件目录分销商,采用“小批量、现货、样品”销售模式,致力于满足客户多型号、高质量、快速交付的采购需求。 自建高效智能仓储,拥有自营库存超过50,000种,提供一站式正品现货采购、个性化解决方案、选型替代等多元化服务。
锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台