OpenEdv-开源电子网

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

求助!FMC NE1和NE4区别

[复制链接]

4

主题

28

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
358
金钱
358
注册时间
2018-8-6
在线时间
17 小时
发表于 2018-8-13 09:00:27 | 显示全部楼层 |阅读模式
5金钱
大神求助!使用stm32F429的时候,用FMC的NE4去驱动LCD的片选信号有问题(原驱动程序使用NE1没问题),程序是完全一致,区别只是用NE1和NE4。硬件用的是阿波罗的开发板+自己的底板,底板全部留空,只有LCD相关的。

详见此贴
9486 EMwin鼠标异常http://www.openedv.com/forum.php ... &fromuid=113251
(出处: OpenEdv-开源电子网)


同样的程序,同样的“秀鼠标'的函数“        GUI_CURSOR_Show()”,使用NE1和 NE4的区别如附件图:
但我仅仅只改了
        SRAM_Handler.Init.NSBank=FMC_NORSRAM_BANK4;     //使用NE4

#define LCD_BASE        ((u32)(0x6c000000 | 0x0007FFFE));这两条语句
为什么GUI_CURSOR_Show()的示波器图会不一样?


使用NE1:

NE1

NE1

使用ne4:

ne4

ne4
  

由于GUI_CURSOR_Show()这个被GUI程序封装了,看不到底层,只能看到示波器是这个样子,黄色的是DB0,蓝色的是LCD的CS信号



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

使用道具 举报

4

主题

28

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
358
金钱
358
注册时间
2018-8-6
在线时间
17 小时
 楼主| 发表于 2018-8-13 09:03:01 | 显示全部楼层
FMC配置如下:

基本就是原子哥的例程,就是修改了NE4而已

        SRAM_Handler.Instance=FMC_NORSRAM_DEVICE;               
        SRAM_Handler.Extended=FMC_NORSRAM_EXTENDED_DEVICE;   
   
        SRAM_Handler.Init.NSBank=FMC_NORSRAM_BANK4;     //使用NE4
        SRAM_Handler.Init.DataAddressMux=FMC_DATA_ADDRESS_MUX_DISABLE; //地址/数据线不复用
        SRAM_Handler.Init.MemoryType=FMC_MEMORY_TYPE_SRAM;   //SRAM
        SRAM_Handler.Init.MemoryDataWidth=FMC_NORSRAM_MEM_BUS_WIDTH_16; //16位数据宽度
        SRAM_Handler.Init.BurstAccessMode=FMC_BURST_ACCESS_MODE_DISABLE; //是否使能突发访问,仅对同步突发存储器有效,此处未用到
        SRAM_Handler.Init.WaitSignalPolarity=FMC_WAIT_SIGNAL_POLARITY_LOW;//等待信号的极性,仅在突发模式访问下有用
        SRAM_Handler.Init.WaitSignalActive=FMC_WAIT_TIMING_BEFORE_WS;   //存储器是在等待周期之前的一个时钟周期还是等待周期期间使能NWAIT
        SRAM_Handler.Init.WriteOperation=FMC_WRITE_OPERATION_ENABLE;    //存储器写使能
        SRAM_Handler.Init.WaitSignal=FMC_WAIT_SIGNAL_DISABLE;           //等待使能位,此处未用到
        SRAM_Handler.Init.ExtendedMode=FMC_EXTENDED_MODE_ENABLE;        //读写使用不同的时序
        SRAM_Handler.Init.AsynchronousWait=FMC_ASYNCHRONOUS_WAIT_DISABLE;//是否使能同步传输模式下的等待信号,此处未用到
        SRAM_Handler.Init.WriteBurst=FMC_WRITE_BURST_DISABLE;           //禁止突发写
        SRAM_Handler.Init.ContinuousClock=FMC_CONTINUOUS_CLOCK_SYNC_ASYNC;
   
        //FMC读时序控制寄存器
        FMC_ReadWriteTim.AddressSetupTime=0x0F;        //地址建立时间(ADDSET)为15个HCLK 1/180M*15=5.5ns*15=82.5ns
        FMC_ReadWriteTim.AddressHoldTime=0x00;
        FMC_ReadWriteTim.DataSetupTime=0x46;           //数据保存时间(DATAST)为70个HCLK        =5.5*70=385ns
        FMC_ReadWriteTim.AccessMode=FMC_ACCESS_MODE_A; //模式A
        //FMC写时序控制寄存器
        FMC_WriteTim.AddressSetupTime=0x0F;            //地址建立时间(ADDSET)为15个HCLK=82.5ns
        FMC_WriteTim.AddressHoldTime=0x00;
        FMC_WriteTim.DataSetupTime=0x0F;               //数据保存时间(DATAST)为5.5ns*15个HCLK=82.5ns
        FMC_WriteTim.AccessMode=FMC_ACCESS_MODE_A;     //模式A
        HAL_SRAM_Init(&SRAM_Handler,&FMC_ReadWriteTim,&FMC_WriteTim);               
        delay_ms(50); // delay 50 ms
