STM32驱动TFT显示屏ILI9325 ili9325横屏

2.4寸TFT240370PQ显示屏,驱动IC为ILI9325。该屏屏幕电源为2.8~3.3V,背光电源最高3.2V(在3.3V电源下串20Ω电阻或5V下串200Ω电阻),兼容8/16位数据接口(可选)。数据口电平理论上不能超3.3V,由于TFT内部有电压钳位,样品测试时可使用5V单片机。

  写下几点注意事项:

1、不要急着写屏,首先读ID,确认驱动IC是否ILI9325。ILI9320、ILI9325、ILI9328等驱动IC的初始化参数会稍有不同。读ID还可以确认数据接口选择的正确性。如果是16位数据接口,ID读到0x9325;如果是8位数据接口,ID读两次可得0x93,0x25。

2、虽然TFT屏的初始化参数比较多,但参数要求并不很严格,不会因为一点点的差错而点不亮(当然,不写displayon的命令肯定不会亮),所以,在点不亮时不要首先怀疑Init()的参数设置,应该先检查连线的正确性,I/O口的设置。

3、要注意给RST的复位有足够的时间,写命令和写数据的子函数里RS的选择。

4、卖屏的商家通常提供的是STC的例程,若STM32驱不起来,可先用STC把屏点亮,以确认该屏正常,再仔细寻找问题所在。

  以下是例程,该例程使用I/O口驱动,虽然选择16位数据接口,但刷屏速度有点慢,建议使用LCD总线。背光使用PWM调节对比度(该段程序省略):


#defineP_TFT_RS   GPIOB
#define TFT_RS    GPIO_Pin_0
#defineP_TFT_WR  GPIOB
#define TFT_WR    GPIO_Pin_1
#defineP_TFT_RDGPIOB
#defineTFT_RDGPIO_Pin_2
#defineP_TFT_CSGPIOB
#defineTFT_CSGPIO_Pin_10
#defineP_TFT_RSTGPIOB
#defineTFT_RSTGPIO_Pin_11
#defineP_TFT_BKGPIOB
#defineTFT_BKGPIO_Pin_7// TIM4_CH2 PWM


#defineSet_CSGPIO_SetBits(P_TFT_CS,TFT_CS);
#defineClr_CSGPIO_ResetBits(P_TFT_CS,TFT_CS);

#defineSet_RSGPIO_SetBits(P_TFT_RS,TFT_RS);
#defineClr_RSGPIO_ResetBits(P_TFT_RS,TFT_RS);

#defineSet_WRGPIO_SetBits(P_TFT_WR,TFT_WR);
#defineClr_WRGPIO_ResetBits(P_TFT_WR,TFT_WR);

#defineSet_RDGPIO_SetBits(P_TFT_RD,TFT_RD);
#defineClr_RDGPIO_ResetBits(P_TFT_RD,TFT_RD);

#defineSet_RSTGPIO_SetBits(P_TFT_RST,TFT_RST);
#defineClr_RSTGPIO_ResetBits(P_TFT_RST,TFT_RST);

void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;


GPIO_InitStructure.GPIO_Pin =GPIO_Pin_All;
GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_Init(GPIOB,&GPIO_InitStructure);
GPIO_Init(GPIOC,&GPIO_InitStructure);
GPIO_Init(GPIOD,&GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin =GPIO_Pin_7;//for PWM
GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_AF_PP;
GPIO_Init(GPIOB,&GPIO_InitStructure);

}


void DataToIO(u16 val)
{
u16 dat;
dat =GPIO_ReadOutputData(GPIOC);//DBL
dat = (dat&0xFF00) |(val&0xFF);
GPIO_Write(GPIOC, dat);

dat =GPIO_ReadOutputData(GPIOA);//DBH
dat = (dat&0xFF00) |((val>>8)&0xFF);
GPIO_Write(GPIOA, dat);
}


void TFT_Write_com(u16 dat) //发送命令
{
Clr_RS;
Set_RD;
DataToIO(dat);
Clr_WR;
Set_WR;
}


void TFT_Write_dat(u16 dat)//发送数据
{
Set_RS;
Set_RD;
DataToIO(dat);
Clr_WR;
Set_WR;
}


