我最近在做一个项目,用到了ILI9325驱动的2.4寸TFT,但是始终白屏。单步执行初始化程序结束时,没有出现花屏现象,是不是说明初始化程序有问题啊?我把初始化程序贴下来,麻烦各位帮我看看,是不是哪里出问题了。。。 #include "stm32f10x.h" #include "LCD.h" #include "delay.h" #include "datatype.h"
#define WIDTH 240 #define HEIGHT 320 //============================================================== //液晶所用端口初始化 // void GPIO_initial(void) { RCC->APB2ENR |= 0x0000003D;//使能GPIOA,GPIOB,GPIOC,GPIOD,AFIO DATAHOUT; //数据端口,设置PB高八位,PC低八位为50M通用推挽输出模式 DATALOUT; GPIOC->CRH &= 0xFFF00000; //控制端口,PC.08.09.10.11.12设置为50M通用推挽输出模式 GPIOC->CRH |= 0x00033333; GPIOC->BSRR = 0x00001F00; //cs,rs,wr,rd = 1; } //============================================================== //写到TFT // void Wr_GPIO(ushort c) { ushort temp; uchar temph,templ; //写入高八位,并保持PC口高八位不变 temp=GPIO_ReadOutputData(GPIOC); temph=temp>>8; DATAHOUT; GPIO_Write(GPIOC, (c>>8)|(temph<<8)); Clr_nWr; delay_us(100); Set_nWr; //写入低八位,并保持PB口低八位不变 temp=GPIO_ReadOutputData(GPIOB); templ=temp; DATALOUT; GPIO_Write(GPIOB, (c<<8)|templ); Clr_nWr; delay_us(100); Set_nWr; } //============================================================= //写命令 //功能:写一个命令到TFT控制器。 //入口参数: cmd为指定要执行的命令。 //出口参数: 无 __inline void Wr_cmd(ushort cmd) { Clr_Cs; Clr_Rs; Wr_GPIO(cmd); Set_Cs; } //=================================================================== //写数据 //功能:写一个数据到TFT控制器。 //入口参数: data为指定要写入的数据。 //出口参数: 无 __inline void Wr_data(ushort data) { Clr_Cs; Set_Rs; Wr_GPIO(data); Set_Cs; } //=============================================================== //写命令数据 //功能: 写命令数据到TFT控制器。 //入口参数: cmd为要写入的命令字节;dat为要写入的16位数据。 //出口参数: 无 void Wr_cmd_data(ushort cmd,ushort data) { Wr_cmd(cmd); delay_us(10); Wr_data(data); } //============================================================= //TFT初始化 //功能:该函数用于初始化TFT彩屏模块。 //入口参数: 无 //出口参数: 无 void ILI9325_initial(void) { volatile unsigned short data; GPIO_initial(); Clr_Cs; Set_nRst; delay_ms(10); Clr_nRst; delay_ms(1); Set_nRst; delay_ms(50);
Wr_cmd_data(0x00E3,0x3008); // Set u16ernal timing Wr_cmd_data(0x00E7,0x0012); // Set u16ernal timing Wr_cmd_data(0x00EF,0x1231); // Set u16ernal timing // Wr_cmd_data(0x00E5,0x8000); Wr_cmd_data(0x0000,0x0100); delay_ms(10); Wr_cmd_data(0x0001,0x0000); //源扫描设置SS=0, 输出的移动方向是从S1到S720 //(源扫描设置SS=1, 输出的移动方向是从S720到S1) //SM=0,逐行扫描(SM=1,隔行扫描) Wr_cmd_data(0x0002,0x0700); //B/C=1、EOR=1:行倒置(B/C=0:帧/场倒置) Wr_cmd_data(0x0003,0x1038); //AM=0,地址在水平方向自动加1 //I/D[1:0] = 11:水平垂直方向均增加 //BGR=1:采用BGR格式 //TRI=0、DFM=*:8位机、两次数据传送 Wr_cmd_data(0x0004,0x0000); //比例缩放设置:不缩放 //显示控制 Wr_cmd_data(0x0008,0x0207); //设置后边沿和前沿 Wr_cmd_data(0x0009,0x0000);//设置非显示区时间间隔ISC[3:0] Wr_cmd_data(0x000A,0x0000); //帧标记功能 Wr_cmd_data(0x000C,0x0000);//RGB显示接口控制1 Wr_cmd_data(0x000D,0x0000);//帧标记位置 Wr_cmd_data(0x000F,0x0000);//RGB显示接口控制2 //电源配置 Wr_cmd_data(0x0010,0x0000); Wr_cmd_data(0x0011,0x0007); Wr_cmd_data(0x0012,0x0000); Wr_cmd_data(0x0013,0x0000); delay_ms(50); //vgh Wr_cmd_data(0x0010,0x17B0); Wr_cmd_data(0x0011,0x0004); delay_ms(10); //vregiout Wr_cmd_data(0x0012,0x0118); //0x001b delay_ms(10); //vom amplitude Wr_cmd_data(0x0013,0x0900);
//vom H Wr_cmd_data(0x0029,0x0014); delay_ms(10); Wr_cmd_data(0x002B,0x0020); Wr_cmd_data(0x0020,0x0000); Wr_cmd_data(0x0021,0x0000); //伽马校正 Wr_cmd_data(0x0030,0x0000); Wr_cmd_data(0x0031,0x0102); Wr_cmd_data(0x0032,0x0707);//0006 Wr_cmd_data(0x0035,0x0107); Wr_cmd_data(0x0036,0x0400); Wr_cmd_data(0x0037,0x0606); Wr_cmd_data(0x0038,0x0105);//0200 Wr_cmd_data(0x0039,0x0707); Wr_cmd_data(0x003C,0x0700);//0504 Wr_cmd_data(0x003D,0x0E07); //窗口设置 Wr_cmd_data(0x0050,0x0000);//水平起始位置 Wr_cmd_data(0x0051,0x00EF);//水平终止位置 Wr_cmd_data(0x0052,0x0000);//垂直起始位置 Wr_cmd_data(0x0053,0x013F);//垂直终止位置 Wr_cmd_data(0x0060,0x2700);//门扫描设置,GS=1:从G320扫描到G1,320线 Wr_cmd_data(0x0061,0x0001); Wr_cmd_data(0x006A,0x0000); // Wr_cmd_data(0x0080,0x0000); Wr_cmd_data(0x0081,0x0000); Wr_cmd_data(0x0082,0x0000); Wr_cmd_data(0x0083,0x0000); Wr_cmd_data(0x0084,0x0000); Wr_cmd_data(0x0085,0x0000); // Wr_cmd_data(0x0090,0x0010); Wr_cmd_data(0x0092,0x0000); Wr_cmd_data(0x0093,0x0003); Wr_cmd_data(0x0095,0x0110); Wr_cmd_data(0x0097,0x0000); Wr_cmd_data(0x0098,0x0000); Wr_cmd_data(0x0007,0x0173); // Wr_cmd_data(0x0007,0x0000); // Wr_cmd_data(0x0011,0x0000); // Wr_cmd_data(0x0012,0x0000); // Wr_cmd_data(0x0013,0x0000); // delay_ms(50); // Wr_cmd_data(0x0010,0x0002); // delay_ms(10); Wr_cmd(0x0022); delay_ms(100); }
//=============================================================== //设置窗口 //入口参数: startx,starty,为显示窗口左上角坐标;endx,endy为显示窗口右下角坐标。 //出口参数: 无 //说明:该函数设置TFT模块的显示窗口。 void LCD_Setwindow(ushort startx,ushort starty ,ushort endx,ushort endy) { Wr_cmd_data(WINDOW_XADDR_START,startx);//水平起始位置 Wr_cmd_data(WINDOW_XADDR_END,endx);//水平终止位置 Wr_cmd_data(WINDOW_YADDR_START,starty);//垂直起始位置 Wr_cmd_data(WINDOW_YADDR_END,endy);//垂直终止位置 Wr_cmd_data(GRAM_XADDR,startx);//设置X坐标位置 Wr_cmd_data(GRAM_YADDR,starty);//设置Y坐标位置 Wr_cmd(0x0022);//LCD_WriteCMD(GRAMWR); } //=============================================================== //设定当前显示坐标 //入口参数: x,y为当前显示坐标。 //出口参数: 无 //说明:本函数实际上是LCD_setwindow函数的一个特例,显示窗口为最小,仅是一个像素点。 void LCD_Setposition(unsigned char x,unsigned int y) { LCD_Setwindow(x,y,x,y); } //=============================================================== //单色自测程序 //入口参数: 无。 //出口参数: 无 //说明:在TFT屏上显示单色屏幕。 void LCD_Test(void) { uint i,j; // Clr_Cs; LCD_Setwindow(0,0,239,319);
for(i=0;i<320;i++) { for (j=0;j<240;j++) { Wr_data(Black); }
} }
|