回复

使用道具 举报

2

主题

46

帖子

1

精华

高级会员

Rank: 4

积分
560
金钱
560
注册时间
2017-5-8
在线时间
136 小时
发表于 2018-8-13 09:21:13 | 显示全部楼层
NE4的引脚初始化了没
回复

使用道具 举报

2

主题

686

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
10866
金钱
10866
注册时间
2014-6-12
在线时间
1038 小时
发表于 2018-8-13 09:33:47 | 显示全部楼层
NE1和NE4是选通了不同的地址空间,原NE1正常说明硬件地址在Bank1,你现在用NE4地址选到了Bank4,工作就不正常了。 dizhi.png
回复

使用道具 举报

4

主题

28

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
358
金钱
358
注册时间
2018-8-6
在线时间
17 小时
 楼主| 发表于 2018-8-13 09:53:10 | 显示全部楼层
xuyaqi 发表于 2018-8-13 09:33
NE1和NE4是选通了不同的地址空间,原NE1正常说明硬件地址在Bank1,你现在用NE4地址选到了Bank4,工作就不正 ...

感谢解答。但是,我在板子上把LCD的片选信号割开了,然后在硬件上飞线,可以连接NE1或者NE4。

弱弱问句,感觉这个bank有歧义。到底是您的图上所示的SRAM为BANK1,还是说SRAM里又分为子BANK?
因为按照stm32的宏定义:
#define FMC_NORSRAM_BANK1                       ((uint32_t)0x00000000)
#define FMC_NORSRAM_BANK2                       ((uint32_t)0x00000002)
#define FMC_NORSRAM_BANK3                       ((uint32_t)0x00000004)
#define FMC_NORSRAM_BANK4                       ((uint32_t)0x00000006)

感觉FMC_NORSRAM的内部又分为四个小bank,且BANK1对应NE1,bank4对应NE4。
回复

使用道具 举报

2

主题

686

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
10866
金钱
10866
注册时间
2014-6-12
在线时间
1038 小时
发表于 2018-8-13 10:02:32 | 显示全部楼层
yangmiao0223 发表于 2018-8-13 09:53
感谢解答。但是,我在板子上把LCD的片选信号割开了,然后在硬件上飞线,可以连接NE1或者NE4。

弱弱问 ...

这是软件内部的事情和 硬件NE1,NE4工作无关。
回复

使用道具 举报

4

主题

28

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
358
金钱
358
注册时间
2018-8-6
在线时间
17 小时
 楼主| 发表于 2018-8-13 10:11:03 | 显示全部楼层
xuyaqi 发表于 2018-8-13 10:02
这是软件内部的事情和 硬件NE1,NE4工作无关。

你的意思是 ,NE4也属于BANK1,所以应该改为
        SRAM_Handler.Init.NSBank=FMC_NORSRAM_BANK1;     //使用NE4