u16 TFT_ReadReg(u16 reg)
{
u16 datL, datH;
GPIO_InitTypeDef GPIO_InitStructure;

Clr_CS;
TFT_Write_com(reg);

GPIO_InitStructure.GPIO_Pin = 0xFF;
GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU ;//上拉输入
GPIO_Init(GPIOC,&GPIO_InitStructure);
GPIO_Init(GPIOA,&GPIO_InitStructure);

GPIOA->ODR = 0xFFFF;
GPIOC->ODR =0xFFFF;

Set_RS;
Set_WR;
Clr_RD;
datH = GPIOA->IDR;
datL =GPIOC->IDR;
Set_RD;
Set_CS;

GPIO_InitStructure.GPIO_Pin =GPIO_Pin_All;
GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP;
GPIO_Init(GPIOC,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = 0xFF;
GPIO_Init(GPIOA,&GPIO_InitStructure);
DataToIO(0xFFFF);

datH =((datH<<8)&0xFF00) |(datL&0x00FF);

return(datH);
}



void TFT_Init(void)
{
u16 DeviceCode;

Set_RST;
Delayms(5);
Clr_RST;
Delayms(5);
Set_RST;

Set_CS;
Set_RD;
Set_WR;
Delayms(5);
DeviceCode =TFT_ReadReg(0x0000);   // 读ID,以确认驱动IC为ILI9325
send_data(DeviceCode>>8);
send_data(DeviceCode&0xFF);

Delayms(50);
Clr_CS;// 打开片选使能
//
TFT_Write_com(0x00E5);TFT_Write_dat(0x78F0);// set SRAM internaltiming 虽然手册上没有介绍这个时钟的设置,但实际上这个并不很重要,即使不加上去,也可以把屏驱起来,只是图像是否会清晰就有待验证了
//TFT_Write_com(0x00E3);TFT_Write_dat(0x3008);// set SRAM internaltiming
//TFT_Write_com(0x00E7);TFT_Write_dat(0x0012);// set SRAM internaltiming
//TFT_Write_com(0x00EF);TFT_Write_dat(0x1231);// set SRAM internaltiming

//TFT_Write_com(0x0000);TFT_Write_dat(0x0001);// startOcillationILI9325不需要这一句
TFT_Write_com(0x0001);TFT_Write_dat(0x0100);// set SS and SM bit (S720-> S1)
TFT_Write_com(0x0002);TFT_Write_dat(0x0700);// set 1 lineinversion
TFT_Write_com(0x0003);TFT_Write_dat(0x1030);// set GRAM write directionand BGR=1.、、65K
TFT_Write_com(0x0004);TFT_Write_dat(0x0000);// Resizeregister
TFT_Write_com(0x0008);TFT_Write_dat(0x0207);// set the back porch andfront porch
TFT_Write_com(0x0009);TFT_Write_dat(0x0000);// set non-display arearefresh cycle ISC[3:0]
TFT_Write_com(0x000A);TFT_Write_dat(0x0000);// FMARK function
TFT_Write_com(0x000C);TFT_Write_dat(0x0000);// RGB interfacesetting
TFT_Write_com(0x000D);TFT_Write_dat(0x0000);// Frame markerPosition
TFT_Write_com(0x000F);TFT_Write_dat(0x0000);// RGB interfacepolarity
//
TFT_Write_com(0x0010);TFT_Write_dat(0x0000);// SAP, BT[3:0], AP, DSTB,SLP, STB
TFT_Write_com(0x0011);TFT_Write_dat(0x0007);// DC1[2:0], DC0[2:0],VC[2:0]
TFT_Write_com(0x0012);TFT_Write_dat(0x0000);// VREG1OUTvoltage
TFT_Write_com(0x0013);TFT_Write_dat(0x0000);// VDV[4:0] for VCOMamplitude
TFT_Write_com(0x0007);TFT_Write_dat(0x0001);
Delayms(50); // Dis-charge capacitor powervoltage
TFT_Write_com(0x0010);TFT_Write_dat(0x1090);// SAP, BT[3:0], AP, DSTB,SLP, STB
TFT_Write_com(0x0011);TFT_Write_dat(0x0227);// DC1[2:0], DC0[2:0],VC[2:0]
Delayms(50);
TFT_Write_com(0x0012);TFT_Write_dat(0x001F);//001C// Internal referencevoltage= Vci;
Delayms(50);
TFT_Write_com(0x0013);TFT_Write_dat(0x1500);//Set VDV[4:0] for VCOMamplitude
TFT_Write_com(0x0029);TFT_Write_dat(0x0027);//Set VCM[5:0] forVCOMH 电压
TFT_Write_com(0x002B);TFT_Write_dat(0x000D);// Set FrameRate 000C 帧频
Delayms(50);
TFT_Write_com(0x0020);TFT_Write_dat(0x0000);// GRAM horizontalAddress
TFT_Write_com(0x0021);TFT_Write_dat(0x0000);// GRAM VerticalAddress
// ----------- Adjust the Gamma Curve----------//
TFT_Write_com(0x0030);TFT_Write_dat(0x0000);
TFT_Write_com(0x0031);TFT_Write_dat(0x0707);
TFT_Write_com(0x0032);TFT_Write_dat(0x0307);
TFT_Write_com(0x0035);TFT_Write_dat(0x0200);
TFT_Write_com(0x0036);TFT_Write_dat(0x0008);
TFT_Write_com(0x0037);TFT_Write_dat(0x0004);
TFT_Write_com(0x0038);TFT_Write_dat(0x0000);
TFT_Write_com(0x0039);TFT_Write_dat(0x0707);
TFT_Write_com(0x003C);TFT_Write_dat(0x0002);
TFT_Write_com(0x003D);TFT_Write_dat(0x1D04);

//------------------ Set GRAM area---------------//
TFT_Write_com(0x0050);TFT_Write_dat(0x0000);// Horizontal GRAM StartAddress
TFT_Write_com(0x0051);TFT_Write_dat(0x00EF);// Horizontal GRAM EndAddress
TFT_Write_com(0x0052);TFT_Write_dat(0x0000);// Vertical GRAM StartAddress
TFT_Write_com(0x0053);TFT_Write_dat(0x013F);// Vertical GRAM StartAddress

TFT_Write_com(0x0060);TFT_Write_dat(0xA700);// Gate Scan Line
TFT_Write_com(0x0061);TFT_Write_dat(0x0001);// NDL,VLE, REV
TFT_Write_com(0x006A);TFT_Write_dat(0x0000);// set scrollingline
//-------------- Partial Display Control---------//
TFT_Write_com(0x0080);TFT_Write_dat(0x0000);
TFT_Write_com(0x0081);TFT_Write_dat(0x0000);
TFT_Write_com(0x0082);TFT_Write_dat(0x0000);
TFT_Write_com(0x0083);TFT_Write_dat(0x0000);
TFT_Write_com(0x0084);TFT_Write_dat(0x0000);
TFT_Write_com(0x0085);TFT_Write_dat(0x0000);
//-------------- Panel Control-------------------//
TFT_Write_com(0x0090);TFT_Write_dat(0x0010);
TFT_Write_com(0x0092);TFT_Write_dat(0x0600);

TFT_Write_com(0x0007);TFT_Write_dat(0x0133);// 262K color and displayON 开显示

Set_CS;//关闭片选使能
}


void TFT_SetAddr(u16 x1, u16 y1, u16 x2, u16 y2)
{
TFT_Write_com(0x0020);TFT_Write_dat(x1);//设置X坐标位置
TFT_Write_com(0x0021);TFT_Write_dat(y1);//设置Y坐标位置

TFT_Write_com(0x0050);TFT_Write_dat(x1);//开始X
TFT_Write_com(0x0051);TFT_Write_dat(x2);//结束X
TFT_Write_com(0x0052);TFT_Write_dat(y1);//开始Y
TFT_Write_com(0x0053);TFT_Write_dat(y2);//结束Y

TFT_Write_com(0x0022);
}


void TFT_Pant(u16 Color)
{
u32 i, j;

Clr_CS;
TFT_SetAddr(0,0,240,320);

for(i=0;i<320; i++)
{
for (j=0; j<240; j++)
TFT_Write_dat(Color);
}

Set_CS;
}

  

爱华网本文地址 » http://www.aihuau.com/a/25101013/146176.html

更多阅读

电脑桌面一刷新就闪屏的解决办法 win7桌面闪屏怎么解决

  闪屏一般指电脑显示器上的显示问题,电脑在运行过程中,屏幕画面出现闪烁或不规则闪动,有时会出现横条线和竖条线。闪屏和雪花屏主要是显卡的问题造成的,雪花屏类似电视的雪花屏,闪屏就像显卡驱动有问题那样,画面完整,但眼睛看着极为不舒

SBSettings设置使用教程(系统增强) ubuntu系统使用教程

越狱玩家应该都比较了解SBSettings这个iOS系统增强工具,它前身是BigBoss出品的BossPrefs,主要功能有:清理系统内存,快速注销,重启,关机以及进入安全模式等,隐藏桌面图标(比如不常用的系统自带软件),自定义飞行模式、蓝牙、Wi-fi、EDGE、自动横

DELLoptiplex330机器安装系统记 optiplex 330

1、机器为最新INTEL芯片组主板,无光驱,无并口接口。全部为串口接口。2、购买SONY串口光驱,系统无法发现,咨询DELL服务,要按ALT+F才能发现硬盘。3、找到光驱后,加载完XP初始化驱动后,出现0X0000007B蓝屏死机。4、上DELL论坛后发现。SATA硬盘

电脑花屏是什么原因 液晶显示屏花屏维修

花屏含义指电脑屏幕上有与常色不同的条纹,斑点或色块,或有位置颠倒、错乱,屏幕抖动、扭曲等情况。显示器花屏是极其常见的故障,产生的原因有多种,不同的原因所产生的故障现象也有所不同,解决方法也各异。在文本方式下的花屏表现为字符混

IPS屏幕和TFT屏哪个好?IPS和TFT的区别 手机屏幕材质ips和tft

IPS屏幕和TFT屏哪个好?IPS和TFT的区别Posted by 国产平板电脑推荐 Posted on 八 - 7 - 2012在消费者选购平板电脑的过程中,作为新手,往往会忽略平板电脑一个很重要的参数,那就是屏幕材质,一般的朋友看到网上的宣传,不管是IPS屏,还是TFT屏,当

声明:《STM32驱动TFT显示屏ILI9325 ili9325横屏》为网友霸王之怒分享!如侵犯到您的合法权益请联系我们删除