www.openedv.com
您好,欢迎您!    会员注册 | 登入 
公告:欢迎访问www.openedv.com开源电子网,开源共享共同进步,祝您新年快乐,万事如意!
设为首页 | 加入收藏
论坛首页 » ARM技术 前往: 
STM32读TFTLCD屏问题
发表人 内容
[Down] [Up]
[楼主位] 林少


等级:NO
注册时间:
2012/02/15 10:13
文章: 15
离线

以下程序是按照原子的源程序改的,我的屏是SSD1289控制器,有以下一些问题,希望各位同僚给与帮助!
void LCD_Init(void)

  RCC->APB2ENR|=1<<3;//先使能外设PORTB时钟
  RCC->APB2ENR|=1<<4;//先使能外设PORTC时钟
RCC->APB2ENR|=1<<6;//先使能外设PORTE时钟
 
//PORTC4 5通用推挽输出 
GPIOC->CRL&=0XFF00FFFF;
GPIOC->CRL|=0X00330000;  
GPIOC->ODR|=0X00000030;   
//PORTB0 1 推挽输出
GPIOB->CRL&=0XFFFFFF00; 
GPIOB->CRL|=0X00000033;   
GPIOB->ODR|=0X00000003;
//PORTE 推免输出
GPIOE->CRH&=0X00000000;
GPIOE->CRH|=0X33333333;
GPIOE->CRL&=0X00000000;
GPIOE->CRL|=0X33333333; 
GPIOE->ODR|=0XFFFFFFFF;//PORTE输出高
我的板子是:
板子端口   屏接口
PORTE0~15--D0~15
PORTC4、5--CS、RS
PORTB0、1--WR、RD

这里为什么每次配置完IO口都要设置成输出高??
如果每次配置完端口模式后不使其输出高,这样我连接硬件在MDK4中单步执行程序,每次执行完DeviceCode = LCD_ReadReg(0x0000); (读屏控制器ID),可以得到ID(8989),但为什么下载到板子上,按复位键后却打印出来的ID是0?原子哥给分析一下是什么原因~~弄了好几天了,心灰意冷


这篇文章被编辑了 1 次. 最近一次更新是在 2012/02/15 10:47


STM32学习群:214363223
[加为好友] 回复 引用回复
[Down] [Up]
[1楼] 正点原子


等级:NO
注册时间:
2010/12/02 10:41
文章: 8097
来自: 湖南
离线

回复【楼主位】 林少 :
---------------------------------
配置完输出高有个好处就是电平都是确定的,而且很多器件的默认空闲状态都是高电平,所以,输出高是一个配置IO后的常用做法.
把延时参数改一改吧.参考我们的代码.



我的淘宝小店:http://shop62103354.taobao.com
[加为好友] 回复 引用回复
[Down] [Up]
[2楼] 林少


等级:NO
注册时间:
2012/02/15 10:13
文章: 15
离线

回复【1楼】 正点原子 :
---------------------------------
u16 POINT_COLOR = 0x0000,BACK_COLOR = 0xFFFF;  
u16 DeviceCode;  

#if LCD_FAST_IO==1 //快速IO
//写寄存器函数
void LCD_WR_REG(u8 data)

LCD_RS_CLR;//写地址  
  LCD_CS_CLR; 
DATAOUT(data); 
LCD_WR_CLR;
LCD_WR_SET; 
  LCD_CS_SET;   
}
#else//正常IO
//写寄存器函数
void LCD_WR_REG(u8 data)

LCD_RS=0;//写地址  
  LCD_CS=0; 
DATAOUT(data); 
LCD_WR=0;
// delay_us(10); 
LCD_WR=1; 
  LCD_CS=1;   

#endif

//写寄存器
void LCD_WriteReg(u8 LCD_Reg, u16 LCD_RegValue)
{
LCD_WR_REG(LCD_Reg);  
LCD_WR_DATA(LCD_RegValue);       
}    
//读寄存器
u16 LCD_ReadReg(u8 LCD_Reg)
{    
u16 t;
LCD_WR_REG(LCD_Reg);  //写入要读的寄存器号  
GPIOE->CRL=0X88888888; //PE0-7  上拉输入
GPIOE->CRH=0X88888888; //PE8-15 上拉输入
// GPIOE->ODR=0XFFFF;    //全部输出高
#if LCD_FAST_IO==1 //快速IO
LCD_RS_SET;
LCD_CS_CLR;
//读取数据(读寄存器时,并不需要读2次)
LCD_RD_CLR;
delay_us(5);//FOR 8989,延时5us
             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  
  GPIOE->CRL&=0X00000000;
GPIOE->CRH&=0X00000000;
GPIOE->CRL|=0X33333333; //PB0-7  上拉输出
GPIOE->CRH|=0X33333333; //PB8-15 上拉输出
// GPIOE->ODR=0XFFFF;    //全部输出高
return t;  
}

程序里我把t=DATAIN;提到了LCD_RD_SET;前面。是在每次清除写端口、清楚读端口LCD_WR_CLR;、LCD_RD_CLR;后加个延时吗?然后再将其置高?



STM32学习群:214363223
[加为好友] 回复 引用回复
[Down] [Up]
[3楼] 正点原子


等级:NO
注册时间:
2010/12/02 10:41
文章: 8097
来自: 湖南
离线

delay_us(5);//FOR 8989,延时5us 



我的淘宝小店:http://shop62103354.taobao.com
[加为好友] 回复 引用回复
[Down] [Up]
[4楼] 林少


等级:NO
注册时间:
2012/02/15 10:13
文章: 15
离线

回复【3楼】 正点原子 :
---------------------------------
我就是用的你们的程序,在那里我都改成delay_ms(5);了,还是不行!写寄存器那里要加延时吗?



STM32学习群:214363223
[加为好友] 回复 引用回复
[Down] [Up]
[5楼] 正点原子


等级:NO
注册时间:
2010/12/02 10:41
文章: 8097
来自: 湖南
离线

那就奇怪了.
在我们的板子上试试?



我的淘宝小店:http://shop62103354.taobao.com
[加为好友] 回复 引用回复
[Down] [Up]
[6楼] 林少


等级:NO
注册时间:
2012/02/15 10:13
文章: 15
离线

回复【5楼】 正点原子 :
---------------------------------
回头试一下,谢谢原子哥



STM32学习群:214363223
[加为好友] 回复 引用回复
[Down] [Up]
[7楼] 林少


等级:NO
注册时间:
2012/02/15 10:13
文章: 15
离线

回复【6楼】 林少 :
---------------------------------
可以打印出ID了,但是屏不显示字符,用的是你们的程序。什么原因呢?
读到的ID是8989对应的控制器是SSD1289吗?



STM32学习群:214363223
[加为好友] 回复 引用回复
[Down] [Up]
[8楼] 正点原子


等级:NO
注册时间:
2010/12/02 10:41
文章: 8097
来自: 湖南
离线

是的



我的淘宝小店:http://shop62103354.taobao.com
[加为好友] 回复 引用回复
 
前往: 

Powered by ALIENTEK工作室 © 粤ICP备12000418号-1