OpenEdv-开源电子网

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

TFTLCD时用到的FSMC遇到奇怪问题

[复制链接]

1

主题

8

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2014-1-14
在线时间
0 小时
发表于 2014-1-14 11:08:34 | 显示全部楼层 |阅读模式
昨天遇到了 LCD白屏的问题    能读型号 读出来是9341  

后来折腾了很久  换了另外一块板之后才正常了  

两块板是一样的 芯片也一样  

现在发现一个问题   配置FSMC时若使用bank1的块4,则能读型号 不能正常显示(白屏)

若换回块1则都正常,能读型号能正常显示

FSMC的配置与选择的地址如下:(地址线选择A16)

使用bank1的块1:
FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;//  使用块1
    FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; //
    FSMC_NORSRAMInitStructure.FSMC_MemoryType =FSMC_MemoryType_SRAM;// FSMC_MemoryType_SRAM;  //SRAM   
    FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;//
    FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode =FSMC_BurstAccessMode_Disable;// FSMC_BurstAccessMode_Disable; 
    FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait=FSMC_AsynchronousWait_Disable; 
    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_Enable; // 
    FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; 
    FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &readWriteTiming; //
    FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &writeTiming;  //

    FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);  //

    FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);  

地址:typedef struct
{
u16 LCD_REG;
u16 LCD_RAM;
} LCD_TypeDef;

    
#define LCD_BASE        ((u32)(0x60000000 | 0x0001FFFE))
#define LCD             ((LCD_TypeDef *) LCD_BASE)


使用块4:
FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM4;//  使用块4
    FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; //
    FSMC_NORSRAMInitStructure.FSMC_MemoryType =FSMC_MemoryType_SRAM;// FSMC_MemoryType_SRAM;  //SRAM   
    FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;//
    FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode =FSMC_BurstAccessMode_Disable;// FSMC_BurstAccessMode_Disable; 
    FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait=FSMC_AsynchronousWait_Disable; 
    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_Enable; // 
    FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; 
    FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &readWriteTiming; //
    FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &writeTiming;  //

    FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);  //

    FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM4, ENABLE);  




地址:typedef struct
{
u16 LCD_REG;
u16 LCD_RAM;
} LCD_TypeDef;

    
#define LCD_BASE        ((u32)(0x6C000000 | 0x0001FFFE))
#define LCD             ((LCD_TypeDef *) LCD_BASE)

块4地址从0x6C000000开始, (地址线选择A16)

现在的疑问就是:①我的第一块板,能通过FSMC读取型号,但LCD却不能正常显示,换板之后我知道是板的问题,但为什么会这么奇怪呢?因为读取型号正常后我就断定硬件没问                             题,于是调试了一整天无结果
                        ②为什么使用bank1的块1正常,块4则不正常,但两者都能通过FSMC读取型号,是我配置的问题吗?

希望各路大神指教!









正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

17

主题

470

帖子

1

精华

高级会员

Rank: 4

积分
718
金钱
718
注册时间
2013-11-23
在线时间
0 小时
发表于 2014-1-14 12:20:34 | 显示全部楼层
FSMC配置貌似没什么问题,还有两个读写时序的结构体指针呢
回复 支持 反对

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2014-1-14
在线时间
0 小时
 楼主| 发表于 2014-1-14 12:45:34 | 显示全部楼层
回复【2楼】hechao3225:
---------------------------------
读写和原子哥的一样
readWriteTiming.FSMC_AddressSetupTime = 0x01;
    readWriteTiming.FSMC_AddressHoldTime = 0x00;
    readWriteTiming.FSMC_DataSetupTime = 0x0f;
    readWriteTiming.FSMC_BusTurnAroundDuration = 0x00;
    readWriteTiming.FSMC_CLKDivision = 0x00;
    readWriteTiming.FSMC_DataLatency = 0x00;
    readWriteTiming.FSMC_AccessMode = FSMC_AccessMode_A;
    

writeTiming.FSMC_AddressSetupTime = 0x00;
    writeTiming.FSMC_AddressHoldTime = 0x00;
    writeTiming.FSMC_DataSetupTime = 0x03;
    writeTiming.FSMC_BusTurnAroundDuration = 0x00;
    writeTiming.FSMC_CLKDivision = 0x00;
    writeTiming.FSMC_DataLatency = 0x00;
    writeTiming.FSMC_AccessMode = FSMC_AccessMode_A;

有的人用模式B  我没试过模式B
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-1-14 14:10:07 | 显示全部楼层
回复【楼主位】拳拳:
---------------------------------
这样看着没问题

你将读写这里改为16个时钟试下“readWriteTiming.FSMC_DataSetupTime = 0x0f; ”----> readWriteTiming.FSMC_DataSetupTime = 0xff; 这样试下能不能正常
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

头像被屏蔽

38

主题

382

帖子

0

精华

高级会员

Rank: 4

积分
596
金钱
596
注册时间
2012-12-5
在线时间
19 小时
发表于 2014-1-14 18:07:07 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-6 17:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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