#define LCD_BASE        ((u32)(0x6c000000 | 0x0007FFFE));这两条语句


我的意思是这个FMC_NORSRAM_BANK1感觉是指BANK1中的sector。

FMC_NORSRAM_BANK1 对应bank1中的区域1  NE1
FMC_NORSRAM_BANK2  bank1中的区域2    NE2
FMC_NORSRAM_BANK4 对应BANK1中的区域4   NE4

回复

使用道具 举报

4

主题

28

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
358
金钱
358
注册时间
2018-8-6
在线时间
17 小时
 楼主| 发表于 2018-8-13 10:17:14 | 显示全部楼层
fl7547454 发表于 2018-8-13 09:21
NE4的引脚初始化了没

初始化了 PG12。NE4 工作,但是工作不正常。LCD能显示,但是会花屏。同样的程序,抓取CS波形,NE1和NE4的不一致
回复

使用道具 举报

2

主题

686

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
10866
金钱
10866
注册时间
2014-6-12
在线时间
1038 小时
发表于 2018-8-13 10:18:43 | 显示全部楼层
yangmiao0223 发表于 2018-8-13 10:11
你的意思是 ,NE4也属于BANK1,所以应该改为
        SRAM_Handler.Init.NSBank=FMC_NORSRAM_BANK1;     ...

你的理解不对,应该是在NE1选了0x6000 0000起始的地址后,软件再细分不同的地址块,但都在NE1的地址范围。
回复

使用道具 举报

4

主题

28

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
358
金钱
358
注册时间
2018-8-6
在线时间
17 小时
 楼主| 发表于 2018-8-14 08:37:25 | 显示全部楼层
不要沉。。。。。有没有可能是编译 优化了哪里的问题??????
回复

使用道具 举报

4

主题

28

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
358
金钱
358
注册时间
2018-8-6
在线时间
17 小时
 楼主| 发表于 2018-8-14 08:42:43 | 显示全部楼层
求解答~   用正点原子的全套也会出现这个问题
回复

使用道具 举报

4

主题

28

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
358
金钱
358
注册时间
2018-8-6
在线时间
17 小时
 楼主| 发表于 2018-8-14 08:42:55 | 显示全部楼层
只能用 NE1
回复

使用道具 举报

3

主题

259

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2317
金钱
2317
注册时间
2016-12-2
在线时间
354 小时
发表于 2018-8-14 10:22:19 | 显示全部楼层
1. 可以试试看NE2 NE3是否也有类似症状.
2. 把FMC的Timing调慢一点看看有没有改善.
回复

使用道具 举报

4

主题

28

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
358
金钱
358
注册时间
2018-8-6
在线时间
17 小时
 楼主| 发表于 2018-8-14 10:53:05 | 显示全部楼层
sammy902583 发表于 2018-8-14 10:22
1. 可以试试看NE2 NE3是否也有类似症状.
2. 把FMC的Timing调慢一点看看有没有改善.

NE2  NE3 也是类似,只有NE1是正常的。
FMC timing 你是指那些地址建立时间 数据保存时间么?都改慢过了 还是有问题。

另外,有个情况是。使用NE4,使用阿波罗自己的开发板/母版/液晶屏,不带EMWIN的液晶显示例程没有一点问题,带了emwin的液晶显示例程就有问题。

我的意思是,用原子哥的硬件+软件(软件将NE1改为NE4)也有问题。

还有什么思路不?
回复

使用道具 举报

3

主题

259

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2317
金钱
2317
注册时间
2016-12-2
在线时间
354 小时
发表于 2018-8-14 11:49:03 | 显示全部楼层
yangmiao0223 发表于 2018-8-14 10:53
NE2  NE3 也是类似,只有NE1是正常的。
FMC timing 你是指那些地址建立时间 数据保存时间么?都改慢过了 ...

没有别的招了.
不知道有没有机会换另一个屏试试看?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-2 20:24

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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