STM32单片机ILI9325系列TFT的驱动原理解析.docx
《STM32单片机ILI9325系列TFT的驱动原理解析.docx》由会员分享,可在线阅读,更多相关《STM32单片机ILI9325系列TFT的驱动原理解析.docx(23页珍藏版)》请在冰豆网上搜索。
![STM32单片机ILI9325系列TFT的驱动原理解析.docx](https://file1.bdocx.com/fileroot1/2022-12/7/b925d19b-f0f2-4139-88b1-c10f05fa6936/b925d19b-f0f2-4139-88b1-c10f05fa69361.gif)
STM32单片机ILI9325系列TFT的驱动原理解析
STM32单片机ILI9325系列TFT的驱动原理解析
为了更好,更深入学习了解ILI9325系列TFT的驱动原理,自己做了一块TFT板子。
为了方便测试,在上面集成了STM32芯片,到时候做实验的时候就焊接STM32测试,如果只是使用,就直接焊接TFT就行了。
板子还在做,先上原理图与PCB。
-------------------------等板子回来,再测试,总结继续-------------
--------板子回来了,焊接好了,简单测试了一下!
-----------
---------第二部分---------------ili9320.h------------------代码简单分析------
#ifndef_ILI9320_H_
#define_ILI9320_H_
#include“stm32f10x.h”
#defineDB0_7_RCCRCC_APB2Periph_GPIOB
#defineDB_8_15_RCCRCC_APB2Periph_GPIOC
//-------------------------------------------
#definenCsPin_RCCRCC_APB2Periph_GPIOC
#definenCsPin_PortGPIOC
#definenCsPinGPIO_Pin_11
#defineRsPin_RCCRCC_APB2Periph_GPIOC
#defineRsPin_PortGPIOC
#defineRsPinGPIO_Pin_8
#definenWrPin_RCCRCC_APB2Periph_GPIOC
#definenWrPin_PortGPIOC
#definenWrPinGPIO_Pin_9
#definenRdPin_RCCRCC_APB2Periph_GPIOC
#definenRdPin_PortGPIOC
#definenRdPinGPIO_Pin_10
#definenRstPin_RCCRCC_APB2Periph_GPIOC
#definenRstPin_PortGPIOC
#definenRstPinGPIO_Pin_12
#defineLightPin_RCCRCC_APB2Periph_GPIOB
#defineLightPin_PortGPIOB
#defineLightPinGPIO_Pin_0
//-----------------------------------------
#defineSet_nWrnCsPin_Port-》BSRR=nWrPin//GPIO_SetBits(nWrPin_Port,nWrPin)
#defineClr_nWrnCsPin_Port-》BRR=nWrPin//GPIO_ResetBits(nWrPin_Port,nWrPin)
#defineSet_CsnCsPin_Port-》BSRR=nCsPin//GPIO_SetBits(nCsPin_Port,nCsPin)
#defineClr_CsnCsPin_Port-》BRR=nCsPin//GPIO_ResetBits(nCsPin_Port,nCsPin)
#defineSet_RsRsPin_Port-》BSRR=RsPin//GPIO_SetBits(RsPin_Port,RsPin)
#defineClr_RsRsPin_Port-》BRR=RsPin//GPIO_ResetBits(RsPin_Port,RsPin)
#defineSet_nRdnRdPin_Port-》BSRR=nRdPin//GPIO_SetBits(nRdPin_Port,nRdPin)
#defineClr_nRdnRdPin_Port-》BRR=nRdPin//GPIO_ResetBits(nRdPin_Port,nRdPin)
#defineSet_RstnRstPin_Port-》BSRR=nRstPin//GPIO_SetBits(nRstPin_Port,nRstPin)
#defineClr_RstnRstPin_Port-》BRR=nRstPin//GPIO_ResetBits(nRstPin_Port,nRstPin)
#defineSet_LightLightPin_Port-》BSRR=LightPin//GPIO_SetBits(LightPin_Port,LightPin)
#defineClr_LightLightPin_Port-》BRR=LightPin//GPIO_ResetBits(LightPin_Port,LightPin)
//---------------------------------
#defineWhite0xFFFF
#defineBlack0x0000
#defineGrey0xF7DE
#defineBlue0x001F
#defineBlue20x051F
#defineRed0xF800
#defineMagenta0xF81F
#defineGreen0x07E0
#defineCyan0x7FFF
#defineYellow0xFFE0
voidLcd_Configuration(void);//初始化GPIO
voidLCD_ili9320_IniTIalizTIon(void);//初始化ILI9320---uCGUI需要使用--1
voidLCD_ili9320_Reset(void);
voidLCD_ili9320_BackLight(u8status);//背光
voidLCD_ili9320_SetCursor(u16x,u16y);//设置坐标---uCGUI需要使用--2
voidLCD_ili9320_SetWindows(u16StartX,u16StartY,u16EndX,u16EndY);//设置窗体
voidLCD_ili9320_DrawPicture(u16StartX,u16StartY,u16EndX,u16EndY,u16*pic);//画图片
voidLCD_ili9320_SetPoint(u16x,u16y,u16point);//画点---uCGUI需要使用--3
u16LCD_ili9320_GetPoint(u16x,u16y);//读取点颜色---uCGUI需要使用--4
voidLCD_ili9320_PutChar(u16x,u16y,u8c,u16charColor,u16bkColor);//显示字符--需要字体头文件
voidLCD_ili9320_Clear(u16dat);//清屏
voidLCD_ili9320_Delay(u32nCount);
voidLCD_ili9320_Test(void);
voidLCD_ili9320_WriteData(u16dat);//写数据
voidLCD_ili9320_WriteIndex(u16idx);//写地址
u16LCD_ili9320_ReadData(void);//读数据
u16LCD_ili9320_ReadRegister(u16index);//读寄存器
voidLCD_ili9320_WriteRegister(u16index,u16dat);//写寄存器
u16LCD_ili9320_BGR2RGB(u16c);//转换颜色格式
u16LCD_ili9320_Color565(u32RGB);//RGB颜色转为16位(565)
voidLCD_ili9320_DrawHLine(uint16_tusX1,uint16_tusY1,uint16_tusX2,uint16_tusColor);//水平线---uCGUI需要使用--5
voidLCD_ili9320_DrawVLine(uint16_tusX1,uint16_tusY1,uint16_tusY2,uint16_tusColor);//垂直线---uCGUI需要使用--6
voidLCD_ili9320_FillRect(u16x0,u16y0,u16x1,u16y1,u16color);//填充矩形---uCGUI需要使用--7
voidLCD_ili9320_Line(u16x0,u16y0,u16x1,u16y1,u16color);//画任意直线线
voidLCD_ili9320_Circle(u16cx,u16cy,u16r,u16color,u8fill);//画园
voidLCD_ili9320_Rectangle(u16x0,u16y0,u16x1,u16y1,u16color,u8fill);//画矩形--填充或者不填充
voidLCD_ili9320_Square(u16x0,u16y0,u16with,u16color,u8fill);//画正方形--填充或者不填充
voidLCD_ili9320_Text(u16x,u16y,u8*str,u16len,u16Color,u16bkColor);//简单测试--显示渐变色条
#endif
---------第三部分----------------ili9320.c------代码分析------
#include“ili9320.h”
#include“ili9320_font.h”
voidLcd_ConfiguraTIon(void)
{
GPIO_InitTypeDefGPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB“RCC_APB2Periph_GPIOC,ENABLE);//初始化数据引脚---DB0~~DB7是PB8~~PB15DB8~~DB15是PC0~~PC7----------//
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_Init(GPIOB,
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_Init(GPIOC,
RCC_APB2PeriphClockCmd(nCsPin_RCC,ENABLE);//控制脚CS------PC11----//
GPIO_InitStructure.GPIO_Pin=nCsPin;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_Init(nCsPin_Port,
RCC_APB2PeriphClockCmd(RsPin_RCC,ENABLE);//控制脚RS-------PC8---//
GPIO_InitStructure.GPIO_Pin=RsPin;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_Init(RsPin_Port,
RCC_APB2PeriphClockCmd(nWrPin_RCC,ENABLE);//控制脚WR----PC9--//
GPIO_InitStructure.GPIO_Pin=nWrPin;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_Init(nWrPin_Port,
RCC_APB2PeriphClockCmd(nRdPin_RCC,ENABLE);//控制脚RD---PC10--//
GPIO_InitStructure.GPIO_Pin=nRdPin;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_Init(nRdPin_Port,
RCC_APB2PeriphClockCmd(nRstPin_RCC,ENABLE);//控制脚RST---PC12--//
GPIO_InitStructure.GPIO_Pin=nRstPin;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_Init(nRstPin_Port,
RCC_APB2PeriphClockCmd(LightPin_RCC,ENABLE);//控制脚背光--PB00---//
GPIO_InitStructure.GPIO_Pin=LightPin;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_Init(LightPin_Port,
}
voiddelayms(intcount)//X1ms
{
inti,j;
for(i=0;ifor(j=0;j《1000;j++);
}
voidLCD_ili9320_IniTIaliztion(void)//--功能:
初始化ILI9320控制器
{
volatileu16i,j,k;
u32DeviceCode=0;
Lcd_Configuration();
LCD_ili9320_BackLight(0);//关背光
delayms(200);
Clr_Rst;
delayms(200);
LCD_ili9320_WriteData(0xffff);
Set_Rst;Set_nWr;Set_Cs;Set_Rs;Set_nRd;Set_Rst;
delayms(200);
LCD_ili9320_WriteRegister(0x0000,0x0001);//StartOCS
delayms(200);
DeviceCode=LCD_ili9320_ReadRegister(0x0000);//读控制器型号ILI9320
if(DeviceCode==0x9320||0x9300)
{
LCD_ili9320_WriteRegister(0x00,0x0000);
LCD_ili9320_WriteRegister(0x01,0x0100);//驱动器输出控制
LCD_ili9320_WriteRegister(0x02,0x0700);//LCD驱动波形控制-反转
LCD_ili9320_WriteRegister(0x03,0x1030);//进入模式--F-
LCD_ili9320_WriteRegister(0x04,0x0000);//重新调整控制寄存器大小---缩放
LCD_ili9320_WriteRegister(0x08,0x0202);//DisplayContral2.(0x0207)
LCD_ili9320_WriteRegister(0x09,0x0000);//DisplayContral3.(0x0000)
LCD_ili9320_WriteRegister(0x0a,0x0000);//Frame信号输出间隔
LCD_ili9320_WriteRegister(0x0c,(1《《0));//RGB显示接口控制1--16位
LCD_ili9320_WriteRegister(0x0d,0x0000);//帧标记的位置
LCD_ili9320_WriteRegister(0x0f,0x0000);//RGB显示接口控制1
delayms(5);
LCD_ili9320_WriteRegister(0x07,0x0101);//DisplayContral.
delayms(5);
LCD_ili9320_WriteRegister(0x10,(1《《12)|(0《《8)|(1《《7)|(1《《6)|(0《《4));//PowerControl1.(0x16b0)
LCD_ili9320_WriteRegister(0x11,0x0007);//PowerControl2.(0x0001)
LCD_ili9320_WriteRegister(0x12,(1《《8)|(1《《4)|(0《《0));//PowerControl3.(0x0138)
LCD_ili9320_WriteRegister(0x13,0x0b00);//PowerControl4.
LCD_ili9320_WriteRegister(0x29,0x0000);//PowerControl7.
LCD_ili9320_WriteRegister(0x2b,(1《《14)|(1《《4));//帧速率和色彩控制---70
LCD_ili9320_WriteRegister(0x50,0);//SetXStar240*320
LCD_ili9320_WriteRegister(0x51,239);//水平GRAM终止位置SetXEnd.
LCD_ili9320_WriteRegister(0x52,0);//SetYStar
LCD_ili9320_WriteRegister(0x53,319);//SetYEnd.t.
LCD_ili9320_WriteRegister(0x60,0x2700);//门扫描控制器
LCD_ili9320_WriteRegister(0x61,0x0001);//DriverOutputControl.
LCD_ili9320_WriteRegister(0x6a,0x0000);//VerticalSrcollControl.
LCD_ili9320_WriteRegister(0x80,0x0000);//局部影像控制器1
LCD_ili9320_WriteRegister(0x81,0x0000);//局部影像控制器1--起始地址
LCD_ili9320_WriteRegister(0x82,0x0000);//局部影像控制器1--终止地址
LCD_ili9320_WriteRegister(0x83,0x0000);//DisplsyPosition?
PartialDisplay2.
LCD_ili9320_WriteRegister(0x84,0x0000);//RAMAddressStart?
PartialDisplay2.
LCD_ili9320_WriteRegister(0x85,0x0000);//RAMAddressEnd?
PartialDisplay2.
LCD_ili9320_WriteRegister(0x90,(0《《7)|(16《《0));//平板接口控制器1(0x0013)
LCD_ili9320_WriteRegister(0x92,0x0000);//PanelInterfaceContral2.(0x0000)
LCD_ili9320_WriteRegister(0x93,0x0001);//PanelInterfaceContral3.
LCD_ili9320_WriteRegister(0x95,0x0110);//FrameCycleContral.(0x0110)
LCD_ili9320_WriteRegister(0x97,(0《《8));//
LCD_ili9320_WriteRegister(0x98,0x0000);//FrameCycleContral.
LCD_ili9320_WriteRegister(0x07,0x0173);//(0x0173)
}
elseif(DeviceCode==0x9325||DeviceCode==0x9328)//ILI9325
{
LCD_ili9320_WriteRegister(0x00e7,0x0010);
LCD_ili9320_WriteRegister(0x0000,0x0001);//开启内部时钟
LCD_ili9320_WriteRegister(0x0001,0x0100);
LCD_ili9320_WriteRegister(0x0002,0x0700);//电源开启
LCD_ili9320_WriteRegister(0x0003,(1《《12)|(3《《4)|(0《《3));//65K
LCD_ili9320_WriteRegister(0x0004,0x0000);
LCD_ili9320_WriteRegister(0x0008,0x0207);
LCD_ili9320_WriteRegister(0x0009,0x0000);
LCD_ili9320_WriteRegister(0x000a,0x0000);//displaysetting
LCD_ili9320_WriteRegister(0x000c,0x0001);//displaysetting
LCD_ili9320_WriteRegister(0x000d,