OpenEdv-开源电子网

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

fsmc 配置LCD 已经可以读出 ID为 9325 并且能够执行9325的驱动代码 但是LCD一直是白屏 这个说明可能会有哪些问题存在

[复制链接]

23

主题

292

帖子

0

精华

高级会员

Rank: 4

积分
501
金钱
501
注册时间
2013-9-17
在线时间
17 小时
发表于 2013-11-27 14:44:12 | 显示全部楼层 |阅读模式

1. 关于9325的驱动代码是厂家直接给的 放在别的板子上是可以正常使用的 (普通IO控制)也就是说 ILI9325寄存器参数配置不存在问题 可以这样认为么? (同样的液晶同样的驱动代码)

2.能够读出ID 能够说明FSMC的配置没有问题了么?(读取ID使用到了写寄存器,读寄存器等操作指令涉及到FSMC总线通信)

3.使用的是NE1 + A16 选择A模式

4.
补充 : 经测试往DB口写0xffff  用示波器 检测到DB数据口均为低 另外CS RS RD WR也不正常
 


这是fsmc配置有问题么 注:FSMC_Bank1->BTCR[0]=0X00000000;  没有修改 还是之前战舰历程的参数 是 6 和 7
                                         FSMC_Bank1->BTCR[1]=0X00000000;

多谢


PS:使用的是战舰的TFTLCD显示例程 只修改了NE4->NE1 以及 A10 ->A16  至于那个BCR1 不知道在哪里修改  看到了一个 BCR1[8]的数组  如要修改 请问该如何操作呢


 

 

闷鱼闷闷不乐吃焖鱼
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2013-11-27 16:35:48 | 显示全部楼层
回复【楼主位】闷鱼:
---------------------------------
你直接插到战舰上面用原子哥的例程测试下看下是否正常,原子哥的程序兼容好集中驱动芯片的
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

23

主题

292

帖子

0

精华

高级会员

Rank: 4

积分
501
金钱
501
注册时间
2013-9-17
在线时间
17 小时
 楼主| 发表于 2013-11-27 17:43:29 | 显示全部楼层
回复【2楼】Badu_Space:
---------------------------------
我刚才用简化的FSMC把液晶搞定了  但是 我想找出来为什么原子哥的程序到我这里就不能用  另外我用的是自己画得板子  没有那种面板的 是 裸屏 
所以 我现在在尝试使用原子哥的程序移植到我的液晶上  
我到目前做了这些事:液晶成功显示了 (可惜不是原子哥的程序) 
1:液晶本身不存在显示问题
2:液晶驱动代码可用
3:PCB连线没有错

我正在尝试做的事 :
1:原子哥用的是 NE4 ---  A10 ---  SRAM  
      我把它改成我自己的板子上的连线了 我的只有100脚
                        NE1 --- A16 ---- NOR
2:附带的IO口都换成与我板子对应的 比如 NE1 --PD7  A16 --PD11(设置推挽输出)
3:另外基址 原子哥的是 0x6c001ffe  我替换为 0x60001ffe  同样使用例程中的结构体
目前的结果:
1:可以正常的读取ID 为 9325 很稳定
2:屏幕为白屏
3:尝试往液晶全部写入0xffff  用示波器检测到16个数据口全部为低 也就是说 写入的0xffff 没有得到相应的状态,
4:CS , WR ,RS ,RD状态也是初始化状态
结论:FSMC配置有问题(或者可以直接说基址不能使用那个结构体??)因为写入的数据全无相应,但是为什么又可以读取到ID
         实际上我还不太懂能够读取ID到底说明了什么问题。。。

非常谢谢
闷鱼闷闷不乐吃焖鱼
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-11-27 23:34:05 | 显示全部楼层
回复【3楼】闷鱼:
---------------------------------
能读到ID,说明你成功一半了.
实在是白屏,你可以考虑:
在一个寄存器,写入一个值.然后读取这个寄存器,看看读出的值和你写入的值,是否一致?进一步判断读写操作.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

23

主题

292

帖子

0

精华

高级会员

Rank: 4

积分
501
金钱
501
注册时间
2013-9-17
在线时间
17 小时
 楼主| 发表于 2013-11-28 01:06:12 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
好 我尝试下
 之前读取不到正确的DB口值是因为 只写了一次 
后来把 0xffff 丢在while里面 
 然后 可以读到 DB0-15都是 高 说明 这个写是没问题的
函数原型 ----原子哥的函数
LCD_Clear(0xffff);

//清屏函数
//color:要清屏的填充色
void LCD_Clear(u16 color)
{
u32 index=0;      
u32 totalpoint=lcddev.width;
totalpoint*=lcddev.height; //得到总点数
LCD_SetCursor(0x00,0x0000); //设置光标位置     -------REG /DATA
LCD_WriteRAM_Prepare();     //开始写入GRAM   ------GRAM
for(index=0;index<totalpoint;index++)
{
LCD->LCD_RAM=color;   
}
}  

这函数 用到了 寄存器的 读写 以及RAM的写 而且 我能够读取到每个DB口 的状态 是正确的  (示波器)  
但是 

但是 


但是


但是   -----   依然白屏  


