写下几点注意事项:
1、不要急着写屏,首要读ID,承认驱动IC是否ILI9325。ILI9320、ILI9325、ILI9328等驱动IC的初始化参数会稍有不同。读ID还能够承认数据接口挑选的正确性。如果是16位数据接口,ID读到0x9325;如果是8位数据接口,ID读两次可得0x93,0x25。
2、尽管TFT屏的初始化参数比较多,但参数要求并不很严厉,不会由于一点点的过失而点不亮(当然,不写display on的指令必定不会亮),所以,在点不亮时不要首要置疑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_RD GPIOB
#define TFT_RD GPIO_Pin_2
#defineP_TFT_CS GPIOB
#define TFT_CS GPIO_Pin_10
#defineP_TFT_RSTGPIOB
#define TFT_RST GPIO_Pin_11
#defineP_TFT_BK GPIOB
#define TFT_BKGPIO_Pin_7 // TIM4_CH2 PWM
#define Set_CS GPIO_SetBits(P_TFT_CS,TFT_CS);
#define Clr_CS GPIO_ResetBits(P_TFT_CS,TFT_CS);
#define Set_RSGPIO_SetBits(P_TFT_RS,TFT_RS);
#define Clr_RS GPIO_ResetBits(P_TFT_RS,TFT_RS);
#define Set_WR GPIO_SetBits(P_TFT_WR,TFT_WR);
#define Clr_WR GPIO_ResetBits(P_TFT_WR,TFT_WR);
#define Set_RD GPIO_SetBits(P_TFT_RD,TFT_RD);
#define Clr_RD GPIO_ResetBits(P_TFT_RD,TFT_RD);
#define Set_RST GPIO_SetBits(P_TFT_RST,TFT_RST);
#define Clr_RST GPIO_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);
}
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/260576.html