|
|
前往: |
| STM32读TFTLCD屏问题 |
| 发表人 | 内容 | |
|---|---|---|
| 2012/02/15 10:19 |
|
|
|
[楼主位] 林少
等级:
注册时间:![]() 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 |
||
|
||
| 2012/02/15 11:13 |
|
|
|
[1楼] 正点原子
等级:
注册时间:![]() 2010/12/02 10:41 文章: 8097 来自: 湖南 离线 |
回复【楼主位】 林少 :
--------------------------------- 配置完输出高有个好处就是电平都是确定的,而且很多器件的默认空闲状态都是高电平,所以,输出高是一个配置IO后的常用做法. 把延时参数改一改吧.参考我们的代码. |
|
|
我的淘宝小店:http://shop62103354.taobao.com |
||
|
||
| 2012/02/15 11:40 |
|
|
|
[2楼] 林少
等级:
注册时间:![]() 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 |
||
|
||
| 2012/02/15 11:55 |
|
|
|
[3楼] 正点原子
等级:
注册时间:![]() 2010/12/02 10:41 文章: 8097 来自: 湖南 离线 |
delay_us(5);//FOR 8989,延时5us
|
|
|
我的淘宝小店:http://shop62103354.taobao.com |
||
|
||
| 2012/02/15 12:42 |
|
|
|
[4楼] 林少
等级:
注册时间:![]() 2012/02/15 10:13 文章: 15 离线 |
回复【3楼】 正点原子 :
--------------------------------- 我就是用的你们的程序,在那里我都改成delay_ms(5);了,还是不行!写寄存器那里要加延时吗? |
|
|
STM32学习群:214363223 |
||
|
||
| 2012/02/15 12:44 |
|
|
|
[5楼] 正点原子
等级:
注册时间:![]() 2010/12/02 10:41 文章: 8097 来自: 湖南 离线 |
那就奇怪了.
在我们的板子上试试? |
|
|
我的淘宝小店:http://shop62103354.taobao.com |
||
|
||
| 2012/02/15 15:03 |
|
|
|
[6楼] 林少
等级:
注册时间:![]() 2012/02/15 10:13 文章: 15 离线 |
回复【5楼】 正点原子 :
--------------------------------- 回头试一下,谢谢原子哥 |
|
|
STM32学习群:214363223 |
||
|
||
| 2012/02/15 16:45 |
|
|
|
[7楼] 林少
等级:
注册时间:![]() 2012/02/15 10:13 文章: 15 离线 |
回复【6楼】 林少 :
--------------------------------- 可以打印出ID了,但是屏不显示字符,用的是你们的程序。什么原因呢? 读到的ID是8989对应的控制器是SSD1289吗? |
|
|
STM32学习群:214363223 |
||
|
||
| 2012/02/15 17:19 |
|
|
|
[8楼] 正点原子
等级:
注册时间:![]() 2010/12/02 10:41 文章: 8097 来自: 湖南 离线 |
是的
|
|
|
我的淘宝小店:http://shop62103354.taobao.com |
||
|
||
|
|
||
|
| 前往: |