OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9106|回复: 5

ILI9341液晶屏只有在上电复位的时候读取的ID是对的,而手动复位读取的ID是D341

[复制链接]

20

主题

89

帖子

2

精华

高级会员

Rank: 4

积分
576
金钱
576
注册时间
2014-8-3
在线时间
18 小时
发表于 2015-1-10 11:11:39 | 显示全部楼层 |阅读模式
5金钱
代码用的战舰的液晶代码,只不过IO用的普通IO口,所以输入输出代码修改了下:

#define LCD_CS_SET  GPIOD->BSRR=1<<2    //片选端口       PC9
#define LCD_RS_SET GPIOA->BSRR=1<<12    //数据/命令          C8   
#define LCD_WR_SET GPIOA->BSRR=1<<11    //写数据 PC7
#define LCD_RD_SET GPIOA->BSRR=1<<8    //读数据 PC6
   
#define LCD_CS_CLR  GPIOD->BRR=1<<2     //片选端口       PC9
#define LCD_RS_CLR GPIOA->BRR=1<<12     //数据/命令          C8   
#define LCD_WR_CLR GPIOA->BRR=1<<11     //写数据 PC7
#define LCD_RD_CLR GPIOA->BRR=1<<8     //读数据 PC6

#define DATAIN   ((GPIOB->IDR&0x00E0)<<8)|(GPIOC->IDR&0x1FFF)   //数据输入


void DATAOUT(u16 data)
{
   GPIOC->BRR=0X1FFF;
   GPIOC->BSRR=(data&0X1FFF);
   GPIOB->BRR=0X00E0;
   GPIOB->BSRR=((data&0XE000)>>8);
}

void LCD_WR_DATA(u16 data)
{
   LCD_RS_SET;
   LCD_CS_CLR;
   DATAOUT(data);
   LCD_WR_CLR;
   LCD_WR_SET;
   LCD_CS_SET;
}
void LCD_WR_REG(u16 reg)

LCD_RS_CLR;//写地址  
  LCD_CS_CLR; 
DATAOUT(reg); 
LCD_WR_CLR; 
LCD_WR_SET; 
  LCD_CS_SET;    
}

u16 LCD_RD_DATA(void)
{
   u16 t;
   GPIOC->CRL=0X88888888; //PC0-7  上拉输入
GPIOC->CRH&=0XFFF00000; //PC8-12 上拉输入
   GPIOC->CRH|=0x00088888;
   GPIOB->CRL&=0X000FFFFF;
   GPIOB->CRL|=0X88800000;
GPIOC->BSRR=0X1FFF;    //全部输出高
   GPIOB->BSRR=0X00E0;
   
   LCD_RS_SET;
LCD_CS_CLR;
   LCD_WR_SET;
LCD_RD_CLR;  
LCD_RD_SET;
t=DATAIN;  
LCD_CS_SET;
   
   GPIOC->CRL=0X11111111; //PB0-7  上拉输出
GPIOC->CRH&=0XFFF00000; //PB8-15 上拉输出
   GPIOC->CRH|=0X00011111;
   GPIOB->CRL&=0X000FFFFF;
   GPIOB->CRL|=0X11100000;
GPIOC->BSRR=0X1FFF;    //全部输出高
   GPIOB->BSRR=0X00E0;
return t;  
}

最佳答案

查看完整内容[请看2#楼]

代码的bug LCD_RD_DATA改为: //读LCD数据 //返回值:读到的值 u16 LCD_RD_DATA(void) {     u16 t;   GPIOB->CRL=0X88888888; //PB0-7  上拉输入 GPIOB->CRH=0X88888888; //PB8-15 上拉输入 GPIOB->ODR=0X0000;     //全部输出0 LCD_RS_SET; LCD_CS_CLR; //读取数据(读寄存器时,并不需要读2次) LCD_RD_CLR; if(lcddev.i ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-1-10 11:11:40 | 显示全部楼层
代码的bug
LCD_RD_DATA改为:
//读LCD数据
//返回值:读到的值
u16 LCD_RD_DATA(void)
{    
u16 t;
  GPIOB->CRL=0X88888888; //PB0-7  上拉输入
GPIOB->CRH=0X88888888; //PB8-15 上拉输入
GPIOB->ODR=0X0000;     //全部输出0

LCD_RS_SET;
LCD_CS_CLR;
//读取数据(读寄存器时,并不需要读2次)
LCD_RD_CLR;
if(lcddev.id==0X8989)delay_us(2);//FOR 8989,延时2us    
t=DATAIN;  
LCD_RD_SET;
LCD_CS_SET; 

GPIOB->CRL=0X33333333; //PB0-7  上拉输出
GPIOB->CRH=0X33333333; //PB8-15 上拉输出
GPIOB->ODR=0XFFFF;    //全部输出高
return t;  
}
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

20

主题

89

帖子

2

精华

高级会员

Rank: 4

积分
576
金钱
576
注册时间
2014-8-3
在线时间
18 小时
 楼主| 发表于 2015-1-11 01:46:17 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
就是设置上拉输入后要设置全部输出0而不是1??
试了试,确实是的!!太感谢原子哥了!!!想了一整天,现在终于弄好了~~
回复

使用道具 举报

2

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2015-12-23
在线时间
47 小时
发表于 2016-2-1 16:28:12 | 显示全部楼层
哥们,你好,你能说下你的问题具体怎么解决的吗?我9341LCD,在读取ID时为0c14或者0404,参照正点原子mini板TFTLCD显示实验代码修改的,寄存器版本,板子设计的时候,没有设计复位按键,读LCD数据函数:u16 LCD_RD_DATA(void)
回复

使用道具 举报

2

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2015-12-23
在线时间
47 小时
发表于 2016-2-1 16:28:36 | 显示全部楼层
u16 LCD_RD_DATA(void)
{                                                                                  
        u16 t;
        GPIOB->CRL=0X88888888; //PB0-7  上拉输入
        GPIOB->CRH=0X88888888; //PB8-15 上拉输入
        GPIOB->ODR=0X0000;     //全部输出0

        LCD_RS_SET;
        LCD_CS_CLR;
        //读取数据(读寄存器时,并不需要读2次)
        LCD_RD_CLR;
        if(lcddev.id==0X8989)delay_us(2);//FOR 8989,延时2us                                          
        t=DATAIN;  
        LCD_RD_SET;
        LCD_CS_SET;

        GPIOB->CRL=0X33333333; //PB0-7  上拉输出
        GPIOB->CRH=0X33333333; //PB8-15 上拉输出
        GPIOB->ODR=0XFFFF;    //全部输出高
        return t;  
}
哭着过不如笑着活!
回复

使用道具 举报

9

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2016-1-28
在线时间
37 小时
发表于 2016-3-15 23:42:15 | 显示全部楼层
我有块9325的液晶,用原子哥的程序读ID死活不正确,后面自己重新写读ID程序也读的错的,偶然发现这样读能读出来
        GPIO_ResetBits(GPIOE, GPIO_Pin_1);
        delay_ms(50);
        GPIO_SetBits(GPIOE, GPIO_Pin_1 );
        delay_ms(80);
        LCD_WriteReg(0x0000,0x0001);
        delay_ms(50);
        lcddev.id= LCD_ReadReg(0x0000);
        delay_ms(50);
PE1是液晶的软复位,后面就直接把软复位那4句加到原子哥的程序里读ID的前面就正常了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-13 03:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表