原子,我在使用你们Mini板上的ILI9341驱动时,调试跟踪发现LCD_RD_DATA函数有些问题。根据9341的datasheet手册,应该LCD_RD_CLR后就读取数据总线上的数据,但是在原函数中设置了LCD_RD_SET,再读取数据,导致读取芯片ID错误。将t=DATAIN上移到LCD_RD_SET前即可。请确认一下。
//读LCD数据//返回值:读到的值
u16 LCD_RD_DATA(void)
{
u16 t;
GPIOB->CRL=0X88888888; //PB0-7 上拉输入
GPIOB->CRH=0X88888888; //PB8-15 上拉输入
GPIOB->ODR=0X0000; //全部输出0
#if LCD_FAST_IO==1 //快速IO
LCD_RS_SET;
LCD_CS_CLR;
//读取数据(读寄存器时,并不需要读2次)
LCD_RD_CLR;
if(DeviceCode==0X8989)delay_us(2);//FOR 8989,延时2us
t=DATAIN; //<-----修改的这里
LCD_RD_SET;
LCD_CS_SET;
#else
LCD_RS=1;
LCD_CS=0;
//读取数据(读寄存器时,并不需要读2次)
LCD_RD=0;
t=DATAIN; //<-----修改的这里
LCD_RD=1;
LCD_CS=1;
#endif
GPIOB->CRL=0X33333333; //PB0-7 上拉输出
GPIOB->CRH=0X33333333; //PB8-15 上拉输出
GPIOB->ODR=0XFFFF; //全部输出高
return t;
}
读取颜色函数的应该也做相同的更改。
初始化里的也可以改成
DeviceCode=LCD_RD_DATA();//去掉了&0XBF;//这里读回0XD3,实际是0X93才对.强制去掉第6位
|