我可以百分之百确定     1.  液晶质量没问题  
                                2.  液晶的驱动代码没问题
因为 我换一个fsmc的配置(整个代码以及工程都是自己弄得)就可以正常使用液晶显示
  该配置代码 如下 


#define Bank1_LCD_D    ((uint32_t)0x60020000)    //disp Data ADDR
#define Bank1_LCD_C    ((uint32_t)0x60000000) //disp Reg ADDR



void FSMC_LCD_Init(void)
{
  FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
  FSMC_NORSRAMTimingInitTypeDef  p;
  //GPIO_InitTypeDef GPIO_InitStructure; 

  p.FSMC_AddressSetupTime = 0x02;
  p.FSMC_AddressHoldTime = 0x00;
  p.FSMC_DataSetupTime = 0x05;
  p.FSMC_BusTurnAroundDuration = 0x00;
  p.FSMC_CLKDivision = 0x00;
  p.FSMC_DataLatency = 0x00;
  p.FSMC_AccessMode = FSMC_AccessMode_B;

  FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;
  FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
  FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_NOR;
  FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
  FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
  FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
  FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
  FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
  FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
  FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
  FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
  FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
  FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
  FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;  

  FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure); 

  /* Enable FSMC Bank1_SRAM Bank */
  FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);  
}




原子哥  我瞬间 感到十分无助了 











闷鱼闷闷不乐吃焖鱼
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-11-28 11:48:22 | 显示全部楼层
回复【5楼】闷鱼:
---------------------------------
你用这个可以用的配置就OK了,呵呵.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

23

主题

292

帖子

0

精华

高级会员

Rank: 4

积分
501
金钱
501
注册时间
2013-9-17
在线时间
17 小时
 楼主| 发表于 2013-11-28 12:14:43 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
原子哥 你之前说过你那个地址结构体是可以通用的  
我把它移植下 问题就出在这里了 
估计得改这个结构体才好  
可能不一定通用的
闷鱼闷闷不乐吃焖鱼
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-11-28 16:17:26 | 显示全部楼层
回复【7楼】闷鱼:
---------------------------------
结构体是通用的:
我在F103VE也试过,可以.也是用的NE1,不过是A21
//LCD地址结构体
typedef struct
{
u16 LCD_REG; 
u16 LCD_RAM;
} LCD_TypeDef;
//使用NOR/SRAM的 Bank1.sector1,地址位HADDR[27,26]=00 A21作为数据命令区分线 
//注意设置时STM32内部会右移一位对其!      
#define LCD_BASE        ((u32)(0x60000000 | 0x003FFFFE))
#define LCD             ((LCD_TypeDef *) LCD_BASE)
 

以上代码测试OK

在F4上,我也是这种方法,也照样OK.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

23

主题

292

帖子

0

精华

高级会员

Rank: 4

积分
501
金钱
501
注册时间
2013-9-17
在线时间
17 小时
 楼主| 发表于 2013-11-29 17:34:20 | 显示全部楼层
回复【8楼】正点原子:
---------------------------------昨天深夜   ---  
   LCD->LCD_RAM 莫名其妙的被赋值 为 0x9325 !!!!!!!!!  
   
   我仔细看了下 两种地址表达方式不一样 但是 目的都是一样的 昨天 做这个测试就是为了 证明 是通用的   之前有个网友在这个论坛说 原子哥 你的的结构体 不能通用  我当时不信 所以 有这个测试  
  之后 使用这个结构体 出现各种bug 是因为 结构体地址被赋值 了 强制赋值 为 0x9325 (我改程序的原因) 
   我现在还没看出是哪个地方写错了   ---  与  结构体地址写法无关 
   所以原子哥的结构体是通用的   

  我很纳闷  读取 ID 成功了(采用 0x60020000的写法) 但是 ID 值却被莫名其妙的赋值到了 地址线上(函数着个测试 修改对应的 REG 和GRAM 地址 :但是到了 往寄存器写值的时候 那个函数就出问题 LCD_WriteData(REG, REG_DATA)) 。。。。
闷鱼闷闷不乐吃焖鱼
回复 支持 反对

使用道具 举报

22

主题

103

帖子

0

精华

高级会员

Rank: 4

积分
950
金钱
950
注册时间
2017-2-23
在线时间
205 小时
发表于 2017-5-31 17:26:17 | 显示全部楼层
兄弟问题解决了吗请问是怎么解决的?
回复 支持 反对

使用道具 举报

23

主题

292

帖子

0

精华

高级会员

Rank: 4

积分
501
金钱
501
注册时间
2013-9-17
在线时间
17 小时
 楼主| 发表于 2017-6-8 10:31:25 | 显示全部楼层
JACK123 发表于 2017-5-31 17:26
兄弟问题解决了吗请问是怎么解决的?

时间久远基本上忘记了。
不过能读ID了就没啥问题了
闷鱼闷闷不乐吃焖鱼
回复 支持 反对

使用道具 举报

5

主题

29

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
275
金钱
275
注册时间
2017-6-20
在线时间
74 小时
发表于 2018-7-16 17:36:18 | 显示全部楼层
你怎么读到ID的  能附上源码吗
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-17 02